Avatar billede jepper65 Nybegynder
05. maj 2005 - 20:42 Der er 36 kommentarer og
1 løsning

udvælgelse af tal

jeg har et regne ark i excel med tal der enten har 2 cifre, 4 cifre eller 6 cifre
altså:
xx
xxxx
xxxxxx

man skal så kunne vælge, om man kun vil beholde dem med 2, 4 eller 6 cifre
har nogen god ide til en kode så jeg kan skille dem fra hinanden?
problemet er også at der efter alle tallene står en tekst
fx:
12 her er en tekst
1221 her er mere tekst
122111 her er endnu mere tekst

jeg regner med at jeg skal bruge vba streng funktionen Mid, for at finde mellemrummet mellem tal og tekst, men jeg er ikke sikker, og kan ikke få det til at virke
Avatar billede busschou Praktikant
05. maj 2005 - 20:52 #1
tal = Split(tekst," ")
længden = Len(tal)
Avatar billede busschou Praktikant
05. maj 2005 - 20:52 #2
hov hurtig der
tal = Split(tekst," ")(0)
længden = Len(tal)
Avatar billede thesurfer Nybegynder
05. maj 2005 - 20:54 #3
Du kan bruge InStr: http://www.w3schools.com/vbscript/func_instr.asp
Andre funktion: http://www.w3schools.com/vbscript/vbscript_ref_functions.asp

F.eks.:

antalcifre = instr(streng, " ") - 1

Så har du antallet af cifre, i variablen "antalcifre"..
Avatar billede brynil Nybegynder
05. maj 2005 - 21:19 #4
Prøv denne, hvis det er ok at slette rækkerne med uønskede tal. Men du kan jo altid ændre hvad der skal ske. Den kører fra A1 til A10.

Dim i, o, p As Integer

p = 2 'ønsket antal

For i = 1 To 10
    o = InStr(1, Cells(i, 1).Value, " ")
    If Cells(i, 1).Value = "" Then Exit Sub
    If Not o = p + 1 Then
        Rows(i & ":" & i).Select
        Selection.Delete Shift:=xlUp
        i = i - 1
    End If
Next i
Avatar billede thesurfer Nybegynder
05. maj 2005 - 21:26 #5
brynil> Hmm... forkert spm?
Avatar billede brynil Nybegynder
05. maj 2005 - 21:29 #6
Det vil ikke undre mig, men skær det lige ud i pap :-)
Avatar billede thesurfer Nybegynder
05. maj 2005 - 21:32 #7
brynil> Det virker lidt overkill, med al den kode, når det kan gøres med 1 linie.. :-)
Avatar billede thesurfer Nybegynder
05. maj 2005 - 21:32 #8
Og det virker som om, at du er inde på noget VBA..
Avatar billede brynil Nybegynder
05. maj 2005 - 21:33 #9
Tjaa, det plejer jeg selv at anvende i Excel regneark!
Avatar billede brynil Nybegynder
05. maj 2005 - 21:35 #10
Det er ikke så usædvanligt at der teges fejl af vb og vba kategorien.
Avatar billede jepper65 Nybegynder
05. maj 2005 - 21:40 #11
jo det er skam vba kode jeg skal bruge, og mange tak!
når jeg bruger din kode virker det dog ikke i regnearket brynil
jeg har lidt svært ved at forstå din løkke, men har bare implementeret den i mit modul!
kan du se hvad jeg har gjort forkert?

Public Sub aabenfil1()
Dim cifferniveau As Integer, mincelle As Range, streng As String



Workbooks.Open Filename:="c:\autdnkmv.wk1"
cifferniveau = InputBox("vælg ciffernivau 2, 4 eller 6")

For Each mincelle In Range("B8:N7000")
    If mincelle = "-" Then
        mincelle = "0"
    End If
Next

Dim i, o, p As Integer

p = 2 'ønsket antal

For i = 1 To 10
    o = InStr(1, Cells(i, 1).Value, " ")
    If Cells(i, 1).Value = "" Then Exit Sub
    If Not o = p + 1 Then
        Rows(i & ":" & i).Select
        Selection.Delete Shift:=xlUp
        i = i - 1
    End If
Next i
   
   

End Sub
Avatar billede brynil Nybegynder
05. maj 2005 - 21:46 #12
Du skal ihvertfald ændre løkken. Den kører jo kun til celle A10:

For i = 1 to 10

Jeg skal gerne forklare hvordan den kører, hvis du ønsker det!
Avatar billede brynil Nybegynder
05. maj 2005 - 21:47 #13
Og du kan ikke anvende slet række, hvis du har tal i mere end kolonne A. Så skal den ændres.

Hvad vil du have de skal ske når den finder et uønsket tal?
Avatar billede jepper65 Nybegynder
05. maj 2005 - 22:13 #14
altså jeg kan godt se den skal gå længere end til A10, du må meget gerne forklare den hvis det ikke er til for meget besvær! ja, den må gerne slette hele rækken med det uønskede tal
Avatar billede brynil Nybegynder
05. maj 2005 - 22:36 #15
Husk at lukke for makroen hvis der skrives et forkert tal:

p = InputBox("vælg ciffernivau 2, 4 eller 6")

If Not p = 2 Or p = 4 Or p = 6 Then
    MsgBox ("Du skal vælge 2, 4 eller 6")
    Exit Sub
End If

' Første/sidste række er 8/7000. Det er dit loop
    For i = 8 To 7000
       
        ' gem placeringen af første mellemrum i o
        o = InStr(1, Cells(i, 1).Value, " ")
       
        'hvis cellen er tom, så afslut makroen. Årsagen er, at når du sletter
        'en linie så rykker du de underliggende linier op. For at tage højde
        'for dette, trækker du 1 fra i. Ellers ville du springe en linie over
        'ved næste check. Men det giver samtidig problemet at når du når til
        'den første tomme celle i bunden så vil du få et uendeligt loop. Derfor
        'et check for om cellen er tom. SÅ INGEN TOMME CELLER INDE I ARKET!
        If Cells(i, 1).Value = "" Then Exit Sub
       
        'p er placeringen af mellemrummet, d.v.s 3, 5 eller 7. o er valget
        'mellem 2, 4 eller 6 cifre.
        'Hvis de ikke er ens, så er cellens værdi uønsket.
        If Not o = p + 1 Then
       
            'Marker hele rækken der skal slettes (værdien i)
            Rows(i & ":" & i).Select
           
            'Slet rækken
            Selection.Delete Shift:=xlUp
           
            'Læg 1 til i når der slettes en række, som nævnt ovenfor
            i = i - 1
        End If
    'næste celle
    Next i
Avatar billede brynil Nybegynder
05. maj 2005 - 22:38 #16
Træk 1 fra skulle der stå!
Avatar billede brynil Nybegynder
05. maj 2005 - 22:45 #17
Og byt så lige rundt på forklaringen om o og p.
o er placeringen, p er valget.
Beklager, jeg er lidt træt nu!
Avatar billede brynil Nybegynder
06. maj 2005 - 08:58 #18
Det gik rigtig godt i går.

En mere hensigtsmæssig måde at foretage loopet på, når der slettes rækker, er at starte det fra bunden. Så undgår du problematikken med ændret rækkenummer og de tomme celler:

    For i = 7000 To 8 Step -1
        o = InStr(1, Cells(i, 1).Value, " ")
        If Not o = p + 1 Then
            Rows(i & ":" & i).Select
            Selection.Delete Shift:=xlUp
        End If
    Next i

Og du skal også ændre input valideringen til dette:

If Not p = 2 And Not p = 4 And Not p = 6 Then
    MsgBox ("Du skal vælge 2, 4 eller 6")
    Exit Sub
End If
Avatar billede jepper65 Nybegynder
08. maj 2005 - 22:51 #19
hej brynil
jeg har stadig et problem!
den sletter Alle rækker, og ikke kun dem som ikk er udvalgt
har du nogen  forklaring på dette?
Avatar billede brynil Nybegynder
09. maj 2005 - 17:28 #20
Jeg har lige testet det sidste eksempel og det ser ud til at fungere efter hensigten.

Prøv denne for at se hvad makroen finder:

p = InputBox("vælg ciffernivau 2, 4 eller 6")

If Not p = 2 And p = 4 And p = 6 Then
    MsgBox ("Du skal vælge 2, 4 eller 6")
    Exit Sub
End If


    For i = 70 To 8 Step -1
        o = InStr(1, Cells(i, 1).Value, " ")
        If Not o = p + 1 Then
            Rows(i & ":" & i).Select
            Selection.Interior.ColorIndex = 4
           
        End If
    Next i

De farvede rækker ville være blevet slettet. Hvis der iblandt dem er rækker som ikke skulle slettes, så prøv at se på formatet i cellen. Har du fx. foranstillede mellemrum?
Avatar billede copyrighttm Nybegynder
09. maj 2005 - 17:47 #21
lille kommentar:

Der er flere mellemrum imellem nogle informationerne, altså:

01    her er tekst
0101  her er tekst
010101 og mere tekst
Avatar billede brynil Nybegynder
09. maj 2005 - 17:52 #22
Det burde ikke betyde noget. Den giver dig det førstkommende mellemrum regnet fra venstre.
Men foranstillede mellemrum vil ødelægge makroens tænkte funktion.

Man kan køre en Trim for at fjerne disse.
Avatar billede copyrighttm Nybegynder
09. maj 2005 - 18:00 #23
dem er der ingen af... jeg prøver lige at køre den igennem i aften, så skriver jeg lige om det virker... jeg laver opgave sammen med Jepper...
Avatar billede brynil Nybegynder
09. maj 2005 - 18:07 #24
Ok, men hvis i vil prøve at trimme er måden:

For i = 1 To 7000
    Cells(i, 1).Value = Trim(Cells(i, 1).Value)
Next
Avatar billede jepper65 Nybegynder
10. maj 2005 - 19:03 #25
hej brynil!
vi har godt nok lidt svært ved at få det til at virke, jeg kunne godt tænke mig at sende  det vi skal løse til dig hvis det ville være ok?
det virker som om det er noget du har ret godt styr på, og så ville du også kunne se vores problem!
Avatar billede brynil Nybegynder
10. maj 2005 - 19:25 #26
Jeg kan prøve. Brug  brynil@mail.dk
Avatar billede jepper65 Nybegynder
10. maj 2005 - 19:43 #27
så er mailen sendt!
Avatar billede brynil Nybegynder
10. maj 2005 - 20:18 #28
Jeg har kørt makroen på autdnkmv.wk1 og jeg får det resultat jeg forventer. Så jeg har svært ved at se hvor jeres problem ligger.

Hvad er der galt når i selv har kørt makroen?
Avatar billede jepper65 Nybegynder
10. maj 2005 - 21:14 #29
jo problemet er at den stadig sletter alle rækker!
prøv at tjekke din mail
Avatar billede brynil Nybegynder
10. maj 2005 - 21:24 #30
Der er fejl på den vedhæftede fil. Den kan ikke åbnes!
Avatar billede jepper65 Nybegynder
10. maj 2005 - 21:28 #31
ah ok, prøver lige igen
Avatar billede jepper65 Nybegynder
10. maj 2005 - 22:09 #32
fik du min sidste mail brynil?
Avatar billede brynil Nybegynder
10. maj 2005 - 22:13 #33
Jeps, har lige sendt den retur med et par kommentarer. Spørgsmålet i stiller hér skulle være løst.

Men kig lidt på hvad jeg skriver i mailen. God fornøjelse.
Avatar billede jepper65 Nybegynder
10. maj 2005 - 22:18 #34
Så vil jeg sige mange tak!, tjekker lige om jeg kan få det til at virke nu så :)
Avatar billede jepper65 Nybegynder
10. maj 2005 - 22:22 #35
YES det virker, endnu engang tak
Avatar billede thesurfer Nybegynder
14. juni 2005 - 21:10 #36
Hey, folkens.. husk lige Ekspertens regler..

§2.1.12 [Det er ikke tilladt, at] "tildele point for en løsning, der ikke er tilgængelig for alle Eksperten.dk’s brugere."

§2.1.13 [Det er ikke tilladt, at] "tildele point for en opgave løst uden om Eksperten.dk (f.eks. opgaver løst via mail, ICQ eller telefon), eller blot et andet spørgsmål på Eksperten.dk (lovlig pointoverførsel undtaget)."

Offentliggør venligst svaret, jvf. Ekspertens regel §2.7., så andre kan få gavn af svaret..


Ekspertens regler: http://www.eksperten.dk/regler.phtml

/theSurfer
Avatar billede jepper65 Nybegynder
06. juni 2008 - 11:04 #37
lukker
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