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

Forumthread: schleife, buchstaben hochzählen?

schleife, buchstaben hochzählen?
08.02.2007 11:34:57
thomas
hallo, ich habe eine frage zur schleifen-programmierung!
ich möchte meine zellen (als bsp B11:Z100) mit einer bestimmten formel per vba automatisch ausfüllen lassen, um auch händisch die zellen mit zahlen füttern zu können ohne die eigendliche formel dadurch zu löschen.
das hochzählen von den zeilen 11 bis 100 ist kein problem aber wie mache ich das mit den spalten? wie kann ich buchstaben hochzählen?
mein problem:
in Case(B & k) wird ja die zelle definiert, durch k sind die zeilen definiert und werden hochgezählt.
aber wie mache ich dass mit B, das B bis Z hochgezählt wird?
weiters habe ich in .FormulaLocal = "=(A" & k & "-B10)" dasselbe problem:
A ist eine fixe Spalte, jedoch sollte dann „B“ wiederum weiter nach Z hochgezählt werden wobei 10 wieder eine fixe Zeile ist?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
For i_ = 1 To 100
Dim k As String
k = 10 + i_
Application.EnableEvents = False
Select Case Target(1, 1).Address(0, 0)
Case ("B" & k)
If IsEmpty(Target(1, 1)) Then
Target(1, 1).FormulaLocal = "=(A" & k & "-B10)"
End If
End Select
Application.EnableEvents = True
Next i_
End Sub

besten dank
thomas
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: schleife, buchstaben hochzählen?
08.02.2007 11:41:52
IngGi
Hallo Thomas,
mit der Cells(2, 1)-Schreibweise (entspricht Range("A2") lassen sich auch die Spalten über Zahlen ansprechen.
Gruß Ingolf
AW: schleife, buchstaben hochzählen?
08.02.2007 12:09:16
thomas
hallo, okay, danke für den tipp!
ich habeversucht den tipp sofort umzusetzen und die formel umzupasselt, aber ich traue sie mir gar nicht zu posten?! hab das sicher falsch gemacht?
kann das case eigentlich erhalten bleiben?!
es soll ja nur die zelle angesprochen werden in der ich aktuell bin? *grml*

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
For i_ = 1 To 10
k = 10 + i_
r = 10 + i_
c = 2 + i_
Application.EnableEvents = False
If IsEmpty(Cells(r, c)) Then
Cells(r, c).FormulaLocal = "=(A" & k & "-B10)"
End If
Application.EnableEvents = True
Next i_
End Sub

Anzeige
AW: schleife, buchstaben hochzählen?
08.02.2007 17:02:50
IngGi
Hallo Thomas,
hier mal ein Beispiel, wie du mit Hilfe von Cells(Zeile, Spalte) den Bereich A1:E100 mit der Formel "=1+1" befüllen kannst:

Sub test()
Dim ze As Long 'Zeilennummer
Dim sp As Integer 'Spaltennummer
For ze = 1 To 100 'Zeilen von 1 bis 100 abarbeiten
   For sp = 1 To 5 'Innerhalb jeder Zeile Spalten von 1 bis 5 (A bis E) abarbeiten
      Cells(ze, sp).FormulaLocal = "=1+1" 'Formel einfügen
   Next 'Nächste Spalte
Next 'Nächste Zeile
End Sub


Das geht allerdings auch bequemer. VBA stellt da bessere Mittel zur Verfügung. Du kannst eine einzelne Zelle in eine sogenannte Range-Variable übergeben. Mit Hilfe der For Each...Next-Schleife wechselt die Variable automatisch innerhalb des definierten Bereiches von Zelle zu Zelle. Obiges Beispiel mit dieser Methode:

Sub test()
Dim rng As Range 'Objektvariable für die Zelle
For Each rng In Range("A1:E100") 'Zelle für Zelle im Bereich abarbeiten
   rng.FormulaLocal = "=1+1" 'Formel einfügen
Next
End Sub

Wenn ich dich richtig verstanden habe, macht das allerdings für dich wohl so keinen Sinn. Ich nehme einfach mal an, dass du immer dann, wenn jemand eine Formel im angegebenen Bereich überschreibt, wieder die Formel eintragen willst. Darauf deutet hin, dass du ein Worksheet_Change-Makro verwendest. Dieses läuft ja automatisch bei jeder Änderung im Tabellenblatt. Wenn ich da richtig liege, würde ich das so lösen:

Option Explicit
Dim Alter_Zellinhalt As Variant
Private Sub Worksheet_Activate()
'Wenn das Tabellenblatt aktiviert wird, den Inhalt der
'aktiven Zelle in die Variable "Alter_Zellinhalt" übergeben
Alter_Zellinhalt = ActiveCell
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Wenn zu einer anderen Zelle gegangen wir, den Inhalt dieser
'Zelle in die Variable "Alter_Zellinhalt" übergeben
Alter_Zellinhalt = ActiveCell
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'Excel liefert in der Variablen "Target" automatisch diejenige Zelle,
'die verändert wurde und dadurch das Makro gestartet hat.
'Wenn die geänderte Zelle nicht im relevanten Bereich liegt,
'Makro sofort wieder beenden, ohne etwas zu tun
If Intersect(Target, Range("A1:E100")) Is Nothing Then Exit Sub
'Den alten Zellinhalt aus der Variablen "Alter_Zellinhalt" wieder in
'die Zelle schreiben
Target = Alter_Zellinhalt
End Sub

Wenn in das Tabellenblatt gewechselt wird oder innerhalb des Tabellenblattes die Zelle gewechselt wird, wird jedesmal der aktuelle Inhalt der danach aktiven Zelle in die Variable "Alter_Zellinhalt" übernommen. Damit kann ich dann jedesmal, wenn eine Zelle verändert wird, den vorherigen Zellinhalt aus der Variablen wieder in die Zelle zurückschreiben.
Gruß Ingolf
Anzeige
AW: schleife, buchstaben hochzählen?
09.02.2007 11:03:36
thomas
hallo lieber ingolf!
ich danke dir rechtherzlich für deine tolle und ausführliche antwort!
habe mir die gestrige Nacht damit um die Ohren geschlagen, und alles mögliche versucht. leider habe ich wohl zuwenig gut und genau mein Problem beschrieben, hab versucht deine Anweisungen zu folgen und eventuell die Formeln umzubauen. ich bin leider daran kläglich gescheitert!
der 3. Ansatz mit „Dim Alter_Zellinhalt As Variant“ ist eigentlich eh fast das was ich wollte! lediglich wird hier nur das Ergebnis weitergegeben? ich würde jedoch gerne ursprüngliche Formel weitergeben sprich:
zurzeit ist es so das =(var_zeile)+(var_spalte)= 2 und 2 wird weitergegeben, ich bräuchte jedoch wenn in der zelle =(var_zeile)+(var_spalte) dann soll er genau =(var_zeile)+(var_spalte) weitergeben, den das Ergebnis kann sich ändern!
und wenn ich die Zelle mit einen wert (händisch) überschreibe dann soll der überschriebene wert gespeichert werden und erst wenn ich den überschriebenen wert wieder per „del“ rauslösche soll die ursprüngliche Formel zum Vorschein kommen?!
weiters:
var_zeile= muss weiter per schleife hochgezählt werden?
wenn ich in Zeile 5 bin dann muss var_zeile auch 5 sein bzw. wenn ich in Zeile 10 bin dann soll var_zeile auch 10 sein!
das gleiche mit var_spalte!
wenn ich in spalte 10 bin dann muss var_spalte auch 10 sein!
ich habe meine Excel-Datei hochgeladen unter folgenden link:
www.BMWcompact.at/excel/hilfe.zip
vielleicht könntest du so nett sein und dir mein Problem kurz anschauen!
hab das jetzt zu fuß alles reingeschrieben, aber das ist wohl nicht der sinn von excel bzw. wird es ziemlich langsam?! ;((
vielen, vielen dank
thomas (thomas@BMWcompact.at)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Buchstaben in Excel mit VBA hochzählen


Schritt-für-Schritt-Anleitung

Um Buchstaben in Excel mithilfe von VBA hochzuzählen, kannst du die Cells-Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Modul".

  3. Füge den folgenden Code ein:

    Sub BuchstabenHochzaehlen()
       Dim i As Integer, j As Integer
       Dim zeile As Integer, spalte As Integer
       zeile = 11 ' Startzeile
    
       For i = 0 To 25 ' 26 Buchstaben im Alphabet
           spalte = 2 + i ' Beginne mit Spalte B
           For j = 0 To 89 ' Hochzählen bis zur Zeile 100
               Cells(zeile + j, spalte).FormulaLocal = "=1+1" ' Beispiel-Formel
           Next j
       Next i
    End Sub
  4. Führe das Skript aus: Gehe zurück zu Excel, drücke ALT + F8, wähle BuchstabenHochzaehlen und klicke auf "Ausführen".

Diese Methode füllt die Zellen von B11 bis Z100 mit einer Beispiel-Formel. Du kannst die Formel nach Bedarf anpassen.


Häufige Fehler und Lösungen

  • Problem: Fehler beim Ausführen des Codes.

    • Lösung: Stelle sicher, dass du den Code in einem Modul und nicht in einem Arbeitsblatt- oder Klassenmodul eingefügt hast.
  • Problem: Die Buchstaben zählen nicht richtig.

    • Lösung: Überprüfe die Schleifenbedingungen und stelle sicher, dass sie korrekt sind.
  • Problem: Die Formeln verschwinden, wenn ich manuell Werte eingebe.

    • Lösung: Verwende den Worksheet_Change-Event, um die ursprüngliche Formel wiederherzustellen, wenn die Zelle gelöscht wird.

Alternative Methoden

Wenn du nicht nur VBA verwenden möchtest, kannst du auch die Excel-Funktion CHAR nutzen, um Buchstaben zu generieren. Hier ist ein Beispiel:

=CHAR(65 + (SPALTE()-2)) & ROW()

Diese Formel gibt dir in der ersten Zeile von Spalte B bis Z die Buchstaben A bis Z zurück. Du kannst sie nach unten ziehen, um die Buchstaben in den entsprechenden Zeilen anzuzeigen.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung des VBA-Codes:

  1. Formel anpassen: Ändere die Formel in Cells(zeile + j, spalte).FormulaLocal = "=(A" & (zeile + j) & "-B10)", um Werte aus anderen Zellen zu verwenden.

  2. Buchstaben zählen in Spalte: Verwende den Code, um Buchstaben in einer bestimmten Spalte zu zählen, indem du WorksheetFunction.CountIf einsetzt.


Tipps für Profis

  • Verwendung von Arrays: Du kannst auch ein Array verwenden, um die Buchstaben im Voraus zu definieren und sie dann in die Zellen zu schreiben.

  • Optimierung der Leistung: Deaktiviere Application.ScreenUpdating und Application.Calculation, während der Code läuft, um die Leistung zu verbessern.

  • Debugging: Nutze Debug.Print innerhalb deiner Schleifen, um den Fortschritt zu überprüfen und Fehler zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich die Buchstaben über 26 hinaus hochzählen?
Du kannst die Logik in der Schleife anpassen, um die ASCII-Werte zu kombinieren, aber das erfordert erweiterte Programmierung.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, dieser VBA-Code sollte in allen modernen Excel-Versionen wie Excel 2010, 2013, 2016 und 2019 funktionieren.

3. Kann ich diesen Code auch in Excel Online verwenden?
Leider unterstützt Excel Online keine VBA-Skripte. Du musst die Desktop-Version verwenden.

4. Was tun, wenn ich nicht mit VBA arbeiten möchte?
Du kannst die Excel-Funktionen wie CHAR oder SEQUENZ verwenden, um Buchstaben und Zahlen zu generieren.

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