Just nu i M3-nätverket
Gå till innehåll

Omvandla "6MM" till "6mm" i VBA


Tommy H

Rekommendera Poster

Hej!

 

Lite Versalstrul i Excel listor.

Jag skulle försöka få till en kod snutt som omvandlar millimeter enligt följande:

Om dom 2 sista tecknen är "MM" och det 3:e tecknet från slutet är en siffra omvandla då "MM" till "mm". (t.ex 6MM som skall bli 6mm)

 

Alt. så kan man ju tänka sig att dom 2 sista tecknen är "MM" och att det saknas tecken efter, då skall det bli "mm".

 

(jag kann ju inte bara omvandla "MM" till "mm" i vilken sträng som helst för det ingår ju "MM" i många vanliga ord)

 

Hur gör man?

 

//TH

 

Länk till kommentar
Dela på andra webbplatser

Function TillMilli(str As String) As String
   Dim i As Integer
   i = Len(str)
   TillMilli = str
   On Error Resume Next
   Dim x As Integer
   x = -99
   x = CInt(Mid(str, i - 2, 1))
   If StrComp(Mid(str, i - 1, 2), "MM", vbTextCompare) = 0 And x <> -99 Then

       TillMilli = Mid(str, 1, i - 2) & "mm"
   End If 
End Function

 

är ett sätt...

 

Länk till kommentar
Dela på andra webbplatser

-99 blir kvar i variabeln om omvandlingen till integer fallerar.

On Error Resume Next ger att den hoppar till nästa rad om omvandlingen fallerar.

 

Iochmed att vi försöker omvandla enbart ett tecken till tal så kan det värdet egentligen inte vara annat än ett tal mellan 0 och 9 men -99 känns som ett bra tal att testa emot men skulle kunna vara vilket värde som helst utanför det givna intervallet.

 

ed: tack för poängen, det var poäng 1500 för min del :)

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-09-24 13:34:43 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Här får du en variant som dels är kortare men även gör en fullständigare kontroll (ex. skall ju inte abc3MM bli abc3mm, eller hur?), dvs. den kontrollerar att de enbart är siffror innan MM tillbaka till ordets början.

Dessutom ersätter denna funktion ett eller flera ord i en mening, ex. skulle "jdsf 234MM dfd j3MM 3JMM 3MM" ersättas med "jdsf 234mm dfd j3MM 3JMM 3MM"

 

Function TillMilli(s As String) As String
   Set o = New RegExp
   o.Pattern = "\b(\d+)MM"
   o.IgnoreCase = False
   o.Global = True
   TillMilli = o.Replace(s, "$1mm")
End Function

 

För att den skall fungera behöver du ange en referens till RegExp-objektet . Välj "Microsoft VBScript Regular Expressions 5.5" i Tools->References i VBA-editorn.

 

Länk till kommentar
Dela på andra webbplatser

Oj, här var det mycket klurigheter...

Nå,väl det fungerar säker utmärkt.

Skall testköra i kväll.

 

Tackar för det!

 

//TH

 

Länk till kommentar
Dela på andra webbplatser

RegExp - ett kod-mysterium jag aldrig knäckt :)

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...