Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1500to1504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro Schleife bis Ende

Makro Schleife bis Ende
11.07.2016 12:12:14
Fabian
Hallo zusammen,
meine Frage ist so banal, dass sie nicht mal mehr in irgendwelchen Foren beantwortet wird...dennoch:
Ich möchte das Ende des aufgezeichneten Makros variable gestalten und nicht fixiert, so wie es bei dem aufgezeichneten Marko der Fall ist:
Sub Insert_Year()
Sheets("00").Select
Range("B3").Select
ActiveCell.FormulaR1C1 = "2016"
Range("B3").Select
Selection.AutoFill Destination:=Range("B3:B15606")
Range("B3:B15606").Select
End Sub

WIe muss ich die letzten Zahlen ändern, dass das Makro solange arbeitet bis in der ersten Spalte der Tabelle keine Werte mehr sind?
Vielen Dank =)
Gruß
Fabian

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Schleife bis Ende
11.07.2016 12:21:01
Hajo_Zi
Hallo Fabian,
ich vermute mal so
Option Explicit
Sub Insert_Year()
Dim LoI As Long
With Sheets("00")
For LoI = 3 To Rows.Count
If .Cells(LoI, 1)  "" Then
.Cells(LoI, 2) = "2016"
Else
Exit For
End If
Next LoI
.Columns("B:B").EntireColumn.AutoFit
End With
End Sub


AW: Makro Schleife bis Ende
11.07.2016 12:25:52
Fabian
Perfekt! Vielen Dank!

AW: Makro Schleife bis Ende
11.07.2016 12:25:40
Michael
Hi Fabian,
z.B. so:
Sub machen()
Dim maxA As Long
With Sheets("00")
maxA = .Range("A" & .Rows.Count).End(xlUp).Row
MsgBox maxA  ' diese Zeile kannst Du nach dem Test löschen
If maxA >= 3 Then .Range("B3:B" & maxA).Value = "2016"
End With
End Sub

Der Umweg über die Variable maxA ist eigentlich unnötig (man kann das auch in 1 Zeile schreiben), aber für meinen Geschmack ist es so übersichtlicher, und oft benötigt man den Wert später noch einmal, dann hat man ihn gleich...
Schöne Grüße,
Michael

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 12:27:47
Fabian
Das ist auch super! Werde ich mir notieren ;)

AW: Makro Schleife bis Ende
11.07.2016 12:26:10
Daniel
Hi
das geht so:
Range("B3:B" & Cells(Rows.Count, 1).End(xlup).Row).Value = 2016

das autofill braucht man in VBA in der Regel nicht, weil man die Formeln oder Werte auch so direkt in alle Zellen in einem Schritt schreiben kann.
Gruß Daniel

AW: Makro Schleife bis Ende
11.07.2016 12:30:52
Fabian
Eine sehr einfache und elegante Lösung! Vielen Dank für den Hinweis - ich hab sowas öfter und da kann ich mir deine Lösung echt gut merken! Danke

AW: Makro Schleife bis Ende
11.07.2016 12:41:14
Fabian
Hi,
aber eine Frage hab ich noch - welchen Teil meines Makros muss ich dafür löschen und wo muss ich es einsetzten?
Gruß
Fabian

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 12:43:02
baschti007
Alles ;)

AW: Makro Schleife bis Ende
11.07.2016 12:52:29
Fabian
Das macht es einfach :D

AW: Makro Schleife bis Ende
11.07.2016 12:54:36
Fabian
Könnte ich das jetzt genauso schön kurz auch Variable halten - also das nicht zu 2016 referiert wird sondern zu Sheet("000")Range("B4")?

Klar, Du schreibst das nur rechts vom =
11.07.2016 12:58:24
Michael
Außerdem, weil ich gerade Daniels Vorschlag sehe: es IST ein Unterschied, ob 2016 oder "2016" - nur daß Du da nichts übersiehst.

AW: Makro Schleife bis Ende
11.07.2016 12:59:07
Daniel
Hi
also das ist jetzt noch banaler
statt: =2016
dann: =Sheets("000").Range("B4").Value
Gruß Daniel

AW: Makro Schleife bis Ende
11.07.2016 13:01:16
Fabian
Ich bin absolut fasziniert von euren Kenntnissen!
Vielen Dank!
Gibt's vielleicht ein gutes Einsteiger-Buch, dass ich mir mal zu Gemüte führen sollte?

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 13:00:31
UweD
wenn schon mit Blattnamen, dann überall...
With Sheet("000")
.Range("B3:B" & .Cells(Rows.Count, 1).End(xlup).Row).Value = .Range("B4").Value
End With
Wobei das ja eine Überschneidung ist B4 ist in B3:Bxx enthalten

AW: Makro Schleife bis Ende
11.07.2016 13:03:49
Fabian
Hi, danke für deine Lösung.
Ich muss gestehen mein Beispiel war Tricki - das eine Sheet habe ich 00 genannt und das wo die Daten herkommen sollen 000 - das sollte ich das nächste mal vielleicht anders gestalten O:)
Trotzdem Danke!

AW: Makro Schleife bis Ende
11.07.2016 13:07:32
UweD
With Sheet("00")
.Range("B3:B" & .Cells(Rows.Count, 1).End(xlup).Row).Value = Sheet("000").Range("B4").Value
End With

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 13:12:45
Fabian
Vielen Dank für die mannigfaltige Hilfe bis jetzt - irgendwie hatte ich mir erhofft ein Muster ablesen zu könne wie ich generell eine Zeile einbauen kann die (nach egal welcher Formel) immer wieder das gleiche tut bis halt die letzte Zeile der Tabelle gekommen ist?!
Habe in der nächsten Zeit sehr viele Zeilen damit zu befüllen und möchte euch nicht jedes mal mit einem eigenen Thread nerven müssen :D
Vielen Dank im Voraus!
Gruß
Fabian

AW: Makro Schleife bis Ende
11.07.2016 14:35:37
Michael
Hi,
also nochmal von vorne: Du hast irgendwo eine FORMEL stehen, die Du in "00" kopieren willst.
Die steht im Beispiel in 000!B4 und soll nach 00!B3 bis B(ende).
Das Makro kopiert die Formel erst mal im Zielblatt (also 00) in die richtige ZEILE, nämlich 4, und von dort aus in die komplette Spalte (sonst bezieht sich die Formel nicht auf die in der richtigen Zeile befindlichen Werte):
Option Explicit
Sub machenAufrufen()
Call machen(Sheets("000"), "B", 4, Sheets("00"), "B", 3)
End Sub
Sub machen(vBlatt As Worksheet, vSpalte As String, vZeile As Long, _
nBlatt As Worksheet, nSpalte As String, abZeile As Long)
Dim maxA As Long
maxA = nBlatt.Range("A" & nBlatt.Rows.Count).End(xlUp).Row
vBlatt.Range(vSpalte & vZeile).Copy nBlatt.Range(nSpalte & vZeile)
nBlatt.Range(nSpalte & vZeile).Copy nBlatt.Range(nSpalte & abZeile & ":" & nSpalte & maxA)
End Sub
Mit Datei: https://www.herber.de/bbs/user/106914.xlsm
Falls das das Problem nicht trifft, ändere die Datei mal nach Deinen Bedürfnissen und lade sie wieder hoch...
Schöne Grüße,
Michael

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 15:26:37
Fabian
Hi Michael,
das war die Erklärung auf die ich gehofft hatte!
Musste mich gerade etwas durchwurschteln aber so ist es perfekt, weil ich diese alternative für viele Formeln anwenden kann!
Danke
Fabian

freut mich, zur Abrundung kannst Du noch...
11.07.2016 15:42:19
Michael
die Spalte angeben, in der die max. Zeilennummer gesucht werden soll:
Option Explicit
Sub machenAufrufen()
Call machen("A", Sheets("000"), "B", 4, Sheets("00"), "B", 3)
End Sub
Sub machen(maxSpalte As String, _
vBlatt As Worksheet, vSpalte As String, vZeile As Long, _
nBlatt As Worksheet, nSpalte As String, abZeile As Long)
Dim maxA As Long
maxA = nBlatt.Range(maxSpalte & nBlatt.Rows.Count).End(xlUp).Row
vBlatt.Range(vSpalte & vZeile).Copy nBlatt.Range(nSpalte & vZeile)
nBlatt.Range(nSpalte & vZeile).Copy nBlatt.Range(nSpalte & abZeile & ":" & nSpalte & maxA)
End Sub
Ich empfehle Dir noch (wie in meinem ersten Ding) eine Abfrage, ob maxA auch wirklich größergleich abZeile ist, sonst macht er zwar brav, überschreibt Dir aber evtl. Überschriften...
Schöne Grüße,
Michael

Anzeige
AW: freut mich, zur Abrundung kannst Du noch...
12.07.2016 07:03:52
Fabian
Hallo Michael,
hab mich dran versucht, jedoch muss ich gestehen, dass ich nicht genau weiß was ich wo einfügen muss damit es funktioniert...
könntest du mir nochmal aushelfen?
Bis ich deinen Post gelesen hab hatte ich nen Makro geschrieben, das einfach die Überschrift am Ende wieder über die zerstörter Überschrift kopiert :D
Gruß,
Fabian

zur Abrundung
12.07.2016 09:05:03
Michael
Hallo Fabian,
das geht so:
Sub machenAufrufen()
Call machen("A", Sheets("000"), "B", 4, Sheets("00"), "B", 3)
End Sub
Sub machen(maxSpalte As String, _
vBlatt As Worksheet, vSpalte As String, vZeile As Long, _
nBlatt As Worksheet, nSpalte As String, abZeile As Long)
Dim maxA As Long
maxA = nBlatt.Range(maxSpalte & nBlatt.Rows.Count).End(xlUp).Row
If maxA >= abZeile Then
vBlatt.Range(vSpalte & vZeile).Copy nBlatt.Range(nSpalte & vZeile)
nBlatt.Range(nSpalte & vZeile).Copy _
nBlatt.Range(nSpalte & abZeile & ":" & nSpalte & maxA)
Else
MsgBox "Keine Daten  vorhanden." & vbLf & "Blatt: " & nBlatt.Name & _
" Spalte: " & maxSpalte
End If
End Sub

Je nach dem, wie Du das Makro einsetzt, kann so eine MsgBox mit Fehler evtl. stören. Falls Du im aufrufenden Programm die Info benötigst, ob die Aktion erfolgreich war, kannst Du z.B. so vorgehen:
Private erledigt As Long
Sub machenAufrufen()
Call machen("A", Sheets("000"), "B", 4, Sheets("00"), "B", 3)
If erledigt = 1 Then
MsgBox "erledigt"
Else
MsgBox "nicht erledigt"
End If
End Sub
Sub machen(maxSpalte As String, _
vBlatt As Worksheet, vSpalte As String, vZeile As Long, _
nBlatt As Worksheet, nSpalte As String, abZeile As Long)
Dim maxA As Long
maxA = nBlatt.Range(maxSpalte & nBlatt.Rows.Count).End(xlUp).Row
If maxA >= abZeile Then
vBlatt.Range(vSpalte & vZeile).Copy nBlatt.Range(nSpalte & vZeile)
nBlatt.Range(nSpalte & vZeile).Copy _
nBlatt.Range(nSpalte & abZeile & ":" & nSpalte & maxA)
erledigt = 1
Else
erledigt = 0
End If
End Sub
Viel Spaß beim Basteln, Gruß,
Michael

Anzeige
AW: Makro Schleife bis Ende
11.07.2016 14:50:36
baschti007
Oder so was ?
Sub JO()
Dim sTxt As String
sTxt = InputBox("Bitte Anzahl der zeilen angeben")
If sTxt = "" Then Exit Sub
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row + sTxt, ActiveCell.Column)) _
.Value = 2016
End Sub

AW: Makro Schleife bis Ende
11.07.2016 15:25:40
Fabian
Hallo Baschti,
danke für deine Hilfe! Hab sie leider erst zu spät gesehen und mich gerade durch die andere Lösung durchgefummelt!
Werde sie aber später noch ausprobieren!
Danke

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige