Avatar billede familienriis Nybegynder
31. marts 2007 - 16:38 Der 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.
Avatar billede excelent Ekspert
31. marts 2007 - 17:41 #1
denne fjerner blot det sidste tal

Sub Konverter()
On Error Resume Next
rk = Cells(65500, 1).End(xlUp).Row
For t = 1 To rk
Cells(t, 1) = Left(Cells(t, 1), 4)
Next
End Sub
Avatar billede familienriis Nybegynder
31. marts 2007 - 18:36 #2
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.
Avatar billede jkrons Professor
31. marts 2007 - 18:47 #3
Prøv med

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
Avatar billede excelent Ekspert
31. marts 2007 - 18:59 #4
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
Avatar billede excelent Ekspert
31. marts 2007 - 19:41 #5
denne tester kolonne A for evt. dubletter
afsluttes med CTRL+SHIFT+ENTER (obs: beregning tager få sek)

=TÆLV(A2:A10000)-SUM(SAND/TÆL.HVIS(A2:A10000;A2:A10000&""))
Avatar billede familienriis Nybegynder
31. marts 2007 - 21:47 #6
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.
Avatar billede excelent Ekspert
31. marts 2007 - 21:56 #7
Nej det kan jeg godt se problemet i, omvendt er det også noget af en opgave at rette omkring 200 tal manuelt

kunne du evt. sende en liste med konto numre vi kunne teste på
pm@madsen.tdcadsl.dk
Avatar billede kabbak Professor
31. marts 2007 - 22:17 #8
En videreudvikling af Jkrons kode

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
Avatar billede familienriis Nybegynder
31. marts 2007 - 23:18 #9
yes, den sidste sad lige i øjet.
Det var lige det jeg skulle bruge. Mange tak
Så mangler jeg bare svar :o)
Avatar billede kabbak Professor
01. april 2007 - 08:49 #10
et svar ;-))
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Capgemini Danmark A/S

Client Partner

JP/Politikens Hus

Digital Workplace Supporter