Office-Fragen.de

Normale Version: Bestimmte Zellen der aktiven Zeile von Tabellenblatt A in Tabellenblatt B kopieren
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, 

ich versuche schon den halben Tag (als Anfängerin) ein Makro zu schreiben, das bestimmte Zellen der aktiven Zeile aus TabelleA und kopiert, uns sie in Tabelle B in die zweite Zeile einfügt.
"Range (Cells(ActiveCell.Row, 8)).Select scheint nicht der richtige Code für das Kopieren eines bestimmten Spaltenwerts zu sein.

Eine Beispieldatei habe ich angehängt. Falls diese Frage schon einmal gestellt wurde, entschuldige ich mich vorab und würde mich über Hinweise zu den entsprechenden Foren-Beiträgen sehr freuen.

Danke vorab für eure Unterstützung.

Viele Grüße
Eslem

[attachment=1232]
Hallo,

ein Makro ist da nicht unbedingt erforderlich.
in B2:
=INDEX(SPALTENWAHL(Tabelle1!$B$2:$P$15;1;10;11;15);VERGLEICH(Tabelle2!A2;Tabelle1!$A$2:$A$15;0);0)

Oder per Sverweis() in älteren Excelversionen.
Hallo Eslem,
Calderon hat recht, dazu brauchts kein Makro.
Wenn du aber partout eins schreiben willst, dann setzte den nachfolgenden Code vor dein Makro2 im Modul1.
Wenn etwas unverständlich ist: die Hilfe hilft meistens!
Code:
Option Explicit 'ist sinnvoll, um Schreibfehler zu erkennen
'erzwingt die Deklaration von Variablen

'zu deinem Code in Makro2
'es geht (fast) immer ohne Select und Activate
'siehe MeinMakro
'die ersten 4 Zeilen von Makro2 werden durch die folgende Zeile auch realisiert
  'Sheets("Tabelle1").Range("A2").Copy Destination:=Sheets("Tabelle2").Range("A2")

Sub MeinMakro()
Dim zeile As Long
'das, was du vermutlich realisieren willst, kann man auch so schreiben
  With Sheets("Tabelle1")
  'damit man nicht so vielk schreiben muss, in den folgenden Zeilen bedeutet dann
  '.Range(xyz) das Gleiche wie Sheets("Tabelle1").Range(xyz)
    For zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
    'für alle Zeilen von 2 bis zu der Zeile, in der in SPalte A (=1) noch etwas steht
      .Cells(zeile, 1).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 1) 'ProduktNr
      .Cells(zeile, 2).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 2) 'Bezeichnung
      .Cells(zeile, 11).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 3) 'Angebotsnr
      .Cells(zeile, 12).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 4) 'Angebotsdatum
      .Cells(zeile, 16).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 5) 'Bestellnr
    Next zeile
  End With
  ActiveWorkbook.Save
End Sub
(18.02.2023, 19:29)AlterDresdner schrieb: [ -> ]Hallo Eslem,
Calderon hat recht, dazu brauchts kein Makro.
Wenn du aber partout eins schreiben willst, dann setzte den nachfolgenden Code vor dein Makro2 im Modul1.
Wenn etwas unverständlich ist: die Hilfe hilft meistens!
Code:
Option Explicit 'ist sinnvoll, um Schreibfehler zu erkennen
'erzwingt die Deklaration von Variablen

'zu deinem Code in Makro2
'es geht (fast) immer ohne Select und Activate
'siehe MeinMakro
'die ersten 4 Zeilen von Makro2 werden durch die folgende Zeile auch realisiert
  'Sheets("Tabelle1").Range("A2").Copy Destination:=Sheets("Tabelle2").Range("A2")

Sub MeinMakro()
Dim zeile As Long
'das, was du vermutlich realisieren willst, kann man auch so schreiben
  With Sheets("Tabelle1")
  'damit man nicht so vielk schreiben muss, in den folgenden Zeilen bedeutet dann
  '.Range(xyz) das Gleiche wie Sheets("Tabelle1").Range(xyz)
    For zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
    'für alle Zeilen von 2 bis zu der Zeile, in der in SPalte A (=1) noch etwas steht
      .Cells(zeile, 1).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 1) 'ProduktNr
      .Cells(zeile, 2).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 2) 'Bezeichnung
      .Cells(zeile, 11).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 3) 'Angebotsnr
      .Cells(zeile, 12).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 4) 'Angebotsdatum
      .Cells(zeile, 16).Copy Destination:=Sheets("Tabelle2").Cells(zeile, 5) 'Bestellnr
    Next zeile
  End With
  ActiveWorkbook.Save
End Sub

Hallo zusammen, 

vielen Dank erst einmal für eure Antworten! Ich bin mir nicht sicher, ob ich das, was ich eigentlich haben möchte mit meiner ersten Beschreibung überhaupt richtig rüberbringen konnte. 
Tabelle1 enthält mehrere hundert Zeilen. Ich möchte mit einem Klick in die entsprechende Zeile in Tabelle1 (bspw. Zeile 13) und dem Ausführen eines Makros nur die Zeile 2 in Tabelle2 ausfüllen lassen. Ich hatte vor 4 Jahren ein solches Makro nach tagelangem ausprobieren und Unterstützung in einem Forum (das leider nicht mehr existiert) geschrieben - leider weiß ich nicht mehr wie. 

Mit TabelleB möchte ich weiterarbeiten und die Zeile wieder leeren, bevor ich in die nächste Zeile in Tabelle1 klicke, um Tabelle2 (ich würde jetzt mal von einem Formular sprechen Big Grin) wieder anhand des Makros auszufüllen.

Ich bin eine absolute Niete was Beschreibungen angeht aber hoffe, dass das verständlich war. 

Alternativ könnte ich in Tabelle2 A2 die Produkt-Nummer eintragen und die restlichen Spalten anhand von sVerweisen befüllen, aber das möchte ich mir - falls möglich - ersparen. 

Danke vorab.