Code durch Array verkürzen

Hallo zusammen,

ich habe einen Code, der zunächst die unterste leere Zelle in einem Tabellenblatt sucht und anschließend dort Werte aus einer anderen Tabelle einträgt.

‚Variable deklarieren‘

Dim lngNeueReihe As Long

‚In Datentabelle springen‘

Worksheets(„Datentabelle“).Activate

‚nächste freie Zeile suchen (letzte von unten, die nicht beschrieben ist)‘

lngNeueReihe = Worksheets(„Datentabelle“).Range(„A65536“).End(xlUp).Row + 1

‚Werte eintragen‘

ActiveSheet.Cells(lngNeueReihe).Value = Worksheets(„Eingabe“).Range(„j7“).Value
ActiveSheet.Cells(lngNeueReihe, 2).Value = Worksheets(„Eingabe“).Range(„k6“).Value
ActiveSheet.Cells(lngNeueReihe, 4).Value = Worksheets(„Eingabe“).Range(„d11“).Value
ActiveSheet.Cells(lngNeueReihe, 5).Value = Worksheets(„Eingabe“).Range(„e11“).Value
ActiveSheet.Cells(lngNeueReihe, 6).Value = Worksheets(„Eingabe“).Range(„f11“).Value
ActiveSheet.Cells(lngNeueReihe, 7).Value = Worksheets(„Eingabe“).Range(„g11“).Value
ActiveSheet.Cells(lngNeueReihe, 8).Value = Worksheets(„Eingabe“).Range(„h11“).Value
ActiveSheet.Cells(lngNeueReihe, 9).Value = Worksheets(„Eingabe“).Range(„i11“).Value
ActiveSheet.Cells(lngNeueReihe, 10).Value = Worksheets(„Eingabe“).Range(„j11“).Value
ActiveSheet.Cells(lngNeueReihe, 11).Value = Worksheets(„Eingabe“).Range(„k11“).Value
ActiveSheet.Cells(lngNeueReihe, 12).Value = Worksheets(„Eingabe“).Range(„l11“).Value

Das ganze funktioniert, ist allerdings sehr lang, langsam und unschön…
Ich weiß, dass ich das ganze durch ein Array deutlich verkürzen kann. Leider reichen meine VBA Kenntnisse dafür bei weitem nicht aus. Hat jemand einen Tipp oder Vorschlag für mich?

Besten Dank!

Hallo Smileysmile,
da muss ich leider auch passen.
Mit freundlichen Grüße
Mike130

Hallo Smileysmile,
da muss ich leider auch passen.
Mit freundlichen Grüße
Mike130

Trotzedem danke für die fixe Info!

Beste Grüße

Hi Smilexsmile,

da kann ich Dir leider auch gar nicht weiterhelfen.

Schönen Gruß
Werner

Tja, schade.

Aber trotzdem Danke!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
für ein Array sehe ich so noch keinen Sinn.
Vielleicht, wenn auch Spalte C beschrieben würde.

So sähe das schon besser aus, ginge auch schneller:

Sub abc()
 Dim wsAkt As Worksheet, lngNeueZeile As Long 'Variablen deklarieren


 Set wsAkt = Worksheets("Datentabelle")
 With wsAkt
 'freie Zeile suchen (letzte von unten, die nicht beschrieben ist)
 lngNeueZeile = .Range(.Cells(wsAkt.Rows.Count), 1).End(xlUp).Row + 1
 .Activate 'In Datentabelle springen (ist hier nicht nötig, nur wenn gewollt)
 End With
 With Worksheets("Eingabe") 'Werte eintragen
 wsAkt.Cells(lngNeueZeile, 1).Value = .Cells(7, 10).Value ' j7
 wsAkt.Cells(lngNeueZeile, 2).Value = .Cells(6, 11).Value ' k6

 wsAkt.Cells(lngNeueZeile, 4).Resize(9) = \_
 Application.Transpose(.Range("d11").Resize(0, 9).Value) ' d11:i11
 End With
End Sub

Klappt das ?

Grüße von Erich aus Kamp-Lintfort

P.S.: Ich bin nicht sicher, ob der Code richtig rüberkommt, ich habe ihn in pre-Tags eingeschlossen,
sehe aber in der Vorschau keinen Effekt…

Hi Smileysmile.
Sorry, aber das koennte ich Dir so auch nicht auf die Schnelle beantworten - ich hoffe, Du findest den „richtigen“ Experten hier.
Viel Erfolg.
Freundlich gruesst
Ernie

…meine Kenntisse reichen leider auch nicht.
Viel Erfolg

Ralf

Du kannst einen Zellbereich einem „Array“ zuweisen, und umgekehrt den Inhalt des Array einem Zellbereich:

Sub Array_zu_Range()
²Dim r As Variant
²r = Range(„A1:G2“, „A10:G11“) 'Dies erzeugt ein Array von 11 Zeilen (1 bis 11) und 7 Spalten (A bis G)!

r(1, 1) = „a“: r(1, 2) = „b“
r(1, 3) = „a“: r(1, 4) = „b“
r(1, 5) = „a“: r(1, 6) = „b“
r(1, 7) = „a“
Range(„A2:G2“) = r 'Dies füllt den Bereich mit den Arraydaten (hier also nur die ersten 2 Zeilen!)
’ Ist der Zielbereich kleiner so wird nur ein Teil (ab 1,1) eingefügt
’ Ist der Zielbereich größer so wird der rest mit #NV gefüllt
’ stets wird mit dem Array bei r(1,1) angefangen (1, ist die Zeile ,1) ist die Spalte!
’ ² diese beiden Zeilen sind nötig, da r kein normales Array ist!
End Sub

Korrektur:

muß natürlich

Range(„A1:G2“) = r 'Dies füllt den Bereich mit den Arraydaten (hier also nur die ersten 2 Zeilen!)

heißen!

Guten Tag,

Hallo zusammen,

ich habe einen Code, der zunächst die unterste leere Zelle in
einem Tabellenblatt sucht und anschließend dort Werte aus
einer anderen Tabelle einträgt.

‚Variable deklarieren‘

Dim lngNeueReihe As Long

‚In Datentabelle springen‘

Worksheets(„Datentabelle“).Activate

‚nächste freie Zeile suchen (letzte von unten, die nicht
beschrieben ist)‘

lngNeueReihe =
Worksheets(„Datentabelle“).Range(„A65536“).End(xlUp).Row + 1

‚Werte eintragen‘

ActiveSheet.Cells(lngNeueReihe).Value =
Worksheets(„Eingabe“).Range(„j7“).Value
ActiveSheet.Cells(lngNeueReihe, 2).Value =
Worksheets(„Eingabe“).Range(„k6“).Value
ActiveSheet.Cells(lngNeueReihe, 4).Value =
Worksheets(„Eingabe“).Range(„d11“).Value

Antwort:
'A#####
Dim r As Variant
r = Range(„A1:G11“) 'Dies erzeugt ein Array von 11 Zeilen (1 bis 11) und 7 Spalten (A bis G)!
'#####

r(1, 1) = „a“: r(1, 2) = „b“
r(1, 3) = „a“: r(1, 4) = „b“
r(1, 5) = „a“: r(1, 6) = „b“
r(1, 7) = „a“
Range(„A2:G2“) = r 'Dies füllt den Bereich mit den Arraydaten (hier also nur die ersten 2 Zeilen!)
’ Ist der Zielbereich kleiner so wird nur ein Teil (ab 1,1) eingefügt
’ Ist der Zielbereich größer so wird der rest mit #NV gefüllt
’ stets wird mit dem Array bei r(1,1) angefangen (1, ist die Zeile ,1) ist die Spalte!
’ A= der Datentyp ist stets VARIANT, diese beiden Zeilen sind nötig, um r die Form und Datentyp eines Zellbereichs zu geben, das muß nicht der gleiche Zellbereich sein nur Spaltenzahl und Zeilenzahl sind wichtig!

Gruß
Chris