Ich habe ein Makro aufgezeichnet, um einen Wert von C1 nach
B2 zu schreiben.Was muß ich tun, um dieses Makro von C1 bis C500
automatisch auszuführen. Gibt es ähnliche Befehle wie in BASIC
z.B FOR C=1 To 500
.....
NEXT C
Gruß Rolf
Option Explicit
Sub Rolf()
Dim InI As Integer
For InI = 1 To 500
Cells(I + 1, 2) = Cells(I, 3)
Next InI
End Sub
Code eingefügt mit: Excel Code Jeanie
Gruß Hajo
da scheint Hajo ein kleiner Flüchtigkeitsfehler unterlaufen zu sein.
Cells(InI + 1, 2) = Cells(InI, 3)
Gruß
Peter
Sub Makro1()
'
' Makro1 Makro
' Makro am 08.12.02 von Müller aufgezeichnet
Dim n As Integer
For n = 1 To 3000
Range("B(n+1)").Select
Selection.EntireRow.Insert
Range("Cn").Select
Selection.Cut Destination:=Range("Bn+1")
Range("An").Select
Selection.AutoFill Destination:=Range("An:An+1"), Type:=xlFillDefault
Range("An:An+1").Select
Next n
End Sub
in VBA kann auf select verzichtet werdem
Leider sehe ich aus Deinem Code nicht was Du erreichen willst.
Vielleicht solltest Du mal schreiben was das Makro machen soll
Gruß Hajo
A B C
canities graue Farbe
canities graue Haare
canna Rohr
canna Gefäß
Da es sich um ca. 30000 Wörter handelt, ist die manuelle Änderung
nur mit Frust zu bewerkstelligen.
Hast du eine Idee für ein Makro?
Gruß Rolf
das Problem ist jetzt klarer. Aber ich sehe leider keine Lösung
Deine Werte in der Zelle
canities graue Farbe graue Haare
woher soll aber Ecel wissen das es sich um drei Begriffe handelt und nicht Fünf, wenn ich mal davon ausgehen das zu Beginn immer nur ein Lateinisches Wort steht.
Vom Grundsattz löst man solche Probleme nicht mit einer Schleife von 1 nach 3000 sondern von 3000 nach 1 mit Step -1
Aber mein Problem ist die erste Frage.
Gruß Hajo
PeterW hat mich schon drauf hingewiesen das ich mich verlesen habe. Ich muß jetzt erstmal das Makro erstellen
Gruß Hajo
ich habe jetzt mal ein Makro erstellt.
Folgende Annahmen
- Zeile 1 Überschrift (For LoI = LoLetzteZeile To 2 Step -1)
- es sind max. 255 Deutsche Begriffe
Option Explicit
Sub Rolf()
Dim LoLetzteZeile As Long
Dim InLetzteSpalte As Integer
Dim LoI As Long
Dim InI As Integer
If [a65536] = "" Then
LoLetzteZeile = [a65536].End(xlUp).Row
Else
LoLetzteZeile = 65536
End If
For LoI = LoLetzteZeile To 2 Step -1
If Cells(LoI, 256) = "" Then
InLetzteSpalte = Cells(LoI, 256).End(xlToLeft).Column
Else
InLetzteSpalte = 256
End If
For InI = 2 To InLetzteSpalte
Rows(LoI + 1).EntireRow.Insert
Cells(LoI + 1, 1) = Cells(LoI, 1)
Cells(LoI + 1, 2) = Cells(LoI, InI)
Next InI
Rows(LoI).Delete
Next LoI
End Sub
Code eingefügt mit: Excel Code Jeanie
Gruß Hajo
ich lebe in den neuen Bundesländer und während meiner Schulzeit war Latein nicht aktuell, und dies ist jetzt auch schon paar Jahrzehnte her.
LoI ist eigentlich nur ein Kennzeichen für eine Variable. Ich versuche mich in neuster Zeit an folgendes System zu halten 2 Buchstaben für den Typ und danach der Variablen Namen
Lo = Long, I = Variablennamen
For InI = 2 To
ist die Zweite Schleife ab zweiter Spalte ( in erster Spalte steht das Lateinische Wort, darum ab 2 Spalte bis zur letzten Spalte in der Zeile)
Die erste Schleife ist für die Zeilen.
hier noch mal der Code mit einigen Kommentaren. Auf Kommentare verzichte ich Grundsätzlich im ersten Posting, da nicht klar ist ob interesse am Code.
Option Explicit
Sub Rolf()
Dim LoLetzteZeile As Long
Dim InLetzteSpalte As Integer
Dim LoI As Long
Dim InI As Integer
' Letzte Zeile in Spalte A feststellen
If [a65536] = "" Then
LoLetzteZeile = [a65536].End(xlUp).Row
Else
LoLetzteZeile = 65536
End If
' Schleife für die Zeilen von der Letzten Zeile
' bis zu Zeile 2
For LoI = LoLetzteZeile To 2 Step -1
' feststellen der letzten Spalte in dr aktuellen Zeile
If Cells(LoI, 256) = "" Then
InLetzteSpalte = Cells(LoI, 256).End(xlToLeft).Column
Else
InLetzteSpalte = 256
End If
' Bearabeitung der akuellen Zeile
For InI = 2 To InLetzteSpalte
Rows(LoI + 1).EntireRow.Insert
' schreibe das Lateinische Wort der erstenSpalte in die neue Zeile
' und danach die Übersetzung der aktuellen Spalte
Cells(LoI + 1, 1) = Cells(LoI, 1)
Cells(LoI + 1, 2) = Cells(LoI, InI)
Next InI
' lösche die Zeile mit allen Übersetzungen in einer Zeile
Rows(LoI).Delete
Next LoI
End Sub
Code eingefügt mit: Excel Code Jeanie
Gruß Hajo
ich habe auch mit Basic angefangen und dann Dbase.
Bücher von Michael Kofler sind sehr gut.
oder schaue mal hier.
VBA Kurs in 21 Tagen
http://www.ti5.tu-harburg.de/manual/vba5/httoc.htm
von Thomas Ramel
Hier gibt es eine Broschüre im PDF-Format, die VBA recht anschaulich erklärt:
http://www.fernuni-hagen.de/URZ/urzbib/ls_broschueren.html
http://www.joanneum.ac.at/SERVICES/VBAEXCEL
Das meiste lernt man natürlich in den Foren. Ich schreibe immer auf Select und ähnliche Befehle sollte verzichtet werden. Das sollte man gleich von Anfang an berücksichtigen.
Gruß Hajo
schau mal hier:
http://www.ti5.tu-harburg.de/manual/vba5/httoc.htm
Gruß
Peter
Um ein Makro in Excel von C1 bis C500 automatisch auszuführen, kannst Du folgenden VBA-Code verwenden:
Öffne Excel und drücke ALT + F11
, um den VBA-Editor zu starten.
Erstelle ein neues Modul über Einfügen > Modul
.
Füge den folgenden Code in das Modul ein:
Option Explicit
Sub Rolf()
Dim InI As Integer
For InI = 1 To 500
Cells(InI + 1, 2) = Cells(InI, 3)
Next InI
End Sub
Schließe den VBA-Editor und führe das Makro aus, indem Du zu Entwicklertools > Makros
gehst und Rolf
auswählst.
RUN-time error:
Falsche Zellreferenzen:
Cells
mit falschen Indizes verwendet wird, z. B. Cells(I + 1, 2)
sollte Cells(InI + 1, 2)
sein.Falls Du die Schleife nicht in VBA umsetzen möchtest, kannst Du auch die Excel-Funktionen nutzen. Eine einfache Formel könnte folgendermassen aussehen:
=C1
eingeben und diese dann nach unten ziehen, um die Werte bis B500 zu kopieren. Dies ist jedoch weniger flexibel als ein Makro.Hier ist ein praktisches Beispiel, wie Du das Makro anpassen kannst, um ein Latein-Wörterbuch zu verarbeiten:
Sub WörterbuchMakro()
Dim LoLetzteZeile As Long
Dim InLetzteSpalte As Integer
Dim LoI As Long
Dim InI As Integer
LoLetzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
For LoI = LoLetzteZeile To 2 Step -1
InLetzteSpalte = Cells(LoI, Columns.Count).End(xlToLeft).Column
For InI = 2 To InLetzteSpalte
Rows(LoI + 1).Insert
Cells(LoI + 1, 1) = Cells(LoI, 1)
Cells(LoI + 1, 2) = Cells(LoI, InI)
Next InI
Rows(LoI).Delete
Next LoI
End Sub
.Select
-Methode zu vermeiden, um den Code effizienter zu gestalten.1. Was ist der Unterschied zwischen For ... Next
und Do ... Loop
?
Der For ... Next
-Befehl wird verwendet, wenn Du eine feste Anzahl von Durchläufen hast, während Do ... Loop
flexibler ist und sich wiederholt, bis eine Bedingung erfüllt ist.
2. Wo kann ich mehr über VBA lernen? Empfohlene Ressourcen sind Bücher von Michael Kofler oder Online-Kurse wie "VBA Kurs in 21 Tagen". Foren sind ebenfalls eine großartige Möglichkeit, um Fragen zu stellen und von anderen zu lernen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen