# Excel Makro VB



## Kunibert4570 (1. Februar 2007)

Ich hab n Problem, ich hab in einer Zelle einen String bestehend aus Text und Zahlen und ich möchte gerne die Zahlen rausfiltern und auf Variablen legen und keinen Plan wie es gehen könnte.

MfG Kunibert4570

PS: vielen Dank schon mal für eure Hilfe.


----------



## DrSoong (1. Februar 2007)

Wie sieht denn so ein Zelleninhalt genau aus und wie soll das ganze in Variablen verarbeitet werden?


Der Doc!


----------



## Kunibert4570 (1. Februar 2007)

"Der Angreifer tritt mit 769845 Holz, 303584 Stein, 298095 Nahrung und 298435 Metall den Heimweg an."			

Das wäre der Zelleninhalt und ich müsste halt die einzelnen Zahlen auf verschiedene Variablen legen um weitere Berechnungen durchführen zu können.
Es würde mit Parse gehen, wenn die Zahlenwerte immer die selbe Länge hätten, was aber leider nicht der Fall ist.

MfG Kunibert4570


----------



## DrSoong (1. Februar 2007)

Meiner Meinung nach geht es am einfachsten mit einer InStr-Suche, folgender Code funktioniert:

Folgende Prozedur demonstriert den Aufruf der Funktion:

```
Sub GetNumbers()
 'Dimensionieren
 Dim vCell$
 'Zeile einlesen, hier steht mein Text in A1
 vCell = ActiveSheet.Cells(1, 1).Value
 'Aufruf der einzelnen Gegenstände
 Holz = GetWerte(vCell, "Holz")
 Stein = GetWerte(vCell, "Stein")
 Nahrung = GetWerte(vCell, "Nahrung")
 Metall = GetWerte(vCell, "Metall")
 'Ich geb das ganze hier per MessageBox aus
 MsgBox "Holz: " & Holz & vbNewLine & "Stein: " & Stein & vbNewLine & _
  "Nahrung: " & Nahrung & vbNewLine & "Metall: " & Metall
End Sub
```

Hier die eigentliche Funktion, die den Wert ausliest und zurückgibt:

```
'Die eigentliche Ermittlung der Werte
'Die Funktion erwartet folgende Werte:
'vCell: Der gesamte, zu durchsuchende Text
'vStoff: Nach welchem Gegenstand wird gesucht
Function GetWerte(ByVal vCell$, ByVal vStoff$)
 'Dimensionierung
 Dim sStelle%, pStelle%
 'Ermittle, an welcher Stelle der Gegenstand als Wort steht
 sStelle = InStr(vCell, vStoff) - 1
 'Wenn vorhanden
 If sStelle > 0 Then
  'Leerzeichen beachten
  If Mid(vCell, sStelle, 1) = Chr(32) Then sStelle = sStelle - 1
  'Nach dem Leerzeichen vor der Zahl suchen
  pStelle = InStrRev(vCell, " ", sStelle) + 1
  'und die Zahl auslesen und als Rückgabewert setzen
  GetWerte = Mid(vCell, pStelle, sStelle - pStelle + 1)
 Else:
  'Rückgabewert 0 (Nicht vorhanden)
  GetWerte = 0
 End If
End Function
```

Getestet und funktioniert, zumindest nach deinem Vorgabetext. Lässt sich aber leicht an deine Bedürfnisse anpassen, Code sollte gut auskommentiert sein. Bitte um Rückmeldung, ob er passt.


Der Doc!


----------



## Kunibert4570 (4. Februar 2007)

Besten Dank für die Hilfe, ich hab bisher keine Zeit gehabt, aber werde es morgen mal testen und dann meld ich mich zurück, wie es gelaufen ist.

MfG Kunibert


----------



## mutterholzbein (18. Februar 2007)

Hi @ll,
schön mal bei tutorials.de zu posten...!
Ich hab ne schnel Frage und hoffe Ihr könnts mir da weiter helfen..
ich such nur ein kleines Tut. über VB... (nix spezielles, einfach nur Syntaktische Grundregeln- o.ä., mit kleinen Bsp. ...). wäre echt schmoof wenn des recht schnell geschehen könnte (galileodesign.de hab ich schon durch!-nüx was ich suche) ...

Ganz kurz zur sache:
ich habe ne rel. leichte Aufgabe zu lösen. Es geht dabei um Makros in Excel... bin aber eigentl. C/C++ Coder und habe deshalb nicht alzu viel Plan von VB...(bis auf kleine grundlegende Dinge) und brauche deswegen (schnell) ein OFFLINE Tutorial für Zuhause (PDF od. HTML)! Wenn mir dabei jemand ein Link schicken könnte, wäre mir schon sehr geholfen 

Danke im Voraus

muddahn


----------

