online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Kokosk vom 18.05.2021, 19:36 Options

VBA/excel einfügen in varierende zellen

Hallo zusammen!
Ich fange gerade an mich in Vba einzuarbeiten und bin bei einem meiner ersten Makros prompt auf ein Problem gestoßen.

Ich habe da einen bestimmten Bereich ab C19 wo ich in die erste freie Zelle einen Wert einfügen möchte, den ich vorher aus der aktiven Zelle kopieren.

Ich habe mir zwei möglichkeiten ausgedacht, die aber beide nicht funktionieren:

If .Cells(3, 19).Value = "" Then Range("C19").PasteSpecial Paste:=xlValues Else: Range("C19").End(xlDown).PasteSpecial Paste:=xlValues

oder komplizierter:

Dim intz As Integer

ActiveCell.Copy
intz = 19

Do Until .Cells(intz, 3) = ""
.Cells(intz, 3).Select
intz = intz + 1
Loop

intz = intz - 1

Range(Cells(intz, 3)).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False

Was kann ich da ändern, bzw. verbessern?

lg Kokoska


Antwort schreiben

Antwort 1 von malSchauen vom 18.05.2021, 22:54 Options

Hi,

Zitat:
Ich fange gerade an mich in Vba einzuarbeiten...

Sehr schön. Interessantes, weitläufiges Feld, welches Du Dir da aneignen möchtest. Glückwunsch, Viel Spass und ausreichend Ausdauer!

Zitat:
Was kann ich da ändern, bzw. verbessern?

Ändern und verbessern kann man wohl immer etwas. Auch entwickelt wohl jeder für sich einen eigenen Stil beim Programmieren. (Ob dieser dann im Endeffekt ein "guter" oder "weniger guter" Stil sein wird, mag ich nicht beurteilen.)

Meine Meinung:
Solang Du mit Deinem Code allein bist, musst DU ihn verstehen und auch nachvollziehen können. So niemals jemand anders damit arbeiten/Anpassungen daran vornehmen muss, kann wohl auch niemand Einwände erheben. (die Funktion ist das Ziel ;-) )

Wie würde ich z.B. Deine Aufgabe lösen wollen? Mein Code sähe dabei aus wie folgt:
Sub Test()
  Dim varScratch As Variant                                     'Zwischenlager fuer Inhalt der aktiven Zelle
  Dim lngLetzteZelle_Reihe3 As Long                             'VAR fuer letzte beschriebene Zelle in Reihe3 (C)
  
  With ActiveSheet                                              'nachfolgender Abschnitt bezieht sich auf die aktive Tabelle
    varScratch = ActiveCell.Value                               'Wert/Inhalt der aktiven Zelle zwischenspeichern
    lngLetzteZelle_Reihe3 = .Cells(Rows.Count, 3).End(xlUp).Row 'letzte beschriebene Zelle in Spalte"C" ermitteln
    If lngLetzteZelle_Reihe3 < 19 Then                          'wenn letzte Zelle oberhalb C19
      lngLetzteZelle_Reihe3 = 18                                'setze den Wert auf 18
    End If
    .Cells(lngLetzteZelle_Reihe3 + 1, 3).Value = varScratch     'Zwischenspeicherwert in die naechste freie Zelle der Spalte"C"
  End With
End Sub


Siehe oben: Stil gut oder weniger gut, das zu beurteilen überlasse ich anderen. Ich für meinen Teil sehe in diesem Fall sofort, was ich da "getrieben" habe, und würde das in einem "echten" Project sicher auch nicht so detailiert kommentieren.

Was ich (und so wie ich es oft lese, auch andere) gern vermeide, sind die Methoden ".Activate" und ".Select". Sie verlängern die Laufzeit (gerade umfangreicher Makros oder Programme) doch enorm.

btw: Es wäre, wenn Du denn an vielen Meinungen zu diesem Thema interessiert bist, evtl. nicht schlecht, wenn Du einen Moderator /Admin darum bitten würdest, diesen Thread in die Gruppe "Tabellenkalkulation" zu verschieben. (Ist aber nur so eine Idee...)

Bye
malSchauen

Antwort 2 von Kokoska vom 19.05.2021, 17:13 Options

Hallo,

vielen Dank für die ausführliche Antwort. Wenn ich hier im falschen Forum bin tut es mir Leid, dann wäre es wohl wirklich besser es zu verschieben. Ich bin wegen einer ähnlichen Frage auf diese Seite hier gestoßen und die war auch hier gestellt.

Wie genau muss ich denn .
Cells(Rows.Count, 3).End(xlUp).Row 
lesen? Er geht zur Zellen in Spalte drei, in Zeile alle gezählte Zeilen? Ist das nicht die allerunterste? und was bedeutet .Row ?

danke für die Hinweise, schon allein die Idee den Inhalt der Zelle einfach in einer Variabelen zwischenzuspeichern vereinfacht mir das ganze enorm.

lg Kokoska

Ähnliche Themen

Hlife zu Excel->VBA
majoplinka  06.11.2007 - 76 Hits - 2 Antworten

Excel VBA
drphilgonzo  17.01.2008 - 33 Hits - 1 Antwort

Excel VBA: Formel einfügen "Zählenwenn"
snailhouse  03.03.2008 - 70 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026