PDA

Vollständige Version anzeigen : Suchen von bestimmten Angaben


Timo T.
24.07.2012, 06:55
Hallo Zusammen,

ich importiere mehrere XML Dateien in mein Excel 2010.

Beispielsweise hat die XML Datei die Einteilung Kategorie und Einheit. Nun muss ich nach bestimmten Begriffen unter Kategorie suchen und dementsprechend die Einheit auslesen. Wie stellt man das am besten in VBA an (das ganze soll Automatisiert sein und die XML Dateien sehen nicht immer gleich aus)?

Hab meine eine kleine Excel-Beispieldatei eingefügt. Da würde ich zum Beispiel gern von GWP --> MassCO2 --> Value einlesen und einer Variablen zuweisen wollen.


Vielen Dank schon mal für eure Hilfe


Gruß Timo

Beverly
24.07.2012, 07:28
Hi Timo,

nach diesem Prinzip:

Sub Suchen()
Dim rngZelle As Range
Dim lngZeile As Long
Set rngZelle = Columns(1).Find("GWP", lookat:=xlWhole)
If Not rngZelle Is Nothing Then
lngZeile = rngZelle.Row
Do
If Cells(lngZeile, 2) = "Mass CO2" Then
MsgBox Cells(lngZeile, 3)
Exit Do
End If
lngZeile = lngZeile + 1
Loop While Cells(lngZeile, 1) = "GWP"
End If
End Sub

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
24.07.2012, 14:11
Danke Beverly für die Lösung. So habe ich schon mal einen Code womit ich die Syntax verstehe und dementsprechend anpassen kann.

Mein Plan wird nun sein das ich in einem Tabellenblatt immer die zwei Suchbegriffe eingebe und dann soll die Abfrage den passenden Wert dazu finden. Ist das ganze noch "Sinnvoll" wenn circa 100 solcher Abfragen ablaufen sollen?

Gruß Timo

Beverly
24.07.2012, 14:20
Hi Timo,

wie soll das Ganze denn überhaupt ablaufen? Wo und wie sollen die Ergebnisse ausgegeben werden?
Bedingung ist übrigens, dass nach Spalte A sortiert ist (so hatte ich dein Beispiel verstanden). Falls nicht, müsste man den Code anders schreiben.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
24.07.2012, 14:32
Das Wie ist die schwierigste Frage an dem ganzen.

Grober Ablauf ist folgender: Es soll eine Berechnung durchgeführt werden, teilweise werden die Daten für diese in Excel noch selbst eingegeben ein Großteil der Daten steht aber in verschiedenen XML Dateien. Wie genau aber diese Aussehen weiß ich auch noch nicht, sortiert nach Spalten aber wird es nicht sein. Inwieweit müsste der Code denn dann geändert werden?

Durch zwei Begriffe in den XML Dateien kann ich eigentlich die Größe bestimmen welche ich benötige. Da aber noch keine genaue Deklaration der Begriffe feststeht wollte ich nun jeweils Begriffe in Excel vorgeben und nach diesen soll dann gesucht werden. So erspar ich mir dann später das Ändern im Code und kann schon alles vorbereiten. Die gefundenen Ergebnisse sollen dann einer Variablen und oder Zelle zugewiesen werden und anschließend die Berechnung erfolgen.

Beverly
24.07.2012, 14:52
Hi Timo,

wenn Spalte A nicht sortiert ist, dann müsstest du diesen Code verwenden:
Sub Suchen()
Dim rngZelle As Range
Dim strStart As String
Set rngZelle = Columns(1).Find("GWP", lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
Do
If rngZelle.Offset(0, 1) = "Mass CO2" Then
MsgBox rngZelle.Offset(0, 2)
Exit Do
Else
Set rngZelle = Columns(1).FindNext(rngZelle)
End If
Loop While Not rngZelle Is Nothing And strStart <> rngZelle.Address
End If
Set rngZelle = Nothing
End Sub
Da deine Angaben sehr spärlich sind, muss ich den Rest leider dir allein überlassen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
24.07.2012, 15:18
Ja ok, spärlich ist es aber habe halt nicht mehr :)


Wie gesagt die ausgelesenen Daten sollen eigentlich nur Variablen zugewiesen werden welche dann später in Formeln benutzt werden. Mit welcher Information könnte ich dir denn noch helfen?

Beverly
24.07.2012, 17:06
Hi Timo,

in der Zeile mit der MsgBox wird der Wert ausgegeben den du suchst - an der Stelle musst du nur den Zellinhalt an deine Variable übergeben.

Starten könntest du den Code mit einem CommandButton und anstelle der im Code fest zugewiesenen Begriffe kannst du die Inhalte der Zellen verwenden, in denen deine Suchbegriffe stehen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
25.07.2012, 09:31
Hallo Beverly,

danke für deine Hilfe, funktioniert Prima :)


Eine Frage hätte ich noch, wie erweiter ich das ganze damit auf mehreren Tabellenblättern gesucht wird?

Beverly
25.07.2012, 10:47
Hi Timo,

Sub Suchen2()
Dim rngZelle As Range
Dim strStart As String
Dim wksTab As Worksheet
For Each wksTab In Worksheets
With wksTab
Set rngZelle = .Columns(1).Find("GWP", lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
Do
If rngZelle.Offset(0, 1) = "Mass CO2" Then
MsgBox rngZelle.Offset(0, 2)
Exit Do
Else
Set rngZelle = .Columns(1).FindNext(rngZelle)
End If
Loop While Not rngZelle Is Nothing And strStart <> rngZelle.Address
End If
Set rngZelle = Nothing
End With
Next wksTab
End Sub
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
25.07.2012, 15:59
Es funktionierte schon mal.

Ich habe nun die Suchfunktion in ein Modul eingefügt. Dann war mein Plan dieses Modul von "DieseArbeitsmappe" aus zu starten. Hab ich nun einen Suchbegriff auf dem zweiten Worksheet findet er nix. Ist das zweite Worksheet aber Aktiv beim Ausführen findet er etwas. Wo ist da mein Denkfehler?


Viele Grüße Timo

Beverly
25.07.2012, 17:18
Hi Timo,

der Code läuft durch alle Tabellenblätter - folglich spielt es keine Rolle, welches Blatt aktiv ist oder von wo aus der Code gestartet wird.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
26.07.2012, 09:30
Ja die Arbeitsblätter werden richtig durchgezählt. Befindet sich aber der Suchbegriff auf der zweiten Seite wird bei Suche nix mehr gefunden (glaub ich) und dementsprechend auch strStart keine Adresse zugewiesen. Wo liegt da der Fehler?

Beverly
26.07.2012, 10:50
Hi Timo,

du hast den Punkt (.) vor Columns(1).Find weggelassen, deshalb bezieht sich alles logischerweise immer auf das aktive Tabellenblatt.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
26.07.2012, 11:44
Wow Danke!

Wie lange hast du gebraucht um diesen Fehler von mir zu finden? :)


Danke dir nochmals für deine Hilfe!!!

Beverly
26.07.2012, 12:47
Hi Timo,

eigentlich nicht sehr lange, denn bei entsprechender Erfahrung kann man einen Fehler meist schnell eingrenzen. Allerdings hatte ich zuerst angenommen, du hast die With-Anweisung weggelassen, hatte auch schon meinen Beitrag dementsprechend verfasst und geschrieben, dass du vor Columns(1) noch wksTab davorsetzen sollst - so hätte es nämlich auch ohne With-Anweisung funktioniert. Beim nochmaligen Darüberschauen aber ist mir dann aufgefallen, dass die With-Anweisung zwar da steht, aber eben der Punkt (.) fehlt - in einer With-Anweisung ist der Bezug auf das entsprechende Objekt immer mit dem Punkt davor anzugeben.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
27.07.2012, 09:07
Ich schon wieder :eek:

Habe nun die Suchfunktion etwas angepasst. Im Moment holt er sich die Suchbegriffe von einem Tabellenblatt und kopiert dann das Suchergebnis auf das Tabellenblatt.
Solang die suchenden Begriffe in der ersten Zeile stehen werden sie auch gefunden, bei der zweiten aber nicht mehr. Was ich hab ich wieder verändert? ;)



Sub Suchen()

Dim rngZelle As Range
Dim strStart As String
Dim wksTab As Worksheet
Dim test As Double

Dim Search1 As String
Dim Search2 As String
Dim i As Integer

For i = 2 To 9
Search1 = Sheets(2).Cells(i, 1)
Search2 = Sheets(2).Cells(i, 2)
For Each wksTab In Worksheets
With wksTab
Set rngZelle = .Columns(1).Find(Search1, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
Do
If rngZelle.Offset(0, 1) = Search2 Then
Sheets(2).Cells(i, 3) = rngZelle.Offset(0, 2)
test = rngZelle.Offset(0, 2)
Exit Do
Else
Set rngZelle = Columns(1).FindNext(rngZelle)
End If
Loop While Not rngZelle Is Nothing And strStart <> rngZelle.Address
End If
Set rngZelle = Nothing
End With
Next wksTab
Next i

End Sub


Variable test habe ich nur drin, damit ich sehe welcher Wert da gespeichert wird und ob.

Beverly
27.07.2012, 09:55
Hi Timo,

dann solltest du schon mal deine Arbeitsmappe hochladen - ich baue das jetzt nicht nach, denn ein Nachbau ist schwerlich mit dem Original identisch.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
27.07.2012, 09:59
Hallo Beverly,

habe die Datei im Anhang. Danke schon mal :)

Beverly
27.07.2012, 10:47
Hi Timo,

in der Zeile Set rngZelle = Columns(1).FindNext(rngZelle) fehlt wieder ein Punkt (.) vor Columns

Ich würde dir außerdem empfehlen, dass du die beiden Tabellenblätter "Calculation" und "Variablen" von der Suche ausschließt. Das kannst du mit dieser Codezeile machen:
If wksTab.Name = "Calculate" Or wksTab.Name = "Variablen" Then Exit For
und zwar unmittelbar nach der Zeile With wksTab.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
30.07.2012, 09:24
Hallo Beverly,

das mit den Punkten hab ich dann wohl so langsam (hoffe ich) verstanden ;)


Die Exit Bedingung von dir funktioniert bei mir nicht, habe ja nun 2 For Schleifen. Bei der Exit Abfrage wird ja dann die innere Schleife verlassen. Dadurch wird kein weiteres Tabellenblatt hochgezählt, sondern es geht direkt zu der next i Zeile. Also so schaut es bei mir zumindestens im Debugger aus.


Gruß Timo

Beverly
30.07.2012, 09:38
Hi Timo,

mit Exit wird nicht die For-Schleife sondern die Do-Schleife (also die, die innerhalb des jeweiligen Tabellenblattes abläuft und den Begriff sucht) verlassen und es wird mit dem nächsten Tabellenblatt weitergemacht. Nach Codedurchlauf erhältst du dann folgendes Ergebnis, was nach meinem Verständnis auch korrekt ist:

<b><em>Variablen</em></b><table border="1" cellspacing="0" cellpadding="0" style="border-color:#000000; border-width: 1px; font-size:11pt; background-color:#ffffff; padding-left:2pt; padding-right:2pt; "><colgroup><col style="font-weight:bold; width:40px;" /><col style="width:158px;" /><col style="width:158px;" /><col style="width:158px;" /></colgroup><tr style="background-color:#99CCFF; text-align:center; font-weight:bold; "><td>&nbsp;</td><td>A</td><td>B</td><td>C</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">1</td><td style="color:#000000; background-color:#FABF8F; text-align:center; " ><b>Suchbegriff&nbsp;1</b></td><td style="color:#000000; background-color:#FABF8F; text-align:center; " ><b>Suchbegriff&nbsp;2</b></td><td style="color:#000000; background-color:#FABF8F; text-align:center; " ><b>Ergebnis</b></td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">2</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >test1</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >2</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">3</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >test2</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >4</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">4</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >test3</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >6</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">5</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >test4</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >7</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">6</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >Mass&nbsp;CO2</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >1</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">7</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >Mass&nbsp;CO3</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >3</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">8</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >Mass&nbsp;CO4</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >5</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">9</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >GWP</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >Mass&nbsp;CO5</td><td style="color:#000000; background-color:#FFFFFF; text-align:right; " >8</td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">10</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >j</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">11</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >k</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">12</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >l</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">13</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >m</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">14</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >n</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">15</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >o</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">16</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >p</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">17</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >q</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr><tr><td style="background-color:#99CCFF; text-align:center; font-weight:bold; ">18</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >a</td><td style="color:#000000; background-color:#FFFFFF; text-align:left; " >r</td><td style="color:#000000; background-color:#FFFFFF; ">&nbsp; </td></tr></table><br/><a href="http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip" onclick="window.open(this.href);return false">Tabellendarstellung in Foren Version 5.48</a><br/><br/>

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
30.07.2012, 10:16
Huhu, hab ich da den Code an der falschen Stelle eingefügt? Bei mir zählt er wie gesagt die Tabellenblätter nicht hoch. Kann auch gern nochmal die Datei hochladen wenn das dann einfacher ist :)


For i = 2 To last_row
Search1 = Sheets(2).Cells(i, 1)
Search2 = Sheets(2).Cells(i, 2)

For Each wksTab In Worksheets
With wksTab
If wksTab.Name = "Calculate" Or wksTab.Name = "Variablen" Then Exit For
Set rngZelle = .Columns(1).Find(Search1, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
Do
If rngZelle.Offset(0, 1) = Search2 Then
Sheets(2).Cells(i, 7) = rngZelle.Offset(0, 2) 'Ausgabe des Ergebnisses in Zelle: Zeile i, Spalte 7
Exit Do
Else
Set rngZelle = .Columns(1).FindNext(rngZelle)
End If
Loop While Not rngZelle Is Nothing And strStart <> rngZelle.Address
End If
Set rngZelle = Nothing
End With
Next wksTab
Next i



Gruß Timo

Beverly
30.07.2012, 10:52
Hi Timo,

sorry, ich dachte du beziehst dich auf das Exit innerhalb der Do-Schleife.

Ändere den Code wie folgt:
For i = 2 To 9
Search1 = Sheets(2).Cells(i, 1) 'Erster Suchbegriff in Zelle: Zeile i, Spalte 1
Search2 = Sheets(2).Cells(i, 2) 'Zweiter Suchbegriff in Zelle: Zeile i, Spalte 2
For Each wksTab In Worksheets
If wksTab.Name <> "Calculate" And wksTab.Name <> "Variablen" Then
With wksTab
Set rngZelle = .Columns(1).Find(Search1, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
Do
If rngZelle.Offset(0, 1) = Search2 Then
Sheets(2).Cells(i, 3) = rngZelle.Offset(0, 2) 'Ausgabe des Ergebnisses in Zelle: Zeile i, Spalte 3
test = rngZelle.Offset(0, 2)
Exit Do
Else
Set rngZelle = .Columns(1).FindNext(rngZelle)
End If
Loop While Not rngZelle Is Nothing And strStart <> rngZelle.Address
End If
Set rngZelle = Nothing
End With
End If
Next wksTab
Next i
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
13.08.2012, 07:24
Hallo,

ich habe mal noch eine Frage. Wie kann ich denn abfangen das Excel bei nicht gefundenen Suchoptionen (also bei der Suche) keine 0 als Ergebnis einträgt? Da es durchaus auch mal passieren kann das ein tatsächlicher Wert die Größe 0 hat.

Vielen Dank schon mal


Gruß Timo

Beverly
13.08.2012, 10:30
Hi Timo,

an welcher Stelle wird denn deiner Meinung nach 0 ausgegeben? Im Tabellenausschnitt im Beitrag #22 sind doch die Zellen C10:C18 leer, da die Begriffe aus Spalte A dieser Zeilen nicht gefunden wurden.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Timo T.
13.08.2012, 10:33
Das liegt in dem Beispiel daran das die Schleife nur bis Zeile 9 geht (glaube ich).

Ach ich sehe gerade das es mit dem Beispiel oben funktioniert, bei mir schreibt er aber 0 rein. Da muss ich mal schauen :)

Timo T.
13.08.2012, 13:18
Hab meinen Fehler gefunden, was das kleine Wort And oder Or so alles anrichten kann.

Bei der Find-Funktion von VBA wird ja bei keiner Übereinstimmung ein NOTHING zurückgegeben. Sprich die Zelle ist leer. Müsste ich dann nicht durch folgende Bedingung


If Sheets(2).Range("A2") is Nothing Then MsgBox "Alles leer"


das Abfragen können?

Oder gibt Find etwas anderes als Nothing zurück?

Beverly
13.08.2012, 16:04
Hi Timo (hier steht die Anrede im Beitrag),

(hier folgt der Text des Beitrages)
Nothing kann nur wiedergegeben werden, wenn du die Variable mit Set ermittelst. Wenn du prüfen willst, ob eine Zelle leer ist, dann musst du das so machen:
If Sheets(2).Range("A2") = "" Then MsgBox "Alles leer"

(und am Ende folgt der Gruß im Beitrag)
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>