Just nu i M3-nätverket
Jump to content

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


Tommy H

Recommended Posts

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

 

Link to comment
Share on other sites

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...

 

Link to comment
Share on other sites

-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]

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...