(VBA) Mit Mustern/Regex suchen
Stefan Welscher
- sonstiges
0 EKKi0 Stefan Welscher
0 Jörg
Hallo,
ich muss mich gerade etwas durch VBA quälen und bin jetzt an einem Punkt, an dem ich Regex benötigen würde um einen Teilstring auszuschneiden.
Der Quell-String ist eine Bandbreite gefolgt von der Einheit:
z.B. "1024 Kbps" oder "1 Mbps" oder "34MBit"
Ich müsste jetzt Wert und Einheit trennen und den Wert in Kilobit umrechnen, was ich in Perl ungefähr so lösen würde:
my $value=0;
if ($bandwidth=/(\d+)\s*(gb|mb|kb|b)?/i)
{
$value=$1; my $unit=$2;
if ($unit eq "gb")
{
$value*=1024*1024;
}
elsif ($unit eq "mb")
{
$value*=1024;
}
elsif ($unit eq "b")
{
$value/=1024;
}
}
Da sowohl Value als auch Unit unterschiedliche Zeichenlängen habe können kann ich die VBA-Funktionen Mid, Right, Left nicht nutzen. Mit Like kann ich zwar matchen, bekomme aber nur True oder False anstatt der Treffer zurückgeliefert.
Wie kann ich dieses eigentlich recht Simple Problem mit VBA lösen?
Besten Dank!
Mahlzeit,
ich muss mich gerade etwas durch VBA quälen und bin jetzt an einem Punkt, an dem ich Regex benötigen würde um einen Teilstring auszuschneiden.
Ich hatte mal das gleiche Problem. Hab dann nach VBA, RegExp usw. gesucht und eine entsprechende externe Komponente (sogar kostenlos) gefunden, die man z.B. als Add-In einbinden kann und die ein RegExp-Objekt zur Verfügung stellt.
Frag mich aber bitte jetzt nicht nach dem Namen - ist schon länger her. :-)
Wie kann ich dieses eigentlich recht Simple Problem mit VBA lösen?
AFAIK nicht ohne externe Tools.
MfG,
EKKi
Ich hatte mal das gleiche Problem. Hab dann nach VBA, RegExp usw. gesucht und eine entsprechende externe Komponente (sogar kostenlos) gefunden, die man z.B. als Add-In einbinden kann und die ein RegExp-Objekt zur Verfügung stellt.
Also wenn ich dieses AddIn finden würde uns es schaffen würde es zu installieren (hab ich atm noch nie gemacht...) uns der Code auch noch funktionieren würde, müsste ich dann das AddIn an jedem PC installieren, der die Excel-Tabelle nutzt?
Sollte das der Fall sein Fällt diese Lösung leider raus.... :(
Mahlzeit,
Also wenn ich dieses AddIn finden würde uns es schaffen würde es zu installieren (hab ich atm noch nie gemacht...) uns der Code auch noch funktionieren würde, müsste ich dann das AddIn an jedem PC installieren, der die Excel-Tabelle nutzt?
Ähm, ja. Natürlich. Gehört schließlich nicht zum Standardumfang von Excel.
Sollte das der Fall sein Fällt diese Lösung leider raus.... :(
Das ist natürlich schade. Aber von Haus aus kennt VBA nun mal keine regulären Ausdrücke und auch nichts Vergleichbares (ich lasse mich aber gerne eines Besseren belehren).
MfG,
EKKi
(ich lasse mich aber gerne eines Besseren belehren).
Hab noch ein wenig gesucht...und einen Forumeintrag gefunden:
http://www.office-loesung.de/ftopic83090_0_0_asc.php
VBA kann wohl doch RegEx:
Function get_bandwidth_kbit(ByVal bw) As String
Dim unit As String
Dim objRegEx As Object, objMatchCollection As Object, objMatch As Object
Dim a As Integer
Set RegEx = CreateObject("vbscript.regexp")
RegEx.Global = True
RegEx.IgnoreCase = True
RegEx.MultiLine = False
RegEx.Pattern = "([0-9]+)\s*(gb|mb|kb|b)?"
Set MatchAll = RegEx.Execute(bw)
Set Match = MatchAll(0)
If Match.submatches.Count > 0 Then
bw = Match.submatches(0)
If Match.submatches.Count >= 1 Then
unit = UCase(Match.submatches(1))
If unit = "GB" Then
bw = bw * 1024 * 1024
ElseIf unit = "MB" Then
bw = bw * 1024
ElseIf unit = "B" Then
bw = bw / 1024
End If
End If
Else
bw = 0
End If
Set RegEx = Nothing
Set MatchAll = Nothing
Set Match = Nothing
get_bandwidth_kbit = bw
End Function
Könnte zwar kürzer sein, aber funktioniert!
Thx@all!
Hello,
Sollte das der Fall sein Fällt diese Lösung leider raus.... :(
...dann bleibt dir nur schneiden mittels Left/Right und Len, oder eben ein Split und anschließende Analyse der Teile.
MfG
Rouven
Hi,
z.B. "1024 Kbps" oder "1 Mbps" oder "34MBit"
wenn es sich um Excel (oder eine andere Office-Anwendung) ab der Version 2000 handelt, wäre Split() hier die einfachste Variante.
Viele Grüße
Jörg