31. marts 2007 - 16:38Der er
9 kommentarer og 1 løsning
Udføres et regnestykke på alle linier hvor der er tal
Jeg har en excelfil hvor jeg har importeret data fra en ekstern kilde.
Filen består af: A B C D E Kontonr. tekst beløb andet andet
Der er fra 100 til 10.000 linier i en fil.
Når jeg har importeret filen er kontonr. 5-cifret (eks. 10004), dem vil jeg gerne have konveretert til en 4-cifret konto Da det 5-ciffer som udgangspunkt ALTID er et firtal, skal der laves et identisk regnstykke på alle linier i kolonne A.
Tallet i kol. A skal fratrækkes 4 og derefter devideres med 10. Eks.
10004 bliver til = (10004 - 4) / 10 = 1000 25204 bliver til = (25204 - 4) / 10 = 2520 osv.
Når dette er løst udvider jeg spørgsmålet, da det sidste ciffer desværre ikke altid er et 5 tal, men det tager jeg i et nyt spørgsmål, når ovenstående problem er løst.
Mange tak, men nu kommer forklaringen på hvorfor jeg ville lave divideringen.
Det er ikke alle tal der ende på 4. 95% ender på 4 og de resterende helt vilkårligt ender på et andet tal.
Kan man få makroen til at kontrollere om alle tal ender på fire. Hvis de gør det skal det sidste ciffer slettes, hvis det ikke ender på 4 skal makroen f.eks. sige: Konto 10005 ender ikke på fire hvad skal den konveretes til? Hvorefter man skal have mulighed for at skrive et tal som det oprindelige tal så bliver ændret til.
Dette skyldes at jeg idag har 2 unikke konti på f.eks. 10004 konto1 og 10005 konto2 Hvis vi bare fjerner det sidste ciffer vil de 2 konti smelte sammen til en konto, nemlig 1000. Det må ikke ske.
Da jeg importerer en MASSE poster kan konto 10005 fremkomme 200 gange i den samme fil, så når makroen har spurgt om hvilket nyt kontonr. vi vil bruge, så skal den ændre alle linier med konto 10005 til det tal man har valgt f.eks. 1001
Når den så har rettet alle konti der ikke ender på 5, så skal den fjerne 4 tallet i de sidste konti, så der kun er 4 cifre i alle kontonr.
Sub Konverter() On Error Resume Next rw = Cells(65500, 1).End(xlUp).Row For Each c In Range("a1:a" & rw).Cells If Right(c.Value, 1) = 4 Then c.Value = Left(c.Value, 4) Else c.Value = InputBox("Hvad skal værdien være?") End If Next c End Sub
man kunne også lægge et tal til alle værdier som ikke ender på 4, men om det gir dubletter ved jeg ikke
Sub Konverter() On Error Resume Next rk = Cells(65500, 1).End(xlUp).Row: tal = 1 For t = 1 To rk If Right(Cells(t, 1), 1) = 4 Then Cells(t, 1) = Left(Cells(t, 1), 4) Else Cells(t, 1) = Left(Cells(t, 1), 4) + tal: tal = tal + 1 End If Next End Sub
Jkrons: Din konverter har noget af det rigtige: Den spørger om " hvad skal værdien være?" Men i den boks der spørger om hvilken værdi det skal være skal der stå? Kontonr. 13255 er ikke gyldig. Hvilket kontonr skal nummeret konverteres til.? hvilken værdi skal den være (altså vi se hvilket kontonr. der IKKE virker)
Som koden er nu så spørger den 5 gange hvis kontonr. 13255 står 5 gange i alle mine rækker. Når man en gang har valgt at 13255 = 1325 skal den konvertere alle 13255 på samme måde. Desuden skal den kun lave kontrollen på kontonumre som har MERE end 4 cifre.
Excelent: Det duer desvære ikke automatisk at lægge et tal til, da man selv skal kunne vælge nummeret. Dette skyldes at der i den pågældende konvertering eller i tidligere konverteringer kanb være linier som bruger dette nr. feks.
61055 bliver til 6106 61064 bliver til 6106 og så har vi dubletter.
Sub Konverter() On Error Resume Next rw = Cells(65500, 1).End(xlUp).Row For Each C In Range("a1:a" & rw).Cells If Len(C) > 4 Then If Right(C.Value, 1) = 4 Then C.Value = Left(C.Value, 4) Else NytNummer = InputBox("Hvad skal værdien " & C.Value & " være?") Range("a1:a" & rw).Replace What:=C.Value, Replacement:=NytNummer, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End If End If Next C 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.