01. september 2006 - 10:36Der er
92 kommentarer og 1 løsning
Søge og kopiere fra et faneblad til et andet
Hej ! Jeg har et regneark hvor jeg jeg gerne vil søge efter et nummer i en celle hvor der også er tekst i samme, og derefter skal den kopier alle celler hvor det nummer indgår til en anden fane?
eks. nummer+tekst ligger i faneblad Tal og i celle a2 til a6000 så skulle den gerne ved marco kopiere alle de med det samme nummer som jeg intaster i faneblad 204 a1 (eller i en pop op box)ind i faneblad 204 a2 og frem, så mange der nu er !
Den må du lige forklare lidt nærmere. Står nummeret først, tilfældigt midt i eller i slutningen af cellen? Vil du have kopieret cellen eller værdien. Hvordan vil du angive hvad du søger efter: i en celle eller i en tekstbox?
Private Sub CommandButton1_Click() zz = Range("A2:A6000") L = UBound(zz) step = 1 Range("A2").Select t = "1" For I = 1 To L If Left(zz(I, 1), 1) = t Then step = step + 1 Sheets("204").Select Range("A" & step).Select ActiveCell.Value = zz(I, 1) Sheets("Tal").Select End If Next End Sub
Private Sub CommandButton1_Click() Sheets("Tal").Select zz = Range("A2:A6000") L = UBound(zz) step = 1 t = "1" R = Len(t) Sheets("204").Select For I = 1 To L If Left(zz(I, 1), R) = t Then step = step + 1 Range("A" & step).Select ActiveCell.Value = zz(I, 1) End If Next End Sub
Jeg regner med at du vil have det aktiveret med en knap. Højreklik på værktøjslinien, øverst i Excel og sæt flueben ud for "kontrolelementer"... eller gå til "Vis" -> "Værktøjslinier" -> "kontrolelementer".
Du får nu en værktøjslinie frem. Klik på en kommandoknap og klik der på arket hvor du vil have knappen. Dobbeltklik på knappen. Du kommer nu ind i Visual basic hvor der vil stå:
Private Sub CommandButton1_Click()
End Sub
Kopier ovenstående tekst, på nær øverste og nederste linie (de er en gentagelse), så der i alt står:
Private Sub CommandButton1_Click() Dim step As Long
Sheets("Tal").Select Dim a As Long, response As Long t = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2) If t <> False Then
zz = Range("A2:A6000") L = UBound(zz) R = Len(t) Sheets("204").Select For I = 1 To L If Left(zz(I, 1), R) = t Then step = step + 1 Sheets("204").Range("A" & step).Select ActiveCell.Value = zz(I, 1) End If Next End If End Sub
Gå tilbage til regnearket, og klik på ikonet med en linial, trekant, og blyant, så denne ikke længere er fremhævet (den findes på værktøjslinien "kontrolelementer")
Ja, da. Du laver bare en tilsvarende knap i det nye ark.
Her er en lidt mere optimeret kode:
Private Sub CommandButton1_Click() Dim step As Long Dim a As Long, response As Long t = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2) If t <> False And IsNumeric(t) Then
zz = Sheets("Tal").Range("A2:A6000") L = UBound(zz) R = Len(t)
For I = 1 To L If Left(zz(I, 1), R) = t And Not IsNumeric(Mid(zz(I, 1), R + 1, 1)) Then step = step + 1 Sheets("204").Range("A" & step).Select ActiveCell.Value = zz(I, 1) End If Next
Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Private Sub CommandButton1_Click() Dim step As Long Dim a As Long t = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2) If t <> False And IsNumeric(t) Then
step = 1 zz = Sheets("Tal").Range("A2:B6000") L = UBound(zz) Q = 2 'LBound(zz) R = Len(t) For S = 1 To Q For I = 1 To L If Left(zz(I, S), R) = t And Not IsNumeric(Mid(zz(I, S), R + 1, 1)) Then step = step + 1 Sheets("204").Range("A" & step).Select ActiveCell.Value = zz(I, S) End If Next Next Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Hmm det var måske fordi jeg havde rettet zz = Sheets("Tal").Range("A2:B6000")til L2:L6000 for det var ikke A2 i faneblad Tal men L2 den skulle kikke i og skrive det ind i A2 på faneblad 204 ! er det noget der kan rettes ?
der er også flere kolonner jeg gerne vil have kopieret over sammen med det der står i A eks. kolonne B skal kopieres over i D på faneblad 204 ?
ja det virker med A2:B6000, men ikke at den kopier kolonne b ! nej den skal søge i L2-tal istedet for A2-tal og stadig skrive det ind i A2-204(men det kunne jeg løse ved at flytte data fra L-tal til a-tal.)
jeg mener at c-Tal skal skrives i d-204 ! jeg skal have flere kolonner over i 204 men regner med at det kunne jeg bare selv finde udaf hvis jeg bare har den første.
Prøv denne. Det virker altså ok her. Det eneste du skal ændre er dit range. Der kan stå hvadsomhelst, bare du ikke kommer over kolonne IV:
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal MitRange = Sheets("Tal").Range("A2:B6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array RaekkeTal = UBound(MitRange, 2) 'finder bredden på dit array Application.ScreenUpdating = False 'slår skærmopdatering fra LTal = Len(FindTal) 'finder ud af hvor langt tallet er For s = 1 To RaekkeTal 'tæller hvor mange kolonner der skal gennemløbes For I = 1 To KolonneTal If Left(MitRange(I, s), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, s), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 Sheets("204").Cells(2, 1).Select Sheets("204").Cells(step + 1, s).Value = MitRange(I, s) End If Next step = 0 Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") Range("A1").Select Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Prøvede lige med 20.000 tal i 13 kolonner - fra A2 til M20000. Der blev fundet ca. 98.000 værdier på ca. 13 sek.
Du skal lige ændre Sheets("204").Cells(step + 1, s).Value = MitRange(I, s) til Sheets("204").Cells(step + 1, s + 1).Value = MitRange(I, s) for at rykke en kolonne til højre
det kan godt være det er mig der ikke kan finde udaf at fortælle hvad det er jeg gerne vil have ! men jeg intaster et nummer i tekstboxen og den kikker i a2-tal så skal den kopiere alt med det nummer over i a2-204 og derned af + den også tager det der står i c-tal med over i d-204 og derned af ! var det bedre eller er jeg langt ude og du fatter bjelle :-)
Det jeg har lavet putter ark "Tal" - kolonne A til ark "204" - kolonne B ark "Tal" - kolonne B til ark "204" - kolonne C ark "Tal" - kolonne C til ark "204" - kolonne D o.s.v.
Altså... Du klikker på knappen og får en inputbox. Du skriver et nummer, f.eks 77. Koden løber A2-A6000 igennem for at finde alle celler der starter med 77. Hver gang den finder et match, kopieres denne celles indhold samt indholdet i celle C til et nyt ark i kolonne D, således at værdien i A og C bindes sammen i celle D.
Du skal kun have løbet kolonne A igennem! Er dette rigtigt forstået?
Jeg ved ikke om jeg måtte få dit tlf. nummer på mail så vil jeg gerne ringe til dig, er måske lidt nemmere ! hvis ikke så prøver jeg at skrive her igen ! min mail adresse er scharff_peter@yahoo.dk
det skal være sådan at jeg klikker på knappen og får en inputbox. jeg skriver et nummer, f.eks 77. Koden løber A2-A6000 igennem for at finde alle celler der starter med 77. Hver gang den finder et match, kopieres denne celles indhold samt indholdet i celle C til ark 204 i kolonne D hvor den også skriver i kolonne A
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal MitRange = Sheets("Tal").Range("A2:C6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array 'RaekkeTal = UBound(MitRange, 2) 'finder bredden på dit array Application.ScreenUpdating = False 'slår skærmopdatering fra LTal = Len(FindTal) 'finder ud af hvor langt tallet er 'For s = 1 To RaekkeTal 'tæller hvor mange kolonner der skal gennemløbes For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 'Sheets("204").Cells(2, 1).Select Sheets("204").Cells(step + 1, 4).Value = MitRange(I, 1) & MitRange(I, 2) End If Next 'step = 0 'Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") Range("A1").Select Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal MitRange = Sheets("Tal").Range("A2:C6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array 'RaekkeTal = UBound(MitRange, 2) 'finder bredden på dit array Application.ScreenUpdating = False 'slår skærmopdatering fra LTal = Len(FindTal) 'finder ud af hvor langt tallet er 'For s = 1 To RaekkeTal 'tæller hvor mange kolonner der skal gennemløbes For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 'Sheets("204").Cells(2, 1).Select Sheets("204").Cells(step + 1, 4).Value = MitRange(I, 1) & MitRange(I, 3) Sheets("204").Cells(step + 1, 1).Value = MitRange(I, 1) End If Next 'step = 0 'Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") Range("A1").Select Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal MitRange = Sheets("Tal").Range("A2:E6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array 'RaekkeTal = UBound(MitRange, 2) 'finder bredden på dit array Application.ScreenUpdating = False 'slår skærmopdatering fra LTal = Len(FindTal) 'finder ud af hvor langt tallet er 'For s = 1 To RaekkeTal 'tæller hvor mange kolonner der skal gennemløbes For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 'Sheets("204").Cells(2, 1).Select Sheets("204").Cells(step + 1, 1).Value = MitRange(I, 1) Sheets("204").Cells(step + 1, 2).Value = MitRange(I, 2) Sheets("204").Cells(step + 1, 3).Value = MitRange(I, 4) Sheets("204").Cells(step + 1, 4).Value = MitRange(I, 5) End If Next 'step = 0 'Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") Range("A1").Select Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
Ja det er bare kanon det virker sku !! 1000 tak for hjælpen kan man auto få lavet et faneblad med det nummer man skriver i tekstboxen så den laver det den skal i det nye faneblad den lige har opretet ?
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange Set NewSheet = Worksheets.Add NewSheet.Range("A1").Value = "Nummer" NewSheet.Range("B1").Value = "Navn" NewSheet.Range("C1").Value = "Gade" NewSheet.Range("D1").Value = "By"
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:E6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
LTal = Len(FindTal) 'finder ud af hvor langt tallet er 'For s = 1 To RaekkeTal 'tæller hvor mange kolonner der skal gennemløbes For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 NewSheet.Cells(step + 1, 1).Value = MitRange(I, 1) NewSheet.Cells(step + 1, 2).Value = MitRange(I, 2) NewSheet.Cells(step + 1, 3).Value = MitRange(I, 4) NewSheet.Cells(step + 1, 4).Value = MitRange(I, 5) End If Next
det er helt vildt hvor skrap du er til det her det virker bare kanon !! men så bliver man jo krævene, jeg har et faneblad ny hvor sideopsætningen og alle kolonner og celler er i de rigtige størelser dem ville jeg gerne have overført til det nye nummer ark der bliver lavet ? er jeg for vild nu :-)
Hmmm, du trækker kraftigt på de sølle 60 point. Du må give lidt mere ved lejlighed :-) ... og nej, jeg er intet i forhold til de hårde guttere som bak, kabbak, sjap, jkrons, janvogt, flemmingdahl, erikjuul m.m. som har hjulpet mig før, og laver løsninger på 1/20 del af den tid jeg tager om det.
Angående dit spm. Kan du specificere/uddybe lidt mere? Er det cellefarver, kanter (rammer), og cellestørrelser vi snakker om? Er alle celler i kolonne A ens, i kolonne B ens, o.s.v. Mail evt. et udsnit til mig.
hele arket skal bare være magen til også sideopsætningen som det faneblad der hedder ny ! den skal vel "bare" kopiere arket ny og så rette det til det nummer der selv kommer.
Jeg ved ikke om du gider hjælpe mig mere, men der er lidt mere ? jeg ville godt lave så den soter i celle C2 indtil den møder en tekst inaktiv kunde så skal den lave 5 tomme rækker ovenover og bagefter sortere fra D? hvor teksten inaktiv kunde begynder ? jeg ved ikke om der skal laves en ny knap eller om du kan putte den ind den anden ?
Hvis der er mange forskellige formateringer i arket kunne det være en ide, blot at kopiere et standard ark som i forvejen er defineret, men det er nu ikke svært at lave via VBA
Her er hvordan du kopierer et ark kaldet "ny". Det er lavet så dette ark er skjult. Du skal have oprettet dette ark før du kører noget kode, eller i det hele taget lukker Excelfilen. Du kan, hvis du skal redigere i arket, kalde det frem på 2 måder: Luk dit ark på krydset i Excel, og klik "Annuller" - IKKE "nej" ellr "ja"!!! 2. metode er at gå ind i VBA-editoren, markére arket kaldet "ny" i "Projekt-VBAProjekt"-vinduet, kig i vinduet "Properties". Der er et felt der hedder "visible". Klik hvor der står "0 - XLSheetHidden", og sæt den til 1.
Sæt denne kode ind i ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("ny").Visible = True End Sub
Private Sub Workbook_Open() Sheets("ny").Visible = False ActiveWorkbook.Sheets("Tal").Tab.ColorIndex = 43 ActiveWorkbook.Sheets("204").Tab.ColorIndex = 43 ActiveWorkbook.Sheets("ny").Tab.ColorIndex = 3 End Sub
Den nye kode til din CommandButton ser således ud:
Private Sub CommandButton1_Click() Dim step, a, Q, L As Long Dim MitRange
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:E6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
LTal = Len(FindTal) 'finder ud af hvor langt tallet er For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 NewSheet.Cells(step + 1, 1).Value = MitRange(I, 1) NewSheet.Cells(step + 1, 2).Value = MitRange(I, 2) NewSheet.Cells(step + 1, 3).Value = MitRange(I, 4) NewSheet.Cells(step + 1, 4).Value = MitRange(I, 5) End If Next
den skal først sortere D kolonnen i det nye ark den selv har lavet og så bagefter skal den finde inaktiv kunde og sætte 5 tomme rækker ovenover bagefter skal den så sortere kolonne d igen men kun fra der hvor der starter med inaktiv kunde
Det med sortering må du uddybe. Der kan sorteres på mange måder. Hvis du vil sortere hele området i det nye ark med kolonne D som gældende faktor, indsætter du denne kode:
ActiveCell.SpecialCells(xlLastCell).Select 'Finder nederste celle der er skrevet i NedersteCelle = ActiveCell.Row
min fejl ! der skal kun sortere en gang bagefter skal den finde alle dem hvor der står inaktiv kunde og flytte dem til bunden af arket + 5 tomme rækker ovenover og rykke de andre rækker op til der hvor den har flyttet alle de rækker med inaktiv kunde.
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:E6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
LTal = Len(FindTal) 'finder ud af hvor langt tallet er For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 NewSheet.Cells(step + 1, 1).Value = MitRange(I, 1) NewSheet.Cells(step + 1, 2).Value = MitRange(I, 2) NewSheet.Cells(step + 1, 3).Value = MitRange(I, 4) NewSheet.Cells(step + 1, 4).Value = MitRange(I, 5) End If Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") NewSheet.Range("A1").Select ActiveCell.SpecialCells(xlLastCell).Select 'Finder nederste celle der er skrevet i NedersteCelle = ActiveCell.Row
Spring5 = 6 For FindInaktive = 2 To NedersteCelle If UCase(NewSheet.Range("D" & FindInaktive).Value) = "INAKTIV KUNDE" Or UCase(NewSheet.Range("C" & FindInaktive).Value) = "INAKTIV KUNDE" Then NewSheet.Rows(FindInaktive & ":" & FindInaktive).Select Selection.Cut NewSheet.Range("A" & NedersteCelle + Spring5).Select Selection.Insert Shift:=xlDown Spring5 = Spring5 + 5 FindInaktive = FindInaktive - 1 End If Next Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If Sheets("204").Select End Sub
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:E6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
LTal = Len(FindTal) 'finder ud af hvor langt tallet er For I = 1 To KolonneTal If Left(MitRange(I, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(I, 1), LTal + 1, 1)) Then step = step + 1 IAlt = IAlt + 1 NewSheet.Cells(step + 1, 1).Value = MitRange(I, 1) NewSheet.Cells(step + 1, 2).Value = MitRange(I, 2) NewSheet.Cells(step + 1, 3).Value = MitRange(I, 4) NewSheet.Cells(step + 1, 4).Value = MitRange(I, 5) End If Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.") NewSheet.Range("A1").Select ActiveCell.SpecialCells(xlLastCell).Select 'Finder nederste celle der er skrevet i NedersteCelle = ActiveCell.Row
NewSheet.Range("D2:D" & NedersteCelle + 1).Select 'vælger det område der er værdier i NewSheet.Range("A1:D" & NedersteCelle + 1).Sort Key1:=NewSheet.Range("D2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
Spring5 = 6 For FindInaktive = 2 To NedersteCelle If UCase(NewSheet.Range("D" & FindInaktive).Value) = "INAKTIV KUNDE" Or UCase(NewSheet.Range("C" & FindInaktive).Value) = "INAKTIV KUNDE" Then NewSheet.Rows(FindInaktive & ":" & FindInaktive).Select Selection.Cut NewSheet.Range("A" & NedersteCelle + Spring5).Select Selection.Insert Shift:=xlDown Spring5 = Spring5 + 5 FindInaktive = FindInaktive - 1 End If Next test: Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If Sheets("204").Select End Sub
Hej igen ! jeg kan ikke få det der til at virke med at når den finder en tekst Med Inaktiv Kunde i Kolonne M (den var d før )så skal den flytte dem ned i bunden og lave 5 tomme rækker over ?
Sådan ser den ud nu hvis du kan gennemskue det ! det skulle være rigtigt nok tror jeg :-)
Private Sub CommandButton3_Click() Dim step, a, Q, L As Long Dim MitRange
Sheets("ny").Copy After:=Sheets("tal") Set NewSheet = ActiveSheet NewSheet.Visible = True
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:p6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
MsgBox ("Der blev overført " & IAlt & " celleværdier.") NewSheet.Range("A1").Select ActiveCell.SpecialCells(xlLastCell).Select 'Finder nederste celle der er skrevet i NedersteCelle = ActiveCell.Row
NewSheet.Range("m2:m" & NedersteCelle + 1).Select 'vælger det område der er værdier i NewSheet.Range("A1:n" & NedersteCelle + 1).Sort Key1:=NewSheet.Range("m2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
Spring5 = 6 For FindInaktive = 2 To NedersteCelle If UCase(NewSheet.Range("M" & FindInaktive).Value) = "Inaktiv kunde" Or UCase(NewSheet.Range("M" & FindInaktive).Value) = "Inaktiv Kunde" Then NewSheet.Rows(FindInaktive & ":" & FindInaktive).Select Selection.Cut NewSheet.Range("A" & NedersteCelle + Spring5).Select Selection.Insert Shift:=xlDown Spring5 = Spring5 + 5 FindInaktive = FindInaktive - 1 End If Next test: Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
hmm der ser det ud til at virke men der skal kun være en gang 5 tomme rækker. men hvorfor virker det ikke i mit ark ? Kan det være fordi jeg skjuler kolonne A ?
Public Sub HentTal() Dim RaaData As Variant, R As Long, C As Long, StrTal As String, Res() As Variant, I As Long I = 0 StrTal = InputBox("Indtast søgekreterie") RaaData = Sheets("Tal").Range("A2:A6000") For R = LBound(RaaData, 1) To UBound(RaaData, 1) For C = LBound(RaaData, 2) To UBound(RaaData, 2) If Not IsNumeric(RaaData(R, C)) Then If InStr(RaaData(R, C), StrTal) Then ReDim Preserve Res(I) Res(I) = RaaData(R, C) I = I + 1 End If End If Next Next Sheets("204").Select Sheets("204").Range("A2:A" & UBound(Res) + 2) = Application.WorksheetFunction.Transpose(Res) End Sub
Public Sub HentTal() Dim RaaData As Variant, R As Long, C As Long, StrTal As String, Res As Variant, I As Long I = 1 StrTal = InputBox("Indtast søgekreterie") Sheets("204").Range("A2:A6000").ClearContents Res = Sheets("204").Range("A2:A6000") RaaData = Sheets("Tal").Range("A2:A6000") For R = LBound(RaaData, 1) To UBound(RaaData, 1) For C = LBound(RaaData, 2) To UBound(RaaData, 2) If Not IsNumeric(RaaData(R, C)) Then If InStr(RaaData(R, C), StrTal) Then Res(I, 1) = RaaData(R, C) I = I + 1 End If End If Next Next Sheets("204").Select Range("A2:A6000") = Res End Sub
hmm det andet som akyhne har lavet virker sku lækkert men der er kun lige det sidste (måske :-) ) med de Inaktive kunder som den skal klippes og sættes ned i bunden med 5 tomme rækker ovenover dem .
det kunne måske være nemmere at den bare kikker kolonne M igennem og når den møder den første række med teksten Inaktive Kunder så sætter den 5 tomme rækker ind ovenover ?
Sheets("ny").Copy After:=Sheets("tal") Set NewSheet = ActiveSheet NewSheet.Visible = True
'FindTal sætte til den værdi du skriver FindTal = Application.InputBox( _ Prompt:="Skriv tallet du søger", _ Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal Fejl = 0 For Each ws In Worksheets 'går alle arknavne igennem If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op Fejl = Fejl + 1 End If Next If Fejl > 0 Then NewSheet.Name = FindTal & " (Kopi" & Fejl & ")" Else NewSheet.Name = FindTal End If
MitRange = Sheets("Tal").Range("A2:P6000") 'laver et array ved navn MitRange KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
NewSheet.Range("M1:M" & NedersteCelle + 1).Select 'vælger det område der er værdier i NewSheet.Range("A1:N" & NedersteCelle + 1).Sort Key1:=NewSheet.Range("M2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
For FindInaktive = 2 To IAlt + 1 If UCase(Left(NewSheet.Range("M" & FindInaktive - Minus).Value, 13)) = "INAKTIV KUNDE" Then NewSheet.Rows(FindInaktive - Minus & ":" & FindInaktive - Minus).Select Selection.Cut NewSheet.Range("A" & IAlt + 7).Select Selection.Insert Shift:=xlDown Minus = Minus + 1 End If Next test: Application.ScreenUpdating = True Else MsgBox "Du skrev ikke et tal!" & vbLf _ & "Jeg stopper her :-)" End If
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.