Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

146 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige