Avatar billede Claus_1981 Nybegynder
17. november 2010 - 12:06 Der er 3 kommentarer

Stop søgning i regneark med macro

Hej
Jeg har været på kursus i grundlæggende VBA programmering for et par måneder siden.
Men jeg må erkende at jeg har et problem jeg ikke har kunnet finde en løsning på. Så nu søger jeg assistance her inde. Og jeg har også søgt meget på google, men uden held.

Problemet:
1. Jeg importerer nogle csv filer ind i min workbook.
2. Jeg ønsker herefter at finde nogle bestemte værdier, og kopiere dem til et andet sheet.
Problemet er bare at det varierer hvor værdierne står henne i den importerede csv fil. Så jeg kan altså ikke sætte den op til fast at hente data fra nogle bestemte celler.
Den eneste mulighed jeg har, er at søge (CTRL+F) efter overskriften til den kolonne med data jeg vil importere.
Det er også fint lykkedes mig at lave en sådan makro som finder overskriften, og henter de data som står nedenfor overskriften.
Men problemet består i at den skal gentage denne proces med at søge INDTIL den har fundet alle overskrifterne som passer til søgningen. Den må altså ikke begynde forfra med søgningen. For nogle gange er der 5 overskrifter som passer på søgningen. Andre csv filer har måske kun overskriften 3 gange.

Her er et eksempel på den kode jeg har lavet. Jeg har dog ikke lavet det med at kopiere dataene endnu. Mit problem er sådan set bare det med at få søgningen til at stoppe når den har været hele sheet igennem.

Kode:

'Her er et eksempel hvor jeg har gentaget søgningen 2 gange.

    Cells.Find(What:="RPM_Point?_Value", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    'Her skulle så være den del med at der kopieres over i et andet ark. Det er dog undladt her
    Application.CutCopyMode = False
   
    ActiveCell.Offset(-1, 0).Range("A1").Select
   
    Cells.Find(What:="RPM_Point?_Value", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    'Her skulle så være den del med at der kopieres over i et andet ark. Det er dog undladt her
    Application.CutCopyMode = False
Avatar billede kabbak Professor
17. november 2010 - 23:25 #1
prøv at se denne fra hjælpen

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Avatar billede kabbak Professor
17. november 2010 - 23:26 #2
det betyder at du skal fange den første celleadresse og så stoppe makroen, hvis den finder den samme igen
Avatar billede Claus_1981 Nybegynder
19. november 2010 - 13:54 #3
Hej

Det er lige præcis det jeg er ude efter. Men jeg syntes ikke jeg kan få det til at fungere. Det skyldes nok at jeg er nybegynder inden for dette.
Jeg tror det måske er mig som ikke sætter min egen "kode" ind det rigtige sted.

Er det her HELT misforstået?

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, LookIn:=xlValues)
   
    Cells.Find(What:="RPM_Point?_Value", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
   
    Application.CutCopyMode = False
   
    ActiveCell.Offset(-1, 0).Range("A1").Select
   
   
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
                                 
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
 
End Sub
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