27. februar 2003 - 11:55Der er
18 kommentarer og 3 løsninger
redigere felt med makro
Jeg har en tabel hvor der blandt andet er adressefelter i en kolonne. De adresse felter vil jeg have redigeret til kun at indeholde postnummer. således at: Personnavn#vejnavn 11#2222 bynavn bliver til: 2222 #=vist som en firkant i excel regnearket, repræsentere linieskift.
Er der nogen der hen idee til hvordan det løses nemmest.
Sub Makro2()
Dim strHolder As String Dim s, s1, q, x, z, sVærdi
sVærdi = Selection.Value sVærdi = Trim(sVærdi) q = Len(sVærdi) For x = 1 To q i strengen If Mid(sVærdi, x, 1) = "." Then z = x Next x z = q - z sVærdi = Right(sVærdi, z) Selection.Value = sVærdi ActiveCell.Offset(1, 0).Range("A1").Select End Sub
Nope.. Hvis jeg nu kan løbe strengen igenne bagfra, udtrække de 4 første tal der findes - og indsætte dem i omvendt rækkefølge. Så det bare lige hvordan jeg gør det?
Den her returnere tallene, men bare fra starten af i stedet for slutningen.
sVærdi = Selection.Value sVærdi = Trim(sVærdi) 'fjerner leading og trailing spaces q = Len(sVærdi)
For x = 1 To q Select Case Mid(sVærdi, x, 1) Case 1: u = u + Mid(sVærdi, x, 1) Case 2: u = u + Mid(sVærdi, x, 1) Case 3: u = u + Mid(sVærdi, x, 1) Case 4: u = u + Mid(sVærdi, x, 1) Case 5: u = u + Mid(sVærdi, x, 1) Case 6: u = u + Mid(sVærdi, x, 1) Case 7: u = u + Mid(sVærdi, x, 1) Case 8: u = u + Mid(sVærdi, x, 1) Case 9: u = u + Mid(sVærdi, x, 1) Case 0: u = u + Mid(sVærdi, x, 1) End Select Next x Selection.Value = u
eller som makro hvor hele adressen udskiftes med postnr og der flyttes til næste celle.
Sub postnr1() Dim t As Long Dim s As String s = ActiveCell.Value t = InStrRev(s, Chr(10)) + 1 ActiveCell.Value = Mid(s, t, 4) ActiveCell.Offset(1, 0).Select End Sub
Hej bak Jaeh... det kan du godt have ret i. Subens virke forudsættes af hvorvidt linieskiftet er det ene (CrLf) eller det andet (Lf) i den aktuelle celle. Men det kan uden videre rettes ved denne sub...
sub TrimToZip() Dim lRv As Long Dim sString As String
Denne her virker til formålet - den er simpel, ikke særlig køn og har en temlig dårlig tidskompleksitet, men det er kun 3000-4000 rækker den skal igennem, så det går.
Sub Makro1() While ActiveCell.Offset(0, -2).Range("A1") <> "" ActiveCell.Offset(0, -2).Range("A1").Select Selection.Copy ActiveCell.Offset(0, 2).Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False
Dim strHolder As String Dim a, b, s, s1, q, x, z, sVærdi a = 1
sVærdi = Selection.Value sVærdi = Trim(sVærdi) q = Len(sVærdi) For x = 1 To q E = Mid(sVærdi, x, 1) Select Case Mid(sVærdi, x, 1) Case 1: u = u + E Case 2: u = u + E Case 3: u = u + E Case 4: u = u + E Case 5: u = u + E Case 6: u = u + E Case 7: u = u + E Case 8: u = u + E Case 9: u = u + E Case 0: u = u + E End Select Next x u = Right(u, 4) Selection.Value = u ActiveCell.Offset(1, 0).Range("A1").Select Wend End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.