Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
860to864
860to864
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
drei Spalten in einer zusammen führen
15.04.2007 19:17:33
Uwe
Hallo an Alle,
irgendwie steh ich auf dem Schlauch..... was muß ich tun wenn ich die Inhalte von drei Spalten in einer haben möchte.......
.....K......./.....L......../....M......
04.03.07..............................
01.03.07..............................
................21.02.07..............
................20.02.07..............
04.03.07..............................
04.03.07..............................
................18.12.06..............
................25.01.07..............
11.03.07..............................
................08.11.06..............
................11.12.06..............
...............................07.03.07
...............................09.01.07
....... Spalte von K2 bis K400 und L2 bis L400 und M2 bis M400 eingeordnet in Spalte Z ab Z2 bis Z400 auf dem Tabellenblatt.
Dank schon mal im vorab!
Gruß Uwe

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: drei Spalten in einer zusammen führen
ransi
HAllo Uwe
Teste mal dies hier:
Option Explicit


Public Sub test()
Dim a As Long
Dim Zelle As Range
Dim bereich As Range
Set bereich = Range("K1:M100")
a = 1
For Each Zelle In bereich
    If Zelle <> "" Then
        a = a + 1
        Range("Z" & a) = Zelle.Value
    End If
Next
End Sub

ransi

Anzeige
AW: drei Spalten in einer zusammen führen
15.04.2007 20:38:44
Uwe
Hallo Ransi,
hab es angepasst und es läuft super!
Vielen Dank!
Gruß Uwe

AW: drei Spalten in einer zusammen führen
16.04.2007 01:10:00
Uwe
Hallo Ransi,
beim testen ist mir aufgefallen das die Berechnung der Zellen sehr lange dauert. Kann man den code im ablauf beschleunigen? oder hab ich da was falsch gemacht.
Hab den Code als Modul eingegeben und starte das dann aus einer Userform mit einem Button durch den Befehl Call.
Gruß Uwe

AW: drei Spalten in einer zusammen führen
ransi
Hallo Uwe
Ddann versuch mal dies:
Option Explicit


Public Sub test()
Dim a As Long
Dim Zelle As Range
Dim bereich As Range
Dim i As Integer
Dim arr As Variant
Dim appCalc
Dim appScreen As Boolean
Dim appEvent
On Error GoTo ende
With Application
    appCalc = .Calculation
    appScreen = .ScreenUpdating
    appEvent = .EnableEvents
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
End With
'##################################
Set bereich = Range("K1:M100")
a = 1
For Each Zelle In bereich
    If Zelle <> "" Then
        a = a + 1
        Range("Z" & a) = Zelle.Value
    End If
Next
'##################################
ende:
With Application
    .Calculation = appCalc
    .EnableEvents = appEvent
    .ScreenUpdating = appScreen
End With
End Sub

Automatische Berechnung, Bildschirmaktualisierung und Ereignissmakros während des CodeDurchlaufes ausgeschaltet.
ransi

Anzeige
AW: drei Spalten in einer zusammen führen
16.04.2007 19:48:51
Uwe
Hallo Ransi,
hab den Code jetzt so eingefügt und läuft soweit suuper.
Vielen Dank für die Mühe!!!!!!
Hab ich das richtig verstanden das der erste Teil die Funktionen abschaltet, dann der Code läuft und nachher im dritten Teil wieder alles aktiviert wird?(mann will ja lernen!!:-)
Gruß Uwe

AW: drei Spalten in einer zusammen führen
ransi
HAllo
Fast:
Public Sub test()
'Deklarationsteil
.
.
With Application
    'Einstellungen merken
    appCalc = .Calculation
    appScreen = .ScreenUpdating
    appEvent = .EnableEvents
    'Abschalten
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
End With
'##################################
'Code
'##################################
ende:
'Einstellungen auf die gemerkten Werte zurücksetzen
With Application
    .Calculation = appCalc
    .EnableEvents = appEvent
    .ScreenUpdating = appScreen
End With
End Sub


Im ersten Teil merkt sich der Code deine Einstellungen.
Dann wird abgeschaltet.
Weil ich das nicht einfach wieder einschalten will, setze ich die Einstellungen auf die ursprünglichen Werte.
Stell dir vor die Automatische Berechnung war schon auf xlCalculationManual und ich setze sie im letzten Teil auf xlCalculationAutomatic.
Das wäre eine Einstellung die vor dem Durchlauf des Codes nicht so war, also nicht vom User gewünscht.
Also besser die Ausgangswerte merken und am Ende wieder auf sie zurückstellen.
ransi

Anzeige
AW: drei Spalten in einer zusammen führen
15.04.2007 22:37:15
Daniel
Hallo
eine andere Möglichkeit:
wenn in einer Zeile von den 3 Spalten jeweils nur eine besetzt ist, dann je nach Zellinhalt mit diesen Formeln in Z2 (und dann nach unten kopieren):
für Textwerte:
= K2&L1&M1
für Zahlen (auch Datum oder Zeit)
=K1+L2+M2
die Leeren Zellen werden als 0 interpretiert.
Formeln einfach nach unten kopieren und bei bearf mit
- Spalte markieren
- Kopieren
- Bearbeiten - Inhalte einfügen - Werte
die Formeln durch ihre Werte ersetzen, dann können die Ursprungszellen gelöscht werden.
oder als Makro:

Public Sub Zusammenfassen()
range("Z2:Z400").formulaR1C1 = "=RC11+RC12+RC13" '(bzw ="=RC11&RC12&RC13")
range("Z2:Z400").formula = range("z2:Z400").value
end sub


Gruß, Daniel

Anzeige
AW: drei Spalten in einer zusammen führen
16.04.2007 20:00:00
Uwe
Hi Daniel,
hab den Code von Ransi übernommen, da hier alles läuft zum weiteren Verarbeiten.
Jedoch würde mich die einfach Blattlösung mit Formeln auch mal interessieren.
Hab den =K2&L2&M2 benutzt und auch die entsprechenden Einträge bekommen.
Jedoch benutzte ich das Ergebnis für folgende Formel
=SUMMENPRODUKT((JAHR(KSH!Z2:Z400)=2006)*(MONAT(KSH!Z2:Z400)=8))
auf einem anderen Tabellenblatt.
Hierbei kommt jedoch nur als Ergebnis "#Wert" bei raus. Vielleicht muß die Formel dafür geändert werden.
Hab da auch was rumprobiert aber hat nix funktioniert.
Vielleicht gibts da ja auch was.
Schon mal dank für die Mühe!
Gruß Uwe

Anzeige
AW: drei Spalten in einer zusammen führen
16.04.2007 20:51:00
Daniel
Hallo
wenn du das Ergebnis mit Summenprodukt weiterbearbeitest, mußt du auf jeden Fall in der Formel das + verwenden, sonst ist dein Ergebnis ja ein Textstring, der nicht aufsummiert werden kann.
das geht aber nur, wenn deine Leerzellen entweder echte Leerzellen sind, oder den Wert 0 haben, der durch die Format- oder Ansichtseinstellung ausgeblendet wurde
sollten deine Leerzellen keine echten Leerzellen sein sondern Formeln, die als Ergebnis ein Leerfeld mit ="" zurückgeben, mußt du entweder das ="" durch =0 ersetzen, oder doch mit & arbeiten, und dann das Ergebnis wieder in eine Zahl umwandeln.
die Formel sieht dann so aus:

=WERT($K2&$L2&$M2)


bzw als Befehl im Makro:


range("Z2:Z400").formulaR1C1 =VALUE(RC11&RC12&RC13)


Gruß, Daniel
ps solltest du doch meine Variante mal als Makro umsetzen, würde mich interessieren, welche schneller ist.

Anzeige
AW: drei Spalten in einer zusammen führen
ransi
HAllo Daniel
Ich weiss nicht ob Uwe das austestet.
Aber dein Ansatz in diesen 5 Zeilen Code
Public Sub test2()
Dim start As Double
start = Timer
With Range("Z1:Z100")
    .FormulaLocal = "=K1 & L1 & M1"
    .Value = .Value
    .NumberFormat = "DD.MM.YY"
End With
Debug.Print Timer - start
End Sub

ist ca 100 mal schneller mein zuletzt geposteter Code.
ransi

Anzeige
AW: drei Spalten in einer zusammen führen
16.04.2007 23:02:00
Daniel
Hallo
danke für die Info
das spricht ja für die Doktrin, was mit Formeln zu lösen geht, sollte auch mit Formeln gelöst werden, auch in VBA
Gruß, und gute Nacht, Daniel

Hallo Daniel und Ransi
16.04.2007 23:07:20
Uwe
Hallo Daniel und Ransi,
hab den verkürzten Code von Ransi nochmal getestet gegen den langen.
Bei mir macht das kaum einen Unterschied in der Geschwindigkeit.
Beides ist schnell.
Das von Daniel bekomm ich so nicht hin, da schreit er Variabelenfehler. Ich glaub da fehlt mir noch ne Menge Wissen.
Gruß Uwe

AW: Hallo Daniel und Ransi
17.04.2007 00:01:35
Daniel
Dann lad doch mal deine Datei hoch.
Theoretische Fehlersuche ist nicht ganz so leicht.
Gruß, Daniel

Anzeige
AW: Hallo Daniel und Ransi
18.04.2007 23:09:09
Uwe
Hallo Daniel,
hab ich mal gemacht.....
https://www.herber.de/bbs/user/41861.xls
aber nicht lachen......besser kann ich es noch nicht...:-)
Gruß Uwe

AW: Hallo Daniel und Ransi
19.04.2007 23:55:00
Daniel
Hallo
damit sollte es gehen:

Public Sub übertrag_z()
Application.EnableEvents = False
With Range("z2:Z400")
.FormulaLocal = "=K2&l2&m2"
.Formula = .Value
End With
Application.EnableEvents = True
End Sub


Gruß, Daniel

AW: drei Spalten in einer zusammen führen
16.04.2007 23:58:26
Daniel
Hallo
ich hab mal ein kleines Makro geschrieben, daß die Zeit misst, die Excel in verschieden Varianten benötigt, um eine vorgegebene Anzahl von 3er-Additionen durchzuführen:
1. normale Schleife mit Zellwerten
2. wie 1, aber Bildschirm aus
3. Formellösung ohne Schleifen
4. addition in Schleifen, aber mit internen Array-Variablen, die zurückgeschrieben werden.
das Ergebnis sehe jeder selbst, ich denke mal 10.000 ist ein guter Startwert

Sub Speedtest()
Dim Anz As Long
Dim Zeit(3) As Double
Dim Start As Double
Dim i As Long
Dim j As Long
Dim Ergebnis As String
Dim Werte
Dim Summe
Cells.Clear
Anz = InputBox("Anzahl von Additionen (1-65536)")
Cells(1, 1).Resize(Anz, 3).Value = 1
'--- Schleife mit Range-Objekten ----------------------------------
Application.StatusBar = "Test 1 - Schleife mit Range-Objekten"
Columns(4).Clear
Start = Timer
For i = 1 To Anz
For j = 1 To 3
Cells(i, 4).Value = Cells(i, 4).Value + Cells(i, j)
Next
Next
Zeit(0) = Timer - Start
'--- Schleife mit Range-Objekten Bildschirm aus-----------------
Application.StatusBar = "Test 2 - Schleife mit Range-Objekten und Bildschirm aus"
Columns(4).Clear
Application.ScreenUpdating = False
Start = Timer
For i = 1 To Anz
For j = 1 To 3
Cells(i, 4).Value = Cells(i, 4).Value + Cells(i, j)
Next
Next
Zeit(1) = Timer - Start
Application.ScreenUpdating = True
'--- Formel-Lösung ------------------------------------------------
Application.StatusBar = "Test 4 - Formel-Lösung"
Columns(4).Clear
Start = Timer
Cells(1, 4).Resize(Anz, 1).FormulaLocal = "=A1+b1+c1"
Cells(1, 4).Resize(Anz, 1).Formula = Cells(1, 4).Resize(Anz, 1).Value
Zeit(2) = Timer - Start
'--- Schleife mit Array-Variablen ------------------------------
Application.StatusBar = "Test 4 - Schleife mit Array-Variablen"
Columns(4).Clear
Start = Timer
Werte = Cells(1, 1).Resize(Anz, 3).Value
Summe = Cells(1, 4).Resize(Anz, 1).Value
For i = 1 To Anz
For j = 1 To 3
Summe(i, 1) = Summe(i, 1) + Werte(i, j)
Next
Next
Cells(1, 4).Resize(Anz, 1).Value = Summe
Zeit(3) = Timer - Start
Ergebnis = Ergebnis & Format(Zeit(0), "0.0000") & " - Schleife mit Zellwerten"
Ergebnis = Ergebnis & Chr(10)
Ergebnis = Ergebnis & Format(Zeit(1), "0.0000") & " - Schleife mit Zellwerten Bildschirm aus"
Ergebnis = Ergebnis & Chr(10)
Ergebnis = Ergebnis & Format(Zeit(2), "0.0000") & " - Formellösung in VBA"
Ergebnis = Ergebnis & Chr(10)
Ergebnis = Ergebnis & Format(Zeit(3), "0.0000") & " - Schleife mit Array-Variablen"
Application.StatusBar = "Testende"
MsgBox Ergebnis, , "Ergebnis"
Application.StatusBar = False
End Sub


Gruß, Daniel

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige