Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

prüfen, ob eine zelle leer ist, dann for/next

1,104 views
Skip to first unread message

klaus.könig

unread,
Jul 29, 2009, 8:27:52 AM7/29/09
to
hallo

ist das der beste code, um eine for-next-schleife erst dann laufen zu
lassen, wenn die zelle nicht leer ist

Sub EinhErmitteln()
Dim ersteZeile As Long, letzteZeile As Long
Dim i
Dim varZelle As Variant
ersteZeile = Range("B14").Row 'Zähler für die erste Zeile
ersteZeile = ersteZeile + 1 'Zähler um 1 erhöht, damit nach der
Spaltenüberschrift begonnen wird.
letzteZeile = Range("B14").End(xlDown).Offset(0, 0).Row 'Zähler für
die letzte Zeile
'MsgBox ersteZeile
'MsgBox letzteZeile
For i = ersteZeile To letzteZeile
If Range("B" & ersteZeile).Value = "" Then Exit For
Range("E" & i).FormulaLocal = "=SVERWEIS(B" & i &
";xTab_Massnahmen!$A$3:$L$22;6;FALSCH)"
Next

End Sub

michlchen

unread,
Jul 29, 2009, 9:01:04 AM7/29/09
to
so wie du es hier aufgeschrieben hast, wird er bei der ersten leeren
zelle abbrechen. exit for (also im schlimmsten fall gleich am ersten
feld.)

warum nimmst du nicht ne do loop schleife.

range("A14").select
do
If Range("B" & activecell.row).Value <> "" then
' mache sverweis
end if
activecell.offset(1,0).select
loop untill activecell.row > letztezeile


wenn du noch ein i drinen brauchst, dann setz vor das do das i=1 und
in die schleife vor das offset i=i +1

Claus Busch

unread,
Jul 29, 2009, 9:03:01 AM7/29/09
to
Hallo Klaus,


> ist das der beste code, um eine for-next-schleife erst dann laufen zu
> lassen, wenn die zelle nicht leer ist
>

[Code ausgeschnitten]

warum machst du solche Verrenkungen wegen der ersten Zeile, wenn du genau
weißt, dass es die Zeile 15 ist. Weise einfach den Wert fest zu. Excel fügt
die Formel auch in Zeilen ein, wenn B leer ist. Dann erhältst du #NV. Warum
dann nicht wie eine Wenn-Formel =Wenn(B15="";"";SVerweis.....)

Dim ersteZeile As Integer
Dim letzteZeile As Long

ersteZeile = 15
With ActiveSheet
letzteZeile = .Cells(Rows.Count, 2).End(xlUp).Row
.Range("E" & ersteZeile).FormulaLocal = _
"=Wenn(B" & ersteZeile & "="""";"""";SVERWEIS(B" & ersteZeile & _
";xTab_Massnahmen!$A$3:$L$22;6;FALSCH))"
.Range("E" & ersteZeile).AutoFill _
Destination:=.Range("E" & ersteZeile & ":E" & letzteZeile)
End With


--
Mit freundlichen Grüssen
Claus Busch
@Web-Interface

Windows XP SP2; Vista Ultimate
Office 2000 SP3; Office2007 Ultimate

Bernd P

unread,
Jul 29, 2009, 9:13:19 AM7/29/09
to
Hallo Klaus,

Viele (aber nicht alle) Wege führen nach Rom.

Ich würde meinen bevorzugten Code nie als bestmöglichen bezeichnen,
aber ich gebe ihn hier einmal an:

Sub Test()
Dim i as Integer

i = 15
Do While Not Isempty(Cells(i,2))
'Besser .Formula nehmen als .FormulaLocal - sonst läufts nicht
in anderssprachigen Versionen
Cells(i,5).FormulaLocal = "=SVERWEIS(B" & i & ";xTab_Massnahmen!
$A$3:$F$22;6;FALSCH)"
i = i + 1
'Debug.Print "Zeile " & i
Loop

End Sub

Testen würden ich bevorzugt mit Debug.Print. Diese Testausgaben kannst
Du dann einfach im VBA Editor ansehen nach Drücken von STRG + g

Viele Grüße,
Bernd

klaus.könig

unread,
Jul 29, 2009, 9:35:24 AM7/29/09
to
hallo claus,

okay, dein code hat mich überzeugt und ich lass das mit den
verrenkungen; nochmals DANKE

0 new messages