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

Excel VBA och kommatecken ","

Rekommendera Poster

Hej!

Jag undrar ifall det är något känt problem med Excels VBA och kommatecken?

Jag ska förklara:

 

Sub Makro1()
'
' Makro1 Makro
'
' Kortkommando: Ctrl+s
'
ActiveSheet.Range("A1", "F100").Select
       Selection.Replace What:=",", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
       Selection.Replace What:="styck", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
       Selection.Replace What:="kilo", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
       Selection.Replace What:="meter", Replacement:="", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
End Sub

 

Detta makro är från början ett inspelat Makro och dess enda syfte är att ta bort specifika ord i området A1:F100. Det ska byta ut alla "meter" "kilo" "styck" OCH tecknet "," mot inget ("").

 

Allt funkar skitbra FÖRUTOM att den missar VISSA kommatecken inom området? Om jag gör en manuell "replace" så tar den bort resterande. Om jag spelar in det momentet och kör det inspelade makrot så missar den.

 

Vad är galet?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Lite uppstyrd kod, selection är inge bra verktyg. Adressera alltid så gått det går:

Sub Makro1()
'
' Makro1 Makro
'
' Kortkommando: Ctrl+s
'
With Blad1.Range("A1", "F100")
	.Replace What:=",", Replacement:="", LookAt:=xlPart, _
	SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
	ReplaceFormat:=False
	.Replace What:="styck", Replacement:="", LookAt:=xlPart, _
	SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
	ReplaceFormat:=False
	.Replace What:="kilo", Replacement:="", LookAt:=xlPart, _
	SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
	ReplaceFormat:=False
	.Replace What:="meter", Replacement:="", LookAt:=xlPart, _
	SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
	ReplaceFormat:=False
End With
End Sub

 

Problemet ligger i att det troligen är tal du söker igenom.

Dvs söker du igenom enligt metoden ovan följande värde

1,2

1,2,2

kommer resultatet var

1,2

122

eftersom den senare tolkas som text och den förra som tal.

 

Lösning? Jo, VBA jobbar med "." som decimalseparator. Om du nu inte har några andra punkter i cellerna du vill bevara är det bara att lägga till en ersättningssatts till:

 .Replace What:=".", Replacement:="", LookAt:=xlPart, _
	SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
	ReplaceFormat:=False

Duger denna lösning?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

^^

 

Jo, jag vet jag inte ska använda select, jag ville bara försäkra mig om att det inte var jag själv som ställde till det, därför har jag använt Excels "automatiska" makrospråk.

 

Tyvärr fungerar inte din lösning, men du har rätt i att på de ställen det inte fungerar förekommer det fler än ett komma per string.

 

Formatet är "general" så därför borde excel kunna ta bort kommatecknen trodde jag.

Kanske ska jag ställa in alla celler som text först? Jag kan enkelt konvertera de celler som jag behöver till nummer igen via en *1 formel. Fast det känns lite som att det borde gå att lösa i ett enda moment.

 

Exempel.

En av cellerna innehåller:

 

'5,042,971 (avg: 210,123)'

 

Det jag gör är att ta bort kommatecknen och därefter köra =MID($B$47;1;7)*1 för att få ut summan utan parantesbiten och konvertera den till nummer. (Det är alltid ett 7 siffrigt nummer så därför fuskar jag lite). ^^

Redigerad av Axi

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Fungerar icke det? Det gör det för mig.

 

Dvs

.Replace What:="."

plockar bort kommatecken ur cell med värde 1,2 medan

 

.Replace What:=","

plockar bort komma ur cell med värde som 1,22,3, dvs text.

 

ditt exempel ovan blir helt enkelt 25042971 (avg: 210123)" efter körning av koden.

 

general-format = tal när det kan vara tal.

 

komma-punkt problemet gäller alltså om du har en dator med svensk nomenklatur.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jättemärkligt.

 

När jag gjorde om allt från scratch funkar det, men inte ens om jag copy-pastear ditt makro i en ny sub i det gamla bladet gör den rätt. Den kör, men hoppar över alla dubbelkomma ( 1,22,3,).

 

Nåväl. Jag arbetar vidare med det nya bladet helt enkelt. Tack för hjälpen. ^^

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Lägg upp ett ark där du "bevisar" att det inte fungerar så kan jag testa om det verkligen inte går att fås fungera.

 

Om du nu vill ha mer hjälp i frågan. Jag är lite nyfiken av mig, jag tittar gärna på det.

 

Vilken version av Excel förresten? Jag har testat i Excel 2007

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

Jag kör Excel 2010 beta. :blush:

Jag tror jag listat ut varför den missar, men jag trodde inte det påverkade saken.

 

Om jag kör macrot på ett blad som bara innehåller general formatterad data så går det bra.

 

De gånger det inte fungerade då hade jag först infogat två rader före rad 1 som innehöll funktioner som pekade just på de celler där macrot senare gick bet.

 

Tydligen bör jag inte hänvisa till celler före jag ersätter tecken, men jag tycker det är lite konstigt.

Redigerad av Axi

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...