Microsoft Excel

Herbers Excel/VBA-Archiv

Zellen aus zwei Zeilen kopieren | Herbers Excel-Forum


Betrifft: Zellen aus zwei Zeilen kopieren von: Einzel
Geschrieben am: 20.01.2010 19:20:06

Hallo
brauch Hilfe bei einem Code.
Ich habe eine datenbank die ab A3 beginnt. (Tabelle1)

Und zwar soll es so ablaufen
Wenn in A3 "A" steht dann einlesen B3, D3, E3, G3,

weiter wenn in A4 "B" steht dann einlesen D3

Nun in tabelle2 einfügen ab A4 den Inhalt von Einlesen aus A3 und A4
und zwar in der Reihenfolge B3 aus Zeile 3, D3 aus Zeile 3, E3 aus Zeile 3, D3 aus Zeile 4 und wieder G3 aus Zeile 3.

Dann das ganze wiederholen aus A5 und A6. und in Tabelle2 in A5 einfügen das ganze bis zum Ende. ende umbekannt.

Habe es mal so angefangen aber es geht so nicht und er würde wenn auch nur einmal kopieren.

Sub einlesen()
Dim x As String
Dim y As String

Sheets("Tabelle1").Activate ' Datei auswählen / anpassen
x = [B2]
Range("A3").Select
If ActiveCell = A Then
Copy = [B3] & [D3] & [E3] & [G3]
End If
If ActiveCell = B Then
Copy = [D3]
End If
y = Copy
Sheets("Tabelle2").Activate
Range("A4").Select
ActiveCell = y
[B2] = x
End Sub
Hätte jemand eine Idee?
Hier mal die Mappe dazu.

https://www.herber.de/bbs/user/67359.xlsm

MfG
Stephan

  

Betrifft: AW: Zellen aus zwei Zeilen kopieren von: Daniel
Geschrieben am: 20.01.2010 20:15:04

Hi

bei deinem Kenntnisstand bietest sich vielleicht eher eine Formelbasierte Lösung an.
hier ein Makro, daß die für das Einlesen der Daten benötigte Formeln in die Zellen schreibt.

Sub Einlesen()
Dim Zeilen As Long
Zeilen = WorksheetFunction.CountIf(Sheets("Tabelle1").Columns(1), "A")
With Sheets("Tabelle2")
    .Cells(4, 1).Resize(Zeilen).FormulaR1C1 = "=INDEX(Tabelle1!C2,(ROW()-4)*2+3)"
    .Cells(4, 2).Resize(Zeilen).FormulaR1C1 = "=INDEX(Tabelle1!C4,(ROW()-4)*2+3)"
    .Cells(4, 3).Resize(Zeilen).FormulaR1C1 = "=INDEX(Tabelle1!C5,(ROW()-4)*2+3)"
    .Cells(4, 4).Resize(Zeilen).FormulaR1C1 = "=INDEX(Tabelle1!C4,(ROW()-4)*2+4)"
    .Cells(4, 5).Resize(Zeilen).FormulaR1C1 = "=INDEX(Tabelle1!C7,(ROW()-4)*2+3)"
    With .Cells(4, 1).Resize(Zeilen, 5)
        .Formula = .Value
    End With
End With
End Sub
Allerdings werden die Formeln wieder eleminiert, wenn du dir die Formeln anschauen willst, musst du das ".Formula = .Value" löschen oder auskommentieren.

Gruß, Daniel.
ps. für dich als VBA-Neuling noch ein paar Tips:
1. das Hochladen der Datei im alten .xls-Format erweitert den Kreis derjenigen, die helfen können. Nicht alle haben Excel 2007 oder höher.
2. Stichwort OPTION EXPICIT und das Verwenden von SELECT, bitte diese Links lesen, verstehen und anwenden:
http://www.online-excel.de/excel/singsel_vba.php?f=4
http://www.online-excel.de/excel/singsel_vba.php?f=78


  

Betrifft: AW: Zellen aus zwei Zeilen kopieren von: Einzel
Geschrieben am: 20.01.2010 20:40:59

Erst mal danke für den Code er klappt super.
Zweitens danke für die Tipps.
Gruß
Stephan


  

Betrifft: AW: Zellen aus zwei Zeilen kopieren von: Einzel
Geschrieben am: 20.01.2010 21:53:38

Hallo Daniel,
habe leider doch noch ein Problem was ich so nicht läsen kann

die Tabelle1 ist in daten.xlsm
und die Tabelle2 in datenauswertung.xlsm

Hättest du dafür auch noch mal ein Tipp.
MfG
Stephan


  

Betrifft: AW: Vollständig Referenzieren von: Daniel
Geschrieben am: 20.01.2010 22:41:00

Hi
wenn die beiden Tabellenblätter in verschiedenen Dateien sind, musst du halt den entsprechenden Dateinamen noch mit angeben, also statt

Sheets("Tabelle1").Cells(1,1)

musst du dann entsprechend:

Workbooks("Daten.xlsm").Sheets("Tabelle1").Cells(1,1)

schreiben. wenn du das "Workbooks(...)" weglässt, wird immer die gerade aktive Datei verwendet, und da ist ja nicht immer sicher, welches grade aktiv ist.
wenn die Dateigemeint ist, in der sich das Makro befindet, dann kann man auch stattdessen ThisWorkbook.Sheets("Tabelle1").Cells(1,1) schreiben, dann braucht man das Makro nicht ändern, wenn man die Datei mal umbenennt.

Gruß, Daniel
ps: das ganze funkionier nur, wenn beide Dateien geöffnet sind.


Beiträge aus den Excel-Beispielen zum Thema "Zellen aus zwei Zeilen kopieren"