/ Forside / Teknologi / Administrative / MS-Office / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
MS-Office
#NavnPoint
sion 18709
refi 14474
Klaudi 9389
Rosco40 5695
berpox 5456
dk 5398
webnoob 4919
Benjamin... 4870
o.v.n. 4637
10  EXTERMINA.. 4373
Excel2000: Søg/erstat via VBA-kode
Fra : Lennart Hansen


Dato : 06-03-06 17:02

Hej

Jeg ønsker at finde og erstatte alle celler i Kolonne B, der indeholder 2
mellemrum:
Fx. 1. 78 til 1,78

Det lykkes fint med koden:

Columns("B:B").Select
Selection.Find(What:=" ", After:=ActiveCell, LookIn:=xlValues, LookAt:=
_
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext,
MatchCase:= _
False).Activate
ActiveCell.Replace What:=ActiveCell, Replacement:=Val(ActiveCell),
LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=False

Men hvordan får jeg den til at gennemløbe hele kolonnen og IKKE bare stoppe
når den har løst den første den møder. Jeg kender aldrig antallet af celler
i kolonnen, før arket er indlæst.

Gentager jeg kørslen, får jeg en Runtime-error: 91.

Har forsøgt med Range og ForToNext ... men desværre med samme resultat.

Er der en 'haj' til Excel der kan gennemskue dette problem.

På forhånd tak.
L. Hansen



 
 
Joergen Bondesen (06-03-2006)
Kommentar
Fra : Joergen Bondesen


Dato : 06-03-06 17:31

Hej Lennart

Måske nedenstående kan bruges?

Option Explicit

Sub replaceDot2spToComma()
'Joergen Bondesen, 20060306
'1. 74 => 1,74 and digits
'1. 40 => 1,4 and digits

Dim rrange As Range
Dim cell As Range
Dim lastrow As String

Application.ScreenUpdating = False

lastrow = Cells(Rows.Count, 2).End(xlUp).Row

Set rrange = ActiveSheet.Range("B1:B" & lastrow)

For Each cell In rrange
With cell
.Value = Str(Replace(cell.Value, ". ", ","))
'// digits
.Value = .Value * 1
'// format
.NumberFormat = "0.00"
End With
Next cell

Set rrange = Nothing
End Sub



--
Med venlig hilsen
Jørgen Bondesen


"Lennart Hansen" <lennart@gta.dk> wrote in message
news:440c5cfc$0$211$edfadb0f@dread16.news.tele.dk...
> Hej
>
> Jeg ønsker at finde og erstatte alle celler i Kolonne B, der indeholder 2
> mellemrum:
> Fx. 1. 78 til 1,78
>
> Det lykkes fint med koden:
>
> Columns("B:B").Select
> Selection.Find(What:=" ", After:=ActiveCell, LookIn:=xlValues,
> LookAt:= _
> xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext,
> MatchCase:= _
> False).Activate
> ActiveCell.Replace What:=ActiveCell, Replacement:=Val(ActiveCell),
> LookAt:=xlPart, _
> SearchOrder:=xlByColumns, MatchCase:=False
>
> Men hvordan får jeg den til at gennemløbe hele kolonnen og IKKE bare
> stoppe når den har løst den første den møder. Jeg kender aldrig antallet
> af celler i kolonnen, før arket er indlæst.
>
> Gentager jeg kørslen, får jeg en Runtime-error: 91.
>
> Har forsøgt med Range og ForToNext ... men desværre med samme resultat.
>
> Er der en 'haj' til Excel der kan gennemskue dette problem.
>
> På forhånd tak.
> L. Hansen
>
>



Lennart Hansen (06-03-2006)
Kommentar
Fra : Lennart Hansen


Dato : 06-03-06 20:11


"Joergen Bondesen" <bondesen@cool.dk> skrev
> Måske nedenstående kan bruges?
>
> Option Explicit
>
> Sub replaceDot2spToComma()
> 'Joergen Bondesen, 20060306
> '1. 74 => 1,74 and digits
> '1. 40 => 1,4 and digits
>
> Dim rrange As Range
> Dim cell As Range
> Dim lastrow As String
>
> Application.ScreenUpdating = False
>
> lastrow = Cells(Rows.Count, 2).End(xlUp).Row
>
> Set rrange = ActiveSheet.Range("B1:B" & lastrow)
>
> For Each cell In rrange
> With cell
> .Value = Str(Replace(cell.Value, ". ", ","))
> '// digits
> .Value = .Value * 1
> '// format
> .NumberFormat = "0.00"
> End With
> Next cell
>
> Set rrange = Nothing
> End Sub
>
>
>
> --
> Med venlig hilsen
> Jørgen Bondesen
>

Perfekt! Det virker nydeligt.
Tusind tak for den fine hjælp.

Desværre dukkede 2 celler op længere nede i kolonnen med kun eet mellemrum:
fx. 45. 257
Kan din fine rutine udvides/tilpasses så den 'fanger' begge varianter: 1
mellemrum & 2 mellemrum?
(3 eller flere mellemrum kan IKKE forekomme).

Men du skal ihvertfald have tak.

Mvh, Lennart



Joergen Bondesen (06-03-2006)
Kommentar
Fra : Joergen Bondesen


Dato : 06-03-06 20:44

Hej Lennart

> (3 eller flere mellemrum kan IKKE forekomme).
Det er godt med dig.
og 1.23 kan heller ikke, vel?
Jeg har tilladt mig at tage højde for det hele.
Du tester og vender tilbage.

> fx. 45. 257
Er min formatering med 2 decimaler ok?
eller skal vi undgå formatering


Option Explicit

Sub replaceDot2spToComma()
'Joergen Bondesen, 20060306
'1.74 => 1,74 and digits
'1. any number of spaces 40 => 1,40 and digits

Dim rrange As Range
Dim lastrow As String
Dim cell As Range
Dim sprem As String

Application.ScreenUpdating = False

lastrow = Cells(Rows.Count, 2).End(xlUp).Row

Set rrange = ActiveSheet.Range("B1:B" & lastrow)

For Each cell In rrange
With cell

'// Remove Space
sprem = CStr(Replace(.Value, " ", ""))

'// dot 2 comma
.Value = Str(Replace(sprem, ".", ","))

'// digits
.Value = .Value * 1

'// format
.NumberFormat = "0.00"
End With
Next cell

Set rrange = Nothing
End Sub

--
Med venlig hilsen
Jørgen Bondesen


"Lennart Hansen" <lennart@gta.dk> wrote in message
news:440c8951$0$99989$edfadb0f@dread16.news.tele.dk...
>
> "Joergen Bondesen" <bondesen@cool.dk> skrev
>> Måske nedenstående kan bruges?
>>
>> Option Explicit
>>
>> Sub replaceDot2spToComma()
>> 'Joergen Bondesen, 20060306
>> '1. 74 => 1,74 and digits
>> '1. 40 => 1,4 and digits
>>
>> Dim rrange As Range
>> Dim cell As Range
>> Dim lastrow As String
>>
>> Application.ScreenUpdating = False
>>
>> lastrow = Cells(Rows.Count, 2).End(xlUp).Row
>>
>> Set rrange = ActiveSheet.Range("B1:B" & lastrow)
>>
>> For Each cell In rrange
>> With cell
>> .Value = Str(Replace(cell.Value, ". ", ","))
>> '// digits
>> .Value = .Value * 1
>> '// format
>> .NumberFormat = "0.00"
>> End With
>> Next cell
>>
>> Set rrange = Nothing
>> End Sub
>>
>>
>>
>> --
>> Med venlig hilsen
>> Jørgen Bondesen
>>
>
> Perfekt! Det virker nydeligt.
> Tusind tak for den fine hjælp.
>
> Desværre dukkede 2 celler op længere nede i kolonnen med kun eet
> mellemrum: fx. 45. 257
> Kan din fine rutine udvides/tilpasses så den 'fanger' begge varianter: 1
> mellemrum & 2 mellemrum?
> (3 eller flere mellemrum kan IKKE forekomme).
>
> Men du skal ihvertfald have tak.
>
> Mvh, Lennart
>



Lennart Hansen (06-03-2006)
Kommentar
Fra : Lennart Hansen


Dato : 06-03-06 21:25


"Joergen Bondesen" <bondesen@cool.dk> skrev
> Hej Lennart
>
>> (3 eller flere mellemrum kan IKKE forekomme).
> Det er godt med dig.
> og 1.23 kan heller ikke, vel?
> Jeg har tilladt mig at tage højde for det hele.
> Du tester og vender tilbage.
Hej Jørgen

Den sidder lige i øjet. Alletiders!

>
>> fx. 45. 257
> Er min formatering med 2 decimaler ok?
> eller skal vi undgå formatering
>

Jeg har udkommenteret .NumberFormat = "0.00",
da antal af decimaler varierer meget.

Jeg vil lige undersøge om værdierne, der fejlagtigt indeholder spaces, skal
erstattes af 0 (nuller).
Data er fra en controller i køretøjer, så måske skal værdierne kasseres hvis
de indeholder spaces.

Mange tak for den hurtige og effektive hjælp.



Leo Heuser (06-03-2006)
Kommentar
Fra : Leo Heuser


Dato : 06-03-06 21:19

"Lennart Hansen" <lennart@gta.dk> skrev i en meddelelse
news:440c8951$0$99989$edfadb0f@dread16.news.tele.dk...
>
> "Joergen Bondesen" <bondesen@cool.dk> skrev
>> Måske nedenstående kan bruges?
>>
>> Option Explicit
>>
>> Sub replaceDot2spToComma()
>> 'Joergen Bondesen, 20060306
>> '1. 74 => 1,74 and digits
>> '1. 40 => 1,4 and digits
>>
>> Dim rrange As Range
>> Dim cell As Range
>> Dim lastrow As String
>>
>> Application.ScreenUpdating = False
>>
>> lastrow = Cells(Rows.Count, 2).End(xlUp).Row
>>
>> Set rrange = ActiveSheet.Range("B1:B" & lastrow)
>>
>> For Each cell In rrange
>> With cell
>> .Value = Str(Replace(cell.Value, ". ", ","))
>> '// digits
>> .Value = .Value * 1
>> '// format
>> .NumberFormat = "0.00"
>> End With
>> Next cell
>>
>> Set rrange = Nothing
>> End Sub
>>
>>
>>
>> --
>> Med venlig hilsen
>> Jørgen Bondesen
>>
>
> Perfekt! Det virker nydeligt.
> Tusind tak for den fine hjælp.
>
> Desværre dukkede 2 celler op længere nede i kolonnen med kun eet
> mellemrum: fx. 45. 257
> Kan din fine rutine udvides/tilpasses så den 'fanger' begge varianter: 1
> mellemrum & 2 mellemrum?
> (3 eller flere mellemrum kan IKKE forekomme).
>
> Men du skal ihvertfald have tak.
>
> Mvh, Lennart
>

Hej Lennart

Her er en anden mulighed:

Sub DotAndSpace()
'Leo Heuser, 6-3-2006
Dim Checkrange As Range

Set Checkrange = Sheets("Ark1").Columns("A")

With Checkrange
.NumberFormat = "General"
.Replace ".", ",", lookat:=xlPart
.Replace " ", ""
.Value = .Value
End With
End Sub


--
Med venlig hilsen
Leo Heuser

Followup to newsgroup only please.




Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408189
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste