Avatar billede bakhud Nybegynder
24. september 2015 - 20:51 Der er 2 kommentarer og
1 løsning

Excel makro

Hej alle
Jeg har nu siddet og kæmpet lidt med en makro der skal kunne gøre visse ting alt efter indhold.
Jeg har en celle med en adresse, data i den kan være forskellige giver lige et par eks. :
Lundtoftegade 54, 1 th 2400 København NV
Lundtoftegade 54, 1 -3 2400 København NV
Lundtoftegade 54, 1 th -3 2400 København NV
Lundtoftegade 54, 1 2400 København NV
Lundtoftegade 54 B, 1 2400 København NV
Min slut streng skal se sådan ud:
Lundtoftegade 54B, 1, 2400 København NV eller
Lundtoftegade 54, 1 th,-3, 2400 København NV eller
Lundtoftegade 54, 1, 2400 København NV
Det er altså kommaerne der skal sættes rigtigt. Syntes godt nok den er lidt tricky så alt hjælp er velkommen. Minus 3 bliver lavet om til Dør 3

Mvh
KayB
Avatar billede claes57 Ekspert
25. september 2015 - 09:19 #1
1) fjern kommaer
2) med instr() findes 2. mellemrum
hvis der derefter kommer et bogstav, så fjernes 2. mellemrum - og find nyt 2. mellemrum
3) med instrv() findes bagerste mellemrum
hvis der ikke er tal foran, så find næste mellemrum bagfra.
4) sæt komma ved position 2)
5) sæt komma ved position 3)
6) hvis der mellem 2) position og 3) position er '-' så erstat det med 'dør'
7) erstat evt dobbeltmellemrum med enkelt mellemrum
Avatar billede bakhud Nybegynder
25. september 2015 - 16:29 #2
Fjern komma var det første jeg gjorde men det men det er lidt omsonst. Nogle vejnavne er jo mere end 1 ord og nogle gange er der ikke sal på og andre gange kun sal(tal) og ingen th eller tv.
Syntes det er en lidt svær ting at løse så det virker på alt. men det er måske bare mig :)
Men tak for kommentar
Avatar billede bakhud Nybegynder
26. september 2015 - 15:05 #3
Nå fik klaret det. Men det er ikke køn kode men det virker :)
Her er koden hvis andre er interesseret:
Sub Komma()
Dim Vej As Variant
Dim Addr As String
Dim Vejnavn As String
Dim Lent As Integer
Dim MidAddr As String
Dim Antal As Integer
Dim Numi As Integer
Dim Tel As Integer
Antal = 0
Tel = 0
Numi = 0
Lent = 0
MidAddr = Cells(3, 4)
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
Addr = Cells(3, 2)
For a = 3 To lastRow
Addr = Cells(a, 2)
Addr = Replace(Addr, ",", " ", 1)
Addr = Replace(Addr, "-", "Dør", 1)
Vej = Split(Addr, " ")
Antal = UBound(Vej)
  For i = 0 To UBound(Vej)
  If IsNumeric(Vej(i)) Then
    If Tel = 2 Then
    If i + 2 = Antal Then
      Vejnavn = Vejnavn + Vej(i) + " " + Vej(i + 1) + " " + Vej(i + 2)
      Exit For
    Else
      Vejnavn = Vejnavn + Vej(i) + " " + Vej(i + 1)
    End If
   
    Tel = Tel + 1
    i = i + 1
    End If
    If Tel = 1 Then
    If IsNumeric(Vej(i + 1)) Then
      Vejnavn = Vejnavn + Vej(i) + ", "
    Else
      If Len(Vej(i)) = 4 Then
      Vejnavn = Vejnavn + "," + Vej(i) + " " + Vej(i + 1)
      Else
      Vejnavn = Vejnavn + Vej(i) + " " + Vej(i + 1) + ", "
      End If
     
      i = i + 1
    End If
   
    Tel = Tel + 1
   
    End If
    If Tel = 0 Then
    If Not IsNumeric(Vej(i + 1)) And Len(Vej(i + 1)) = 1 Then
      Vejnavn = Vejnavn + Vej(i) + Vej(i + 1) + ", "
      i = i + 1
    Else
      Vejnavn = Vejnavn + Vej(i) + ", "
    End If
   
    Tel = Tel + 1
    End If
  Else
 
    Vejnavn = Vejnavn + Vej(i) + " "
 
  End If
  Next
  Cells(a, 2).Value = Vejnavn
  For k = 0 To UBound(Vej)
  Vej(k) = ""
  Next
  Vejnavn = ""
  Tel = 0
Next
End Sub
Mangler kun hvis der ikke er (-) minus tegn foran dør nummer.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester