Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Zaehlschleife...!!

Betrifft: Zaehlschleife...!!
von: streuner
Geschrieben am: 15.04.2003 - 09:26:55

Moinsen!

Hab ein interessantes Problem: lasse mir zwei Diagramme erstellen in Excel und dafür muss ich vorher den Bereich ermitteln, den die Diagramme zeichnen sollen. HAb ne Schleife gebaut, die Durch zählt in einer Spalte wieviele Werte enthalten sind:

Function letzteReiheermitteln1(auswertung)
Dim Spalte As String
Dim Reihe As Integer
Dim Reihe2 As Integer
Dim leereZelle As Variant
Dim i As Integer

Spalte = "B"
Reihe = auswertung
Reihe2 = Reihe
i = 0

For i = 1 To 20
leereZelle = Sheets("Tabelle2").Cells(Reihe, Spalte)
If (leereZelle = "") Then
Reihe = Reihe - 1
auswertung = Reihe - Reihe2
Exit For
End If
Reihe = Reihe + 1
Next i

End Function

Auswertung enthält die Startposition, von der ab gezählt werden soll. Das interessante ist, dass ich diese Funktion 2x aufrufe - einmal "letzteReiheermitteln1(auswertung)" und einmal "letzteReiheermitteln2(auswertung)". Je nachdem, welche ich zuerstaufrufe, funzt immer nur die zuerst aufgerufene!!!! Also nur die erste Funktion erkennt, wieviele Werte enthalten sind. Die zweite findet gar keine Zahlen, obwohl dort definitiv zahlen sind!!!

Hab echt schon (fast) alles versucht: andere Namen vergeben, andere Variablen...etc.! HAt irgend jemand ne Idee, oder ne andere Möglichkeit, wie ich in einer Spalte, von einem bestimmten Startwert zählen kann, bis eine Zelle leer ist?
Danke schon mal!

MFG Streuner

  

Re: Zaehlschleife...!!
von: Ramses
Geschrieben am: 15.04.2003 - 09:41:13

Hallo

wenn du damit wirklich was erreichen willst, musst du einen Rückgabewert an die Function erteilen

Du schreibst:
For i = 1 To 20
leereZelle = Sheets("Tabelle2").Cells(Reihe, Spalte)
If (leereZelle = "") Then
Reihe = Reihe - 1
auswertung = Reihe - Reihe2
Exit For
End If
Reihe = Reihe + 1
Next i

Damit wird der Variablen "Auswertung", die übrigens nirgends definiert ist :-)), der Wert aus der Berechnung "Reihe - Reihe2" zugewiesen. Die Function "letzteReiheErmitteln1()" erhält jedoch keinen Wert !!!

Es müsste eigentlich so heissen:

For i = 1 To 20
leereZelle = Sheets("Tabelle2").Cells(Reihe, Spalte)
If (leereZelle = "") Then
Reihe = Reihe - 1
letzteReiheermittlen1 = Reihe - Reihe2
Exit For
End If
Reihe = Reihe + 1
Next i

Jetzt liefert die Funktion einen Wert zurück

Gruss Rainer

  

Danke...
von: streuner
Geschrieben am: 15.04.2003 - 09:46:12

...ich werde es gleich mal testen!
Hab die Variable "auswertung" natürlich definiert, als Integer. Bin aber stets davon ausgegangen, dass der Parameter, der übergeben wird, den neuen Wert enthält!? So kann man sich täuschen;)!
Falls es das Problem nicht lösst, werde ich mich nochmal melden, in den nächsten 10 Minuten!

MFG Streuner

  

Re: Alternative
von: Nike
Geschrieben am: 15.04.2003 - 09:55:24

Hi,
mit dieser etwas kürzeren Variante
kannst du auch die letzte gefüllte
Zelle ausgeben lassen.

Sub letzte_gefüllte_Zelle_Zeile_von_Spalte_B()
dim intSpalt as integer
intSpalt = 2 'Spalte B
MsgBox Worksheets(1).Cells(Worksheets(1).Rows.count, intSpalt).End(xlUp).Row
End Sub

somit ist die Zeile der ersten leeren Zelle für Spalte B
dim intSpalt as integer
intSpalt = 2 'Spalte B
Msgbox Worksheets(1).Cells(Worksheets(1).Rows.count, intSpalt).End(xlUp).Row + 1

Bye

Nike



  

Re: Zaehlschleife...!!
von: ingo
Geschrieben am: 15.04.2003 - 10:16:00

HAllo,
mir ist nicht ganz klar, welches ergebnis du erwartest.
wenn Du z.B. als eingabewert a4 eingibst möchtest du die zeilennummer mit dem letzten eintrag vor der ersten leerzelle unterhalb von a4?

versuchs doch mal mit der funktion:

Function zeilenzaehlen(startzelle As Range) As Integer
Application.Volatile
zeilenzaehlen = startzelle.End(xlDown).Row - startzelle.Row + 1
End Function

die funktion wird aufgerufen mit:

zeilenzaehlen(a4)
und gibt eine zahl zurück, die die anzahl der Zeilen ab a4 zurückgibt, die in spalte a nicht leer sind.

also z.B.
a4=a5=a6="xyz"
a7=leer
=> zeilenzaehlen(a4) gibt 3 zurück

ich hoffe, das hilft dir weiter
gruß Ingo


  

korrektur
von: ingo
Geschrieben am: 15.04.2003 - 10:49:09

hallo nochmal,
mir ist aufgefallen, dass die funktion ein falsches ergebnis liefert, wenn das feld unter startzelle leer ist also neue version:

Function zeilenzaehlen(startzelle As Range) As Integer
Application.Volatile
If startzelle.Offset(1, 0) = "" Then
zeilenzaehlen = 1
Else
zeilenzaehlen = startzelle.End(xlDown).Row - startzelle.Row + 1
End If
End Function

  

Re: Alternative
von: Dank euch...!
Geschrieben am: 15.04.2003 - 12:13:48

Klappt super mit euren Vorschlägen!

MFG Streuner