Avatar billede Slettet bruger
25. maj 2010 - 09:29 Der er 6 kommentarer og
1 løsning

Excel Makro - Søg og kopier til andet ark.

Hej.
Jeg har fundet noget makro kode på nettet som kan det som det skal, men der er et lille problem.

Jeg ønsker at gennemsøge 3-5 excel sheets, efter et medarbejder nummer, og derefter kopiere alle linier med det nummer til et andet ark (resultat).

Men hvis der står et søge ord på samme linie i flere forskellige ark, kopieres resultaterne oven i hinanden, og derved får jeg ikke det hele med.

Nogen der er hårde til Excel?


Sub SearchForStrin()


  Dim LSearchRow As Integer
  Dim LCopyToRow As Integer
  For Each sh In Array("Mobil", "Mobil Bredbånd")
  Sheets(sh).Select
  'Start search in row 1
  LSearchRow = 2
 
  'Start copying data to row 2 in Sheet2 (row counter variable)
  LCopyToRow = 2
 
      While Len(Range("A" & CStr(LSearchRow)).Value) > 0
     
          'If value in column E = "Mail Box", copy entire row to Sheet2
          If Range("A" & CStr(LSearchRow)).Value = "1" Then
         
              'Select row in Sheet1 to copy
              Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
              Selection.Copy
         
              'Paste row into Sheet2 in next row
              Sheets("Resultat").Select
              Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
              ActiveSheet.Paste
         
              'Move counter to next row
              LCopyToRow = LCopyToRow + 1
         
              'Go back to Sheet1 to continue searching
              Sheets("Mobil").Select
         
          End If
          LSearchRow = LSearchRow + 1
 
      Wend
  Next
'Position on cell A3
  Application.CutCopyMode = False
  Sheet1.Select
 
  MsgBox "Søgning afsluttet"
 
  Exit Sub
 
 
Err_Execute:
  MsgBox "An error occurred."
 
End Sub
Avatar billede kabbak Professor
25. maj 2010 - 16:38 #1
Sub SearchForStrin()


  Dim LSearchRow As Integer
  Dim LCopyToRow As Integer

LCopyToRow = 2 'FLYTTET, den skal jo ikke tilbage til 2 ved arkskift

  For Each sh In Array("Mobil", "Mobil Bredbånd")
  Sheets(sh).Select
  'Start search in row 1
  LSearchRow = 2

  'Start copying data to row 2 in Sheet2 (row counter variable)


      While Len(Range("A" & CStr(LSearchRow)).Value) > 0
   
          'If value in column E = "Mail Box", copy entire row to Sheet2
          If Range("A" & CStr(LSearchRow)).Value = "1" Then
       
              'Select row in Sheet1 to copy
              Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
              Selection.Copy
       
              'Paste row into Sheet2 in next row
              Sheets("Resultat").Select
              Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
              ActiveSheet.Paste
       
              'Move counter to next row
              LCopyToRow = LCopyToRow + 1
       
              'Go back to Sheet1 to continue searching
              Sheets("Mobil").Select
       
          End If
          LSearchRow = LSearchRow + 1

      Wend
  Next
'Position on cell A3
  Application.CutCopyMode = False
  Sheet1.Select

  MsgBox "Søgning afsluttet"

  Exit Sub
Avatar billede kabbak Professor
25. maj 2010 - 16:44 #2
denne vil være hurtigere

Sub SearchForStrin()


    Dim LSearchRow As Integer
    Dim LCopyToRow As Integer

    LCopyToRow = 2    'FLYTTET, den skal jo ikke tilbage til 2 ved arkskift

    For Each sh In Array("Mobil", "Mobil Bredbånd")
        Sheets(sh).Select
        'Start search in row 1
        LSearchRow = 2

        'Start copying data to row 2 in Sheet2 (row counter variable)


        While Len(Range("A" & CStr(LSearchRow)).Value) > 0

            'If value in column E = "Mail Box", copy entire row to Sheet2
            If Range("A" & CStr(LSearchRow)).Value = "1" Then

                'Select row in Sheet1 to copy
                Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Copy Sheets("Resultat").Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow))

                'Move counter to next row
                LCopyToRow = LCopyToRow + 1

            End If
            LSearchRow = LSearchRow + 1

        Wend
    Next
    'Position on cell A3

    Sheet1.Select

    MsgBox "Søgning afsluttet"

    Exit Sub
End Sub
Avatar billede Slettet bruger
30. maj 2010 - 11:49 #3
Takker. Løste dog selv fejlen inden du skrev. + Har rettet så koden fjerner gamle resultater ved ny søgning + Har lavet så resultater fra forskellige ark ikke overskriver hinanden.

Smider koden senere til andre som kan bruge det.

Smid et svar, så får du point som tak alligevel.
Avatar billede kabbak Professor
30. maj 2010 - 13:59 #4
;-))
Avatar billede Slettet bruger
31. maj 2010 - 08:16 #5
Her er den færdige kode:

Public sheetname
Public LCopyToRow As Integer
Public LSearchValue As String
Sub SearchForStrin(sheetname)

Dim LSearchRow As Integer

  For Each sh In Array(sheetname)
  Sheets(sheetname).Select
  'Start search in row 2
  LSearchRow = 2
 
  'Start copying data to row 2 in Sheet2 (row counter variable)

 
      While Len(Range("A" & CStr(LSearchRow)).Value) > 0
     
      If Range("A" & CStr(LSearchRow)).Value = LSearchValue Then
         
              'Select row in Sheet1 to copy
              Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
              Selection.Copy
         
              'Paste row into Sheet2 in next row
              Sheets("Resultat").Select
           
              Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
              ActiveSheet.Paste
                       
              'Move counter to next row
              LCopyToRow = LCopyToRow + 1
         
              'Go back to Sheet1 to continue searching
              Sheets(sheetname).Select
         
          End If
          LSearchRow = LSearchRow + 1

      Wend
  Next
'Position on cell A3
  Application.CutCopyMode = False
  Sheet1.Select
 

 
  Exit Sub
 
 
Err_Execute:
  MsgBox "Fejl i søgningen."
 
End Sub

Public Sub SearchSheet()
LSearchValue = InputBox("Søg? Medarbejder nummer.", "Medarbejder Nr. Søgning")
LCopyToRow = 4
SearchForStrin ("ark1")
SearchForStrin ("ark2")
SearchForStrin ("ark3")
SearchForStrin ("ark4")
SearchForStrin ("ark5")
SearchForStrin ("ark6")
  MsgBox "Søgning udført, se resultat i 'Resultat' ark."
End Sub
Avatar billede eenie Nybegynder
27. oktober 2010 - 00:13 #6
Lige hvad jeg har gået og ledt efter!
Avatar billede Slettet bruger
27. oktober 2010 - 08:26 #7
Dejligt at der er andre end mig der kan bruge koden. Nogen gange er det bare rart at have noget at sammenligne med.
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