Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Nach String suchrn
#1
Hallo,
brauch mal wieder Eure Hilfe!

Fall ist folgender: Ich habe eine Liste mit den Daten, die auch entsprechend so heißt. Spalten A u. B. sind als Text, Spalten C bis G als Zahl formatiert.
Jetzt soll mir das Makro aus dem Arbeitsblatt "Analyse" einen Suchbegriff übernehmen, im Arbeitsblatt Daten, Spalte B danach suchen, und im Arbeitsblatt Analyse wieder ausgeben.

In einem anderen Makro mache ich das mit einem Datum nach folgendem Schema:


Code:
Sub Schaltfläche1_BeiKlick()

Dim Rng As Range
Dim Umsatz As String

   Umsatz = Sheets("Analyse").Range("B8").Value
   
   Set Rng = Worksheets("Daten").Range("A2:A366")
   
   Rng.Rows(Application.Match(Umsatz, Rng, -1)).Range("B1").Copy Worksheets("Analyse").Range(Cells(8, 3), Cells(8, 3))
   
End Sub

Das funktioniert auch.

Warunm nicht mit der Suche nach einem String?
Antworten Top
#2
Hallo,

zuerst, ich habe das Konzept der Frage nicht verstanden, deshalb ist die Antwort etwas allgemein.

Suchen in einem sheet geht mit:


Code:
sub iSuch()
dim rng as range
suche = "ein Wort/ eine Zahl"
set rng = columns(1).find(suche)
'weiterer Code
end sub


rng ist ein Range-Objekt mit Value/row/column usw

mfg
Antworten Top
#3
Na, das ist ja wieder was ganz anderes.

Ist schon ein bißchen verwirrend, das es in VBA so viele verschiedene Ansätze gibt.

Wie schon gesagt, habe ich ein altes Makro, in dem ich nach einem Datum in einer Liste (anderes Worksheet)suche und dann einen Zahlenwert,der sich in der gleichen Zeile, wie das Suchdatum befindet, ausgibt. Das funktioniert auch so, wie es soll.

Das sieht dort so aus:


Code:
Rng.Rows(Application.Match(suchDatum1, Rng, -1)).Range("B1").Copy Worksheets("hist.Kurse").Range(Cells(i, 5), Cells(i, 5))


Diese Methode ist mir sehr sympathisch, weil alles übersichtlich in einer Zeile steht.

In meinem neuen Makro suche ich statt nach dem Datum nach einem String, sonst ist der ganze Ablauf gleich. - und plötzlich bringt er mir die Fehlermeldung Typen unverträglich.

Liegt wahrscheinlich daran, daß ein Datum im Prinzip eine Zahl ist, und ein String eben nicht.

Also noch einmal meine Frage etwas anders formuliert: Geht das mit dem Match - Befehl überhaupt und wie muß ich den umstricken, damit er mir nach einem String sucht?
Antworten Top
#4
Hallo,

ja, den "Match"-Befehl gibt es und es ist sogar die Empfehlung, sofern man nach einem Datum suchen möchte (".Find" geht, aber nicht immer)

Viele Befehle in eine Zeile zu schreiben ist eher etwas für "Könner", es ist übersichtlicher und leichter zu debuggen, wenn der Code in mehrere Zeilen aufgeteilt wird.

Dein (altes) Makro ist zu kompliziert für mich, da überblicke ich nicht (beim Lesen) was wo gesucht und kopiert werden soll.

Wenn du schreibt (der Suchewert in Zelle yx wird in der Spalte i gesucht, schreibe ich dir einen Code.

mfg
Antworten Top
#5
Okay, versuchen wir's mal.

Ich häng nochl ein Bild von der Liste ran, in der ich suche.

Also, nach einem Begriff in der Spalte B soll gesucht werden, dann der Wert in Spalte C kopiert werden und in ein anderes Worksheet übertragen werden.

Wäre gut, wenn das auch mit einenem Zellbereich zusammenhängender Zellen funktionieren würde.


Im Voraus vielen Dank!


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#6
Hallo,
Sub Schaltfläche1_BeiKlick()

Dim Rng As Range
Dim Umsatz As String

Umsatz = CStr(Sheets("Analyse").Range("B8").Value)
Set Rng = Worksheets("Daten").Range("B2:B366")

Rng.Cells(Application.Match(Umsatz, Rng, 0), 2).Copy Worksheets("Analyse").Cells(8, 3)

End Sub
Gruß Uwe
Antworten Top
#7
...und plötzlich klappt's!

Super :18:
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste