Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro in einer Schleife ausführen

Forumthread: Makro in einer Schleife ausführen

Makro in einer Schleife ausführen
08.12.2002 17:52:59
Rolf Müller
Hallo zusammen,
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
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 17:55:31
Hajo_Zi
Hallo 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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 18:18:44
PeterW
Hallo Rolf,

da scheint Hajo ein kleiner Flüchtigkeitsfehler unterlaufen zu sein.

Cells(InI + 1, 2) = Cells(InI, 3)

Gruß
Peter

Re: Makro in einer Schleife ausführen
08.12.2002 19:14:40
Rolf Müller
Hallo Hajo,
Besten Dank , das du dich so schnell gemeldet hast.
Habe folgendes Makro erstellt, läuft jedoch nicht,
wird durch RUNtime error abgebrochen.
Hab ich einen Schreibfehler drin?
Gruß Rolf

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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 19:19:44
Hajo
Hallo Rlf

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

Re: Makro in einer Schleife ausführen
08.12.2002 19:38:35
Rolf Müller
Hallo Hajo,
Ich versuche, dir meine Aufgabe zu beschreiben.
Ich habe ein Latein Wörterbuch aus dem Internet in EXCEL übertragen.
Leider ist es so aufgebaut, das mehrere Bedeutungen des gleichen Wortes in einer Zeile hintereinander stehen.
Damit ich die Tabelle nach deutschen Begriffen sortieren kann,
muß ich zu nächst eine Zeile einfügen, den Lateinischen Begriff
kopieren und den 2. deutschen Begriff von C1 nachB2 kopieren.
Hier ein Beispiel:
A B C
canities graue Farbe graue Haare
canna Rohr Gefäß

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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 19:45:07
Hajo
Hallo 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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 19:56:38
Rolf
Hallo Hajo,
Es gibt zwar für einige Wörter auch 5 deutsche Übersetzungen,
Es würde mir jedoch genügen, wenn immer nur der 2.Begriff neu eingefügt wird.
Wenn ich die erste Spalte abgearbeitet habe, kann ich ja auch einen weiteren Lauf, dann für den 3. Begriff in der 3. Spalte durchführen.
Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 19:59:08
Hajo
Hallo Rolf

PeterW hat mich schon drauf hingewiesen das ich mich verlesen habe. Ich muß jetzt erstmal das Makro erstellen

Gruß Hajo

Re: Makro in einer Schleife ausführen
08.12.2002 20:12:41
Hajo_Zi
Hallo Rolf

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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 21:00:01
Rolf
Hallo Hajo,
Das sieht sehr gut aus.
Habe dein Makro mit einer einfachen Tabelle getestet.
Es funktioniert super !!!!!
Zum besseren Verständnis, was bedeutet LoI ?
Steht n in runden Klammern, oder was bedeuten die beiden II ? For InI = 2 To
Für deine Mühe besten Dank.
Als kleines Dankeschön würde ich dir das fertige Lexikon zusenden, weiß aber nicht ob du Interesse hast an Latein.
Gruß Rolf

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 21:13:23
Hajo_Zi
Hallo Rolf

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

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 21:36:58
Rolf
Hallo Hajo,
Ich habe früher viel in BASIC auf ATARI programiert,
daher kenne ich einige Möglichkeiten ein Problem zu lösen.
Das ist lange her.
Das Beispiel das du programmiert hast weckt in mir die Lust
auch in EXCEL noch mehr auszuprobieren,
kannst du mir noch einen Tip geben,wo man die Befehle,
deren Funktion und Schreibweise nachlesen kann?
Nochmals besten Dank
Rolf

Anzeige
Re: Makro in einer Schleife ausführen
08.12.2002 21:44:37
Hajo_Zi
Hallo Rolf

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

Anzeige
;
Anzeige

Infobox / Tutorial

Makro in einer Schleife ausführen


Schritt-für-Schritt-Anleitung

Um ein Makro in Excel von C1 bis C500 automatisch auszuführen, kannst Du folgenden VBA-Code verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Erstelle ein neues Modul über Einfügen > Modul.

  3. 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
  4. Schließe den VBA-Editor und führe das Makro aus, indem Du zu Entwicklertools > Makros gehst und Rolf auswählst.


Häufige Fehler und Lösungen

  1. RUN-time error:

    • Wenn das Makro aufgrund eines Laufzeitfehlers abbricht, überprüfe, ob Du auf die richtigen Zellen zugreifst. Achte darauf, dass die Zellen, auf die Du zugreifst, tatsächlich existieren.
  2. Falsche Zellreferenzen:

    • Stelle sicher, dass Du die richtigen Zellen in Deinem Code verwendest. Ein häufiger Fehler ist, dass Cells mit falschen Indizes verwendet wird, z. B. Cells(I + 1, 2) sollte Cells(InI + 1, 2) sein.

Alternative Methoden

Falls Du die Schleife nicht in VBA umsetzen möchtest, kannst Du auch die Excel-Funktionen nutzen. Eine einfache Formel könnte folgendermassen aussehen:

  • In Zelle B2 kannst Du die Formel =C1 eingeben und diese dann nach unten ziehen, um die Werte bis B500 zu kopieren. Dies ist jedoch weniger flexibel als ein Makro.

Praktische Beispiele

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

Tipps für Profis

  • Vermeide .Select: In VBA ist es besser, die .Select-Methode zu vermeiden, um den Code effizienter zu gestalten.
  • Namen für Variablen: Verwende aussagekräftige Namen für Deine Variablen, um die Lesbarkeit zu erhöhen.
  • Kommentiere Deinen Code: Auch wenn Du beim ersten Schreiben auf Kommentare verzichtest, ist es hilfreich, sie später hinzuzufügen, um den Code besser zu verstehen.

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige