PDA

Vollständige Version anzeigen : rel. Verweis auf die nächste gefüllte Zelle


Lealo
02.04.2012, 08:26
Hallo Leute

Ich habe wieder mal ein Problem.
Ich schreibe eine Makro und die sollte folgendermassen funktionieren:

Die Makro sucht zuerst die Zellen, in denen "In Criteria Count" steht (in Spalte D). Hat es die gefunden, springt es eine Zelle nach rechts (Spalte F, da merged cells) und schaut dort, ob der Wert der Zelle grösser als 0 ist. Ist das der Fall, dann soll die Makro in die nächste obere gefüllte Zelle in der Spalte B springen. Sie muss also 4 Zellen nach links und x Zellen nach oben. Wie krieg ich ne Formel für das x raus?

Bis jetzt sieht mein Code so aus:

For i = 1 To myDataRows
If Cells.Find("In Criteria Count") Then
If ActiveCell.Offset(0, 1).Value > 0 Then
ActiveCell.Offset(x, -4) = mySL1


Liebe Grüsse
Lealo

IngGi
02.04.2012, 10:26
Hallo Lealo,

das könnte zum Beispiel so aussehen:

<blockquote><div style='background-color: #F2F2FF; border: 1px solid #3300B2; padding: 0px 24px;'><pre style='text-align: center; font-size: 13px;'><span style='color: #008000;'>'#######################################################<br>'# #<br>'# Code einfügen in: #<br>'# das Klassenmodul des betreffenden Tabellenblattes #<br>'# #<br>'#######################################################<br></span></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><pre style='font-size: 12px; padding: 0px 10px;'><span style="color: #0000FF">With</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"D:D"</span><span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">Set</span> c = .Find<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"In Criteria Count"</span><span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">If</span> <span style="color: #0000FF">Not</span> c <span style="color: #0000FF">Is</span> <span style="color: #0000FF">Nothing</span> <span style="color: #0000FF">Then</span><br> firstAddress = c.Address<br> <span style="color: #0000FF">Do</span><br> <span style="color: #0000FF">If</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"F"</span> & c.Rows<span style='color: #B200CC;'>)</span> &gt;<span style="color: #FF0000"> 0</span> <span style="color: #0000FF">Then</span><br> <span style="color: #0000FF">If</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows -<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span> &lt;&gt; <span style='color: #CC9900;'>""</span> <span style="color: #0000FF">Then</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows -<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span> = mySL1<br> <span style="color: #0000FF">Else</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows<span style='color: #B200CC;'>)</span>.End<span style='color: #B200CC;'>(</span>xlUp<span style='color: #B200CC;'>)</span> = mySL1<br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br> <span style="color: #0000FF">Set</span> c = .FindNext<span style='color: #B200CC;'>(</span>c<span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">Loop</span> <span style="color: #0000FF">While</span> <span style="color: #0000FF">Not</span> c <span style="color: #0000FF">Is</span> <span style="color: #0000FF">Nothing</span> And c.Address &lt;&gt; firstAddress<br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br><span style="color: #0000FF">End </span><span style="color: #0000FF">With</span><br></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><p style='font-size: 8px; font-family: Verdana; text-align: right;'>VBA/HTML - CodeConverter für Excelforen<br>AddIn für Excel XP+2003 - komplett in VBA geschrieben von IngGi<br>Anbindung an VBE-Kontextmenü geklaut ;-) bei: <a href='http://www.cpearson.com/excel/VbeMenus.aspx'>http://www.cpearson.com/excel/VbeMenus.aspx</a></p></div></blockquote>

Gruß Ingolf

Lealo
02.04.2012, 10:32
Hallo IngGi

Danke für deine Antwort.

Ich habe deine Formel ausprobiert, aber für mySL1 kommt "empty" raus...
Ausserdem soll die Makro den Inhalt der Zelle Bx als Variable speichern. Dann kann es auch sein, dass "In Criteria Count" bis zu 6mal vorkommt, das heisst es müsste dann eine Schleife geben, in der die mySL immer mySL1, mySL2, mySL3 etc. heissen...

Kannst du mir da weiterhelfen?

Liebe Grüsse
Lealo

IngGi
02.04.2012, 16:09
Hallo Lealo,

dann solltest du an Stelle von 6 (String-) Variablen mySL1 bis mySL6 ein Datenfeld verwenden. Dieses deklarierst du folgendermaßen:
Dim mySL(1 To 6) As String
An Stelle des Variablentyps String kannst du natürlich auch einen anderen Variablentyp verwenden, je nach Datentyp. Befüllt wird das Datenfeld dann so (am Beispiel des ersten von 6 Werten:
mySL(1) = "wasauchimmer"
Nachfolgend der angepasste Code. Eine Do-Loop-Schleife war bereits enthalten. Die Rettung des Inhaltes der überschriebenen Zellen habe ich eingebaut. Auch dafür habe ich ein Datenfeld mit 6 Werten verwendet:

<blockquote><div style='background-color: #F2F2FF; border: 1px solid #3300B2; padding: 0px 24px;'><pre style='text-align: center; font-size: 13px;'><span style='color: #008000;'>'#######################################################<br>'# #<br>'# Code einfügen in: #<br>'# das Klassenmodul des betreffenden Tabellenblattes #<br>'# #<br>'#######################################################<br></span></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><pre style='font-size: 12px; padding: 0px 10px;'><span style="color: #0000FF">Sub</span> test<span style='color: #B200CC;'>(</span><span style='color: #B200CC;'>)</span><br><br><span style="color: #0000FF">Dim</span> mySave<span style='color: #B200CC;'>(</span><span style="color: #FF0000">1</span> <span style="color: #0000FF">To</span><span style="color: #FF0000"> 6</span><span style='color: #B200CC;'>)</span> <span style="color: #0000FF">As</span> <span style="color: #0000FF">Variant</span><br><span style="color: #0000FF">Dim</span> iCount <span style="color: #0000FF">As</span> <span style="color: #0000FF">Integer</span><br><span style="color: #0000FF">Dim</span> c <span style="color: #0000FF">As</span> <span style="color: #0000FF">Range<br></span><br><br>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">1</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"A"</span> <span style='color: #008000;'>'Das ist hier nur beispielhaft angegeben<br></span>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">2</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"B"</span> <span style='color: #008000;'>'Bei dir kommt der Inhalt für mySL?<br></span>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">3</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"C"</span> <span style='color: #008000;'>'aus vorangehendem Code, wie ich vermute.<br></span>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">4</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"D"</span><br>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">5</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"E"</span><br>mySL<span style='color: #B200CC;'>(</span><span style="color: #FF0000">6</span><span style='color: #B200CC;'>)</span> = <span style='color: #CC9900;'>"F"</span><br><br><span style="color: #0000FF">With</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"D:D"</span><span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">Set</span> c = .Find<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"In Criteria Count"</span><span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">If</span> <span style="color: #0000FF">Not</span> c <span style="color: #0000FF">Is</span> <span style="color: #0000FF">Nothing</span> <span style="color: #0000FF">Then</span><br> firstAddress = c.Address<br> <span style="color: #0000FF">Do</span><br> iCount = iCount +<span style="color: #FF0000"> 1</span><br> <span style="color: #0000FF">If</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"F"</span> & c.Rows<span style='color: #B200CC;'>)</span> &gt;<span style="color: #FF0000"> 0</span> <span style="color: #0000FF">Then</span><br> <span style="color: #0000FF">If</span> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows -<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span> &lt;&gt; <span style='color: #CC9900;'>""</span> <span style="color: #0000FF">Then</span><br> mySave<span style='color: #B200CC;'>(</span>iCount<span style='color: #B200CC;'>)</span> = Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows -<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows -<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span> = mySL<span style='color: #B200CC;'>(</span>iCount<span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">Else</span><br> mySave<span style='color: #B200CC;'>(</span>iCount<span style='color: #B200CC;'>)</span> = Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows<span style='color: #B200CC;'>)</span>.End<span style='color: #B200CC;'>(</span>xlUp<span style='color: #B200CC;'>)</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"B"</span> & c.Rows<span style='color: #B200CC;'>)</span>.End<span style='color: #B200CC;'>(</span>xlUp<span style='color: #B200CC;'>)</span> = mySL<span style='color: #B200CC;'>(</span>iCount<span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br> <span style="color: #0000FF">Set</span> c = .FindNext<span style='color: #B200CC;'>(</span>c<span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">Loop</span> <span style="color: #0000FF">While</span> <span style="color: #0000FF">Not</span> c <span style="color: #0000FF">Is</span> <span style="color: #0000FF">Nothing</span> And c.Address &lt;&gt; firstAddress<br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br><span style="color: #0000FF">End </span><span style="color: #0000FF">With</span><br><br><span style="color: #0000FF">End </span><span style="color: #0000FF">Sub</span><br></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><p style='font-size: 8px; font-family: Verdana; text-align: right;'>VBA/HTML - CodeConverter für Excelforen<br>AddIn für Excel XP+2003 - komplett in VBA geschrieben von IngGi<br>Anbindung an VBE-Kontextmenü geklaut ;-) bei: <a href='http://www.cpearson.com/excel/VbeMenus.aspx'>http://www.cpearson.com/excel/VbeMenus.aspx</a></p></div></blockquote>

Gruß Ingolf