Avatar billede peter100 Nybegynder
14. maj 2004 - 13:06 Der er 23 kommentarer og
2 løsninger

Lopslag m.m.

Hej gruppe

Jeg har et par spørgsmål som jeg håber i kan hjælpe mig med.

Det første spørgsmål drejer sig om et LOPSLAG med en strengfunktion. (Venstre)
Problemet er at LOPSLAGET søger efter værdien 2 i ark1, men den skal søge efter 002. 
Se nedenstående oversigt.

Ark2
Kolonne 1    kolonne 2
002222            LOPSLAG(VÆRDI(VENSTRE(A1;3));Ark1!A1:B2;2;FALSK)

Ark1
Kolonne 1    Kolonne 2
002            1004   

Når der er tale om en værdi kan man så få den til at medtage foranstående nuller?

Andet spørgsmål omhandler sammenkædede ark.
Jeg har en txt.fil hvor jeg ændrer indholdet af fx kolonne 2 til formatet tekst. Nu indeholder denne
udelukkende sekscifrede tal. (Eksempelvis 002200). Herefter gemmer jeg som Excel mappe
Dette ark er herefter sammenkædet med et hovedark. Problemet er nu at tallene i hovedarket ikke
indeholder de foranstående nuller.

Håber der er nogle der kan fortælle mig om ovenstående problemer kan løses eller det er noget jeg må leve med.

Peter
Avatar billede jpvj Nybegynder
14. maj 2004 - 13:09 #1
Det kan ikke være en værdi, hvis den hedder 002 - så er det en tekststreng.

Det der nok sker, er at Excel benytter dette som et tal.

Kigger lige på en løsning.
Avatar billede jpvj Nybegynder
14. maj 2004 - 13:24 #2
Prøv dette her:

Hvis du sikrer dig, at værdierne i Ark1 er sorteret, så vil nedenstående virke:

Ark2
Kolonne 1    kolonne 2
002222            LOPSLAG(A1;Ark1!A1:B2;2;SAND)

Ark1
Kolonne 1    Kolonne 2
002            1004   
003            1005
Avatar billede jkrons Professor
14. maj 2004 - 13:25 #3
Du kan bare fjerne VÆRDI fra din formel. Så burde det også virke.

LOPSLAG(VENSTRE(A1;3);Ark1!A1:B2;2;FALSK)

i hvert fald hvis tallene begge steder er indtastet som tekst.
Avatar billede jpvj Nybegynder
14. maj 2004 - 13:26 #4
Eller måske mere korrekt

Ark2
Kolonne 1    kolonne 2
002222            LOPSLAG(VENSTRE(A1;3);Ark1!A1:B2;2;FALSK)

Ark1
Kolonne 1    Kolonne 2
002            1004   
003            1005
Avatar billede jpvj Nybegynder
14. maj 2004 - 13:26 #5
jkrons> Det kom jeg faktisk også frem til - og det er den bedste løsning.
Avatar billede jkrons Professor
14. maj 2004 - 13:30 #6
Der kan så opstå det problem, at hvis A-kolonnen ser sådan ud

0022222
    123455

hvor kun det første tal er indtastet som tekst på grund af de foranstillede nuller, mens det sidste er indtastet som tal, da der ikke er foranstillede 0'er. I dette tilfælde virker peter100's egen løsning på det andet tal, mens vores giver fejl!

Det er altså nødvendigt at alle opslagstal (A-kolonnen i Ark2)  altid indtastes som tekst.
Avatar billede peter100 Nybegynder
14. maj 2004 - 14:39 #7
Problemet er at tallene ikke er tekstformat.
Jeg tager udgangspunkt i en tekstfil som jeg gemmer som excel-ark.
Dette ark er så sammenkædet med et hovedark. Når disse kæder opdateres
kommer tallene ind i hovedarket som standardformat og uden foranstillede
nuller.
Avatar billede jkrons Professor
14. maj 2004 - 14:43 #8
Hvis tallene kommer ind uden foranstillede nuller, nytter det ikke at lede efter 002. For det eksisterer jo ikke. Men du kunne måske køre en makro, der håndterede en konvertering.
Avatar billede peter100 Nybegynder
14. maj 2004 - 14:57 #9
Tænker du på en makro der via en HVIS-sætning indsætter nuller. Kan denne
samtidig konvertere til tekstformat, så man undgår at skal benytte værdi
i det senere LOPSLAG.
Avatar billede jkrons Professor
14. maj 2004 - 14:59 #10
Det var noget i den stil jeg tænkete på, ja. Men for at kunne lave den, skal jeg vide lidt mere om de tal, der kommer ind. Har de altid en fast længde, når der ikke er foranstillede 0'er. eller skal de have en fast længde MED foranstillede nuller.
Avatar billede peter100 Nybegynder
14. maj 2004 - 16:31 #11
Når txt-filen bliver gemt som excel-ark indeholder alle tal 6 cifre, dvs. der
er foranstående nuller. Det er først ved sammenkædningen med hovedarket at
nullerne forsvinder og formatet i hovedarket bliver standard.
Avatar billede jkrons Professor
14. maj 2004 - 16:33 #12
Hvor mange cifte er der, i de korteste numre, hvis vi ser bort fra de foranstillede nuller.
Avatar billede peter100 Nybegynder
14. maj 2004 - 16:39 #13
Det korteste ciffer er på 1 tegn, dvs. der foranstilles fra 1-5 nuller
Avatar billede jkrons Professor
14. maj 2004 - 16:41 #14
Fint, jeg prøver at se på det.
Avatar billede peter100 Nybegynder
14. maj 2004 - 16:49 #15
tak for det
Avatar billede jkrons Professor
14. maj 2004 - 17:16 #16
Hvis det er korrekt, at der kan forekommer fx

000012
000123
000001
osv, så vil opslagsfuntionene altid retunere "000" og slå op på den. Er det korrekt antaget.
Avatar billede peter100 Nybegynder
14. maj 2004 - 17:21 #17
ja det er rigtig.
Jeg har en LOPSLAG(venstre(A1;3)... hvor den også også
skal medtage evt. nuller i opslaget.
Avatar billede jkrons Professor
14. maj 2004 - 17:26 #18
Prøv at køre denne kode på tallene efter at nullerne er fjernet, og se om det så ikke kommer til virke (prøv i en kopi :-). Husk at rette Range til det område, dine tal står i.

Sub FillOut()
   
    For Each c In ActiveSheet.Range("a1:a6").Cells
   
        l = Len(c.Value)

        Select Case l
            Case Is = 1
            c.Value = "'00000" & CStr(c.Value)
       
            Case Is = 2
            c.Value = "'0000" & CStr(c.Value)
       
            Case Is = 3
            c.Value = "'000" & CStr(c.Value)
       
            Case Is = 4
            c.Value = "'00" & CStr(c.Value)
       
            Case Is = 5
            c.Value = "'0" & CStr(c.Value)
       
            Case Else
            c.Value = "'" & CStr(c.Value)
       
        End Select
   
    Next c

End Sub
Avatar billede peter100 Nybegynder
14. maj 2004 - 17:58 #19
Det ser umiddelbart meget fint ud. Kan du konstruere makroen
så den evt. starter i A2 og gennemløber de rækker der måtte være.
Antallet af rækker vil nemlig variere fra gang til gang.
Avatar billede jkrons Professor
14. maj 2004 - 18:07 #20
Sure thing ;-)

Sub FillOut()

    Range("a2").Activate
    adr = Selection.End(xlDown).Address
   
    For Each c In ActiveSheet.Range("a2:" & adr).Cells
   
        l = Len(c.Value)

        Select Case l
            Case Is = 1
            c.Value = "'00000" & CStr(c.Value)
       
            Case Is = 2
            c.Value = "'0000" & CStr(c.Value)
       
            Case Is = 3
            c.Value = "'000" & CStr(c.Value)
       
            Case Is = 4
            c.Value = "'00" & CStr(c.Value)
       
            Case Is = 5
            c.Value = "'0" & CStr(c.Value)
       
            Case Else
            c.Value = "'" & CStr(c.Value)
       
        End Select
   
    Next c

End Sub
Avatar billede peter100 Nybegynder
14. maj 2004 - 18:11 #21
Mange tak for hjælpen.
Avatar billede jkrons Professor
14. maj 2004 - 18:12 #22
Velbekomme.
Avatar billede peter100 Nybegynder
14. maj 2004 - 18:23 #23
Jeg skal lige høre dig!!
Hvilken betydning har apostroffen foran nullerne?
Avatar billede peter100 Nybegynder
16. maj 2004 - 20:02 #24
jkrons

Jeg har lige en lille rettelse som jeg glemte.
Makroen skal tage højde for at hver anden linie er tom.
Dvs. A2, A4 osv indeholder rækker.
Avatar billede jkrons Professor
16. maj 2004 - 21:05 #25
Sorry, jegt var lige optaget af andre ting, men jeg kan se at kabbsk har hjulpet .-)
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