Toon posts:

[EXCEL/MACRO] Macro alleen uitvoeren op 2 kolommen

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een dillema als Excel-n00b :(
Ik heb met veel moeite een macro in de vb-editor kunnen schrijven.
Dit macro moet teksten (in dit geval inlognamen van users) omzetten naar nummers (id's uit een database). Dat doet ie ook, maar hij vervangt in heel mijn excel-sheet de afkortingen door nummers, niet geheel makkelijk, zeg maar...

Dit is mijn macro:
code:
1
2
3
4
5
6
7
8
9
Sub ChgInfo()
Dim Sht As Worksheet
For Each Sht In Worksheets
    Sht.Cells.Replace What:="JV", _ 
        Replacement:="3", LookAt:=xlPart, MatchCase:=False
     Sht.Cells.Replace What:="MF", _ 
        Replacement:="4", LookAt:=xlPart, MatchCase:=False
Next
End Sub


Kan iemand mij vertellen of ik deze macro ook op twee aparte kolommen (C en K) kan doen?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ja.
Kijk even naar:
code:
1
sht.cells.replace

Je voert een replace uit op alle cells in sht. Dat zou je bv kunnen veranderen in sht.range("C:C"). Kijk even naar het range object in de help :).

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Niesje schreef op maandag 20 maart 2006 @ 14:00:
Ja.
Kijk even naar:
code:
1
sht.cells.replace

Je voert een replace uit op alle cells in sht. Dat zou je bv kunnen veranderen in sht.range("C:C"). Kijk even naar het range object in de help :).
Held! :)

Moet het helaas wel met een tweede pagina doen waar alle macro's in komen, want het bestandje waar de gebruiker in werkt is een CSV :(

Verwijderd

Topicstarter
Het was hem toch niet helemaal :(
code:
1
2
3
4
5
6
7
8
9
Sub ChgInfo()
Dim Sht As Worksheet
For Each Sht In Worksheets
    Sht.Range("C2:C9999", "K2:K999").Cells.Replace What:="JV", _ 
        Replacement:="3", LookAt:=xlPart, MatchCase:=False
     Sht.Range("C2:C9999", "K2:K999").Cells.Replace What:="MF", _ 
        Replacement:="4", LookAt:=xlPart, MatchCase:=False
Next
End Sub


Gaat dus alsnog in de hele worksheet de letters vervangen :(
Wat doe ik fout?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op dinsdag 21 maart 2006 @ 10:19:
[..]
Gaat dus alsnog in de hele worksheet de letters vervangen :(
Dat zal wel meevallen. Hij vervangt alleen binnen het bereik C2:K999
Wat doe ik fout?
Niet doen wat ik schrijf: even in de help kijken naar 'range'
range(linksboven,rechtsonder) geeft als resultaat alles van linksboven tot en met rechtsonder.
Wat je zoekt is union(range1,range2) :) en daar laat je weer je replace op los. .cells mag je trouwens weglaten, dat geeft de range van de range terug, en doet dus niks.
Cell1 Variant, vereist voor Syntaxis 1. De naam van het bereik. Dit moet een verwijzing zijn in de taal van de macro en met het A1-verwijzingstype. De verwijzing mag een bereikoperator (een dubbele punt), de doorsnede-operator (een spatie) of de verenigingsoperator (een komma) bevatten. Ook dollartekens zijn toegestaan, maar die worden genegeerd. U kunt een lokaal gedefinieerde naam in elk onderdeel van het bereik gebruiken. Als u een naam gebruikt, wordt aangenomen dat die naam in de taal van de macro staat.

Variant, vereist voor Syntaxis 2. De cel in de linkerbovenhoek van het bereik. Elk argument mag een Range-object zijn dat een enkele cel (of een volledige rij of kolom) bevat, of een tekenreeks waarin een enkele cel wordt aangegeven in de taal van de macro

Cell1, Cell2 Variant, optioneel. De cellen in de linkerbovenhoek en rechterbenedenhoek van het bereik. Elk argument mag een Range-object zijn dat een enkele cel (of een volledige rij of kolom) bevat, of een tekenreeks waarin een enkele cel wordt aangegeven in de taal van de macro
maw:
range("A:A,D:D") = kolom A en Kolom D
range("A:C C:F")=kolom C
range("A:A","D:D")=kolom A t/m D

[ Voor 50% gewijzigd door Lustucru op 21-03-2006 11:17 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Niesje schreef op dinsdag 21 maart 2006 @ 10:54:
[...]

Dat zal wel meevallen. Hij vervangt alleen binnen het bereik C2:K999
[...]

Niet doen wat ik schrijf: even in de help kijken naar 'range'
Ongeduld is mits gewassen ook best een schone zaak :P
range(linksboven,rechtsonder) geeft als resultaat alles van linksboven tot en met rechtsonder.
Wat je zoekt is union(range1,range2) :) en daar laat je weer je replace op los. .cells mag je trouwens weglaten, dat geeft de range van de range terug, en doet dus niks.
heb het even anders gedaan :+
Heb even een macro opgenomen en deze bekeken, levert het volgende op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Dim Sht As Worksheet
Range("C2:C3,K2:K3").Select
For Each Sht In Worksheets
    Selection.Replace What:="JV", _
        Replacement:="3", LookAt:=xlPart, MatchCase:=False
     Selection.Replace What:="MF", _
        Replacement:="4", LookAt:=xlPart, MatchCase:=False
     Selection.Replace What:="AVV", _
        Replacement:="8", LookAt:=xlPart, MatchCase:=False
Next
'
End Sub


Deze doet wat /me precies wil :)
Misschien niet de meest nette oplossing, maar ala :D

[ Voor 15% gewijzigd door Verwijderd op 21-03-2006 11:09 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Mmm, dat past alleen het actieve blad aan :)
Lijkt me toch makkelijker om even wat "" weg te halen in je eerste stukje vba :) (zie mijn edit)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Niesje schreef op dinsdag 21 maart 2006 @ 11:20:
Mmm, dat past alleen het actieve blad aan :)
Lijkt me toch makkelijker om even wat "" weg te halen in je eerste stukje vba :) (zie mijn edit)
Snap wat je bedoelt, maar het bestand bestaat uit slechts 1 blad, dus ik ben al heel ver op weg nu :)
Pagina: 1