Avatar billede dego Novice
02. december 2010 - 22:25 Der er 30 kommentarer og
1 løsning

Søg i bestemt række i projektmappen

Er det muligt at få Excel (evt. via den indbyggede søgefunktion) til at søge i en bestemt række, eller i et bestemt område i en projektmappe?
Avatar billede newbieatphp Nybegynder
02. december 2010 - 22:38 #1
Du kan lave en makro:

Sub soeg()
    Range("B2:C5").Find(What:="hej", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
End Sub


Der kan du ændre Range("B2:C5) til det område du gerne vil søge i
Avatar billede dego Novice
03. december 2010 - 10:25 #2
Hej Newbieatphp

Jeg får en runtime error 91 når jeg forsøger??
Avatar billede newbieatphp Nybegynder
03. december 2010 - 15:42 #3
Hvilken udgave af excel bruger du?
Har du ændret i området den skal søge i?
Avatar billede excelent Ekspert
03. december 2010 - 16:18 #4
Betyder at koden ikke finder det du søger i aktuel område
Avatar billede dego Novice
03. december 2010 - 16:33 #5
Jeg får fejlen både i 2003 og 2010 og ja, det er fordi den ikke finder værdien "hej".

Allerhelst ville jeg bruge den indbyggede søgefunktion, eller noget tilsvarende da det er vigtigt at modtage en brugervenlig besked hvis værdien ikke bliver fundet.

Desuden har jeg behov for at dialogboksen ikke forsvinder efter hver søgning, men forbliver aktiv, indtil jeg lukker den.
Avatar billede dego Novice
03. december 2010 - 16:50 #6
Denne virker bortset fra den ignorerer det angivne område og søger overalt

Sub test()
Range("a1:d5").Application.Dialogs(xlDialogFormulaFind).Show
End Sub
Avatar billede excelent Ekspert
03. december 2010 - 19:47 #7
Denne tester med en CountIf om værdi findes
Kunne også laves med en Error rutine

Koden søger i A1:D5 efter værdien i den aktive celle
Søgeværdien kunne også angives via en input i koden

Sub xFind()
x = ActiveCell.Value
If Application.CountIf(Range("A1:D5"), x) = False Then
MsgBox "Det søgte findes ikke"
Exit Sub
End If
Range("A1:D5").Find(x, LookIn:=xlValues, LookAt:=xlWhole).Select
End Sub
Avatar billede dego Novice
03. december 2010 - 20:13 #8
Excelent:
Den virker og den er faktisk ok smart, men den søger kun i det aktive ark og den søger ikke i værdier som man kan angive i den indbyggede søgeboks!
Avatar billede dego Novice
03. december 2010 - 20:20 #9
Den søger desværre også på hele cellens værdi, hvilket ikke er så heldigt til mit formål...
Avatar billede newbieatphp Nybegynder
04. december 2010 - 00:28 #10
Kan dette bruges?

Sub soeg()
Dim dt As String
Dim om As Range

    dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")
    Set om = Range("B2:C5")

    If Application.CountIf(om, dt) = False Then
    MsgBox "Findes ikke"
    Else
    om.Find(What:=dt, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    End If
End Sub
Avatar billede dego Novice
04. december 2010 - 01:02 #11
Den virker, men mangler desværre også det nævnte i kommentaren til excelent:-(

Dvs. den finder ikke værdier i ark2, eller ordet "ost" hvis det er i en formelcelle der står "ost".

Søger jeg på "os" finder den heller ikke "ost".

Alle de 3 nævnte ting skal være opfyldt i koden.

Jeg havde egentlig troet at man "blot" skulle kalde søgeboksen i koden og så bare definere at den kun skulle søge i fx range A1:C5.

At den så tillige skal søge på tværs i projektmappen og på dele af ord, kan man jo blot vælge når søgeboksen er startet.
Avatar billede newbieatphp Nybegynder
04. december 2010 - 16:36 #12
Jeg er vist ikke helt med endnu.
Hvem er det som skal lave søgningen.

Hvordan anderledes skal søgningen være i forhold til at man markere det område der skal søges i - trykker CTRL+b og skriver hvad der skal søges efter?
Avatar billede dego Novice
04. december 2010 - 18:45 #13
Jeg ønsker at lave gentagne søgninger af forskellige værdier der befinder sig i bestemte områder af et større regneark.
Når værdien er fundet, tilføjes en kommentar eller 2, i celler der ligger i umiddelbar nærhed af værdien.

Jeg kan ikke gøre det du nævner da en markering ifm. søgningen forsvinder når værdien er fundet og man har skrevet sin kommentar.
Desuden er der er større risiko for at data kan blive slettet hvis store områder konstant er markeret.

Den almindelige søgefunktion er som sådan perfekt da man kan søge på dele af ord og på tværs af projektmappen, men det tager for lang tid.
Derfor var kombinationen af nævnte søgefunktion og et bestemt kodet søgeområde en løsning jeg virkelig kunne bruge.

Forslaget fra Excelent med at søge fra et bestemt felt af kan ligeledes bruges, da øverste række i projektmappen er frosset, men som tidligere nævnt skal der kunne søges på tværs af projektmappen og på dele af ord.
Avatar billede newbieatphp Nybegynder
04. december 2010 - 18:52 #14
Er det samme område på alle ark, som der skal søges på?
Avatar billede dego Novice
04. december 2010 - 19:57 #15
Ja, det er det samme område
Avatar billede newbieatphp Nybegynder
04. december 2010 - 21:05 #16
Jeg har fået følgende til at virke hos mig:

Public om As Range ' område der skal tjekkes igennem
Public dt As String ' tekst der skal søges efter
Public f As String ' første celle der skal søges fra på nye ark
Sub soeg()
    Set om = Range("B2:C14")
   
    dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")
    f = InputBox("Hvilken celle skal der startes med at søge i?", "Start på søgning")
   
    Range(f).Select
   
    Call selveSoeg
End Sub
Sub SoegNext()
    Dim felt As String
   
    felt = ActiveCell.Address
   
    Call selveSoeg

    If ActiveCell.Address > felt Then
        MsgBox "her er en ny", vbOKOnly, "Søgning"
    ElseIf ActiveSheet.Index < ActiveWorkbook.Worksheets.Count Then
        Sheets(ActiveSheet.Index + 1).Select
        Range(f).Select '
        Call selveSoeg
        Call SoegNext
    Else
        MsgBox "Der findes ikke flere", vbOKOnly, "Din søgning"
    End If
End Sub
Sub selveSoeg()
    On Error Resume Next
    om.Find(What:=dt, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
End Sub
Avatar billede newbieatphp Nybegynder
04. december 2010 - 21:28 #17
Det passer ikke helt hvad jeg siger ... der er lidt problemer med lidt af hvert ... men her skulle der være noget som virker:

Public om As Range ' område der skal tjekkes igennem
Public dt As String ' tekst der skal søges efter
Public f As String ' første celle der skal søges fra på nye ark
Sub soeg()
    Set om = Range("B2:C14")
   
    dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")
    f = InputBox("Hvilken celle skal der startes med at søge i?", "Start på søgning")
   
    Range(f).Select
   
    On Error Resume Next
    om.Find(What:=dt, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
End Sub
Sub SoegNext()
    Dim felt As String
   
    felt = ActiveCell.Address
   
    On Error Resume Next
    Cells.FindNext(After:=ActiveCell).Activate

    If ActiveCell.Address > felt Then
        MsgBox "her er en ny", vbOKOnly, "Søgning"
    ElseIf ActiveSheet.Index < ActiveWorkbook.Worksheets.Count Then
        Sheets(ActiveSheet.Index + 1).Select
        Range(f).Select
        If ActiveCell.Value = dt Then
            MsgBox "her er en ny", vbOKOnly, "Søgning"
        Else
            On Error Resume Next
            Cells.FindNext(After:=ActiveCell).Activate
            If ActiveCell.Value = dt Then
                MsgBox "her er en ny", vbOKOnly, "Søgning"
            Else
                Call SoegNext
            End If
        End If
    Else
        MsgBox "Der findes ikke flere", vbOKOnly, "Din søgning"
    End If
End Sub
Avatar billede dego Novice
04. december 2010 - 21:33 #18
Jeg er lidt i tvivl om hvor jeg skal putte koden hen?
Avatar billede newbieatphp Nybegynder
04. december 2010 - 21:39 #19
Jeg har lavet et module hvor jeg har lagt det ind under.

Så kan du evt. lave en genvej til de to makroer, eller fx. lave en knap - (genvej vil måske være smartes, da der skiftes ark optil flere gange)
Avatar billede dego Novice
04. december 2010 - 22:29 #20
Jeg er desværre stadig i tvivl om flere ting:-)

I modulet ligger de 3 Public linier for sig, skal de det?

Koden beder mig om at indtaste hvorfra jeg vil søge.
Er dette ikke defineret i dette?
Sub soeg()
Set om = Range("B2:C14")

Knapper kan jeg lave, men hvad menes med en genvej?

Koden søger tilsyneladende kun i ark1.

Jeg får ind i mellem nogle besynderlige fejl, fx. runtime error 1004 og kan fx ikke annulere søgningen ved at trykke på "cancel".
Avatar billede newbieatphp Nybegynder
04. december 2010 - 23:20 #21
De tre public er rigtig nok, de skal bare ligge for sigselv.

Årsagen til, at jeg har lavet så den spørger efter hvor den skal starter, var lidt fordi der skal være en celle i selve området der er aktivt. - Det var mest brugt som en debug ting for mig.

Det kan hurtig ændres til:
f = "allerførste cellen i dit område" ' fx. "B2"
Range(f).select

Det bliver brugt både til at fortælle hvor den skal starte første gang, men også hvor der skal startes, når der skal skiftes ark.

Genvej, der mener jeg - i excel 2003
Funktioner - Makro - Makro - (find den makro der skal have en genvej) - Indstillinger.
Således opretter du en genvejskombination til at afvikle de enkelte makroer - Jeg har fx. brugt CTRL+q til den ene og CTRL+W til den anden.

Jeg har ikke lige oplevet de runtime errors efter jeg lavede den sidste ændring, kan du fortælle i hvilket tilfælde den kommer med det?
Avatar billede dego Novice
05. december 2010 - 00:41 #22
Ok, nu er jeg med!

Jeg har ændret "f" til A1 og ændret Range til at starte i A1.
Dette medfører i øvrigt at hvis jeg trykker cancel til dialogboksen "Hvad vil du gerne søge efter", kommer den ikke længere med runtime error.
Jeg fik også en anden fejl tidligere, men den kan jeg pt. ikke fremprovokere og husker ikke hvad jeg gjorde.

Hvis jeg i celle A1 i ark1,2,3 indtaster "bt" og søger efter dette mens jeg er i ark1, findes "bt" i ark1, men ikke i ark2 og ark3. Jeg skal så aktivere makro2 der så vil hoppe til ark 2 eller ark3 hvor værdien så findes korrekt.
Det virker lidt bøvlet, kan man ikke få de 2 makroer kørt sammen i én (dialogboksen skal helst forblive synlig indtil den lukkes manuelt).

Ligeledes, hvis jeg står i ark1 og søger på "bt" og denne værdi kun findes i ark2 eller ark3, får jeg ikke noget hit, medmindre jeg fyrer nr. 2 makro af bagefter.
Avatar billede dego Novice
05. december 2010 - 00:52 #23
Hvad gør disse 2 i øvrigt, er det en slags kommentarer?

, "Din søgning")
, "Start på søgning")
Avatar billede newbieatphp Nybegynder
05. december 2010 - 08:15 #24
Jeg skal prøve at kigge lidt nærmere på det, når jeg kommer hjem i dag.

Inputbox hedder: tekst, titel
dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")

Så "din søgning" og "start på søgning" er blot en titel på de to inputbokse der kommer frem.
Avatar billede newbieatphp Nybegynder
07. december 2010 - 22:59 #25
Var ikke så meget tid jeg fik den anden dag til at se på det. Det er muligt, at det kan gøres lidt smartere, men dette burde virke:

Public om As Range ' område der skal tjekkes igennem
Public dt As String ' tekst der skal søges efter
Public f As String ' første celle der skal søges fra på nye ark
Sub HeleSoeg()
    Dim felt As String
    Dim sFundet As Boolean 'True ved Fundet eller at der ikke er flere

    dc = -1
    sFundet = False
    f = "B2" 'første celle
    Set om = Range(f & ":C14") 'sidste celle
    If dt = "" Then
        Sheets(1).Select
        Range(f).Select
        dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")
       
        On Error Resume Next
        om.Find(What:=dt, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
       
        If InStr(ActiveCell, dt) > 0 Then
            sFundet = True
            MsgBox "Her er en!", vbOKOnly, "Din søgning"
        End If
    End If
   
    While Not sFundet
        felt = ActiveCell.Address
        On Error Resume Next
        Cells.FindNext(After:=ActiveCell).Activate
       
        If ActiveCell.Address > felt Then
            sFundet = True
            MsgBox "her er en!", vbOKOnly, "Søgning"
        ElseIf ActiveSheet.Index < ActiveWorkbook.Worksheets.Count Then
            Sheets(ActiveSheet.Index + 1).Select
            Range(f).Select
            If InStr(ActiveCell, dt) > 0 Then
                sFundet = True
                MsgBox "Her er en!", vbOKOnly, "Din søgning"
            End If
        Else
            sFundet = True
            dt = ""
            MsgBox "Der findes ikke flere", vbOKOnly, "Din søgning"
        End If
    Wend
End Sub
Avatar billede newbieatphp Nybegynder
07. december 2010 - 23:00 #26
Kan se jeg har glemt at fjerne en linie gammel kode:

dc = -1

Det skal du bare slette
Avatar billede dego Novice
07. december 2010 - 23:48 #27
Jeg har netop afprøvet den, men den er desværre ikke helt ok.

Hvis jeg skriver "bt" i b3 og "eb" i b4 i alle 3 ark og laver en søgning på "bt", finder koden den første værdi i ark2 og ikke værdien i ark1 og ark3.

Jeg får heller ikke mulighed for at ændre søgningen fra fx. "bt" til "eb", da koden tilsyneladende kører i ring når den først er i gang.

Uden at være sikker vil jeg tro at opgaven kun kan lykkes, hvis koden kalder den originale indbyggede søgedialogboks, bl.a. fordi dialogboksen har de forskellige muligheder jeg skal bruge indbygget fra start af, såsom "find næste", "søg på hele cellen/dele af cellen", "gennemsøg hele projektmappen", "søg i værdier" osv.

Hvad med koden jeg nævnte længere oppe i tråden
Sub test()
Range("a1:d5").Application.Dialogs(xlDialogFormulaFind).Show
End Sub

Er der virkelig ingen muligheder for at få den til at søge i et bestemt område/rækker, for den virker 100% som den skal, bortset fra søgeområdet?
Avatar billede newbieatphp Nybegynder
08. december 2010 - 02:25 #28
Jeg har lige prøvet det du har beskrevet.
"bt" i alle b3 cellerne
"eb" i alle b4 cellerne

Når jeg starter søgningen, så søger jeg efter "bt", og der finder den godt nok "bt" i celle b3 på ark1.


Det jeg har gjort ang. søgningen, er at hver gang du kører makroen, så fortsætter den på den gamle søgning indtil du har fået alle. Herefter skulle den nulstille dit søgningsord, og du skulle blive spurgt efter nyt søgeord.

....
Jeg har prøvet at lave noget lidt andet nu, som måske kan bruges. Det er godt nok noget anderledes end det der lige er spurgt til, men prøv kig på det.
Det kræver, at du opretter et faneblad der hedder "data", og at det bliver lagt aller sidst i rækken af faneblade.

Sub heltnysoegning()
Dim FoundCell As Range
Dim LastCell As Range
Dim FirstAddr As String
Dim id As Integer
Dim asheet As String
Dim dt As String

Sheets("data").Cells.Delete Shift:=xlUp

dt = InputBox("Hvad vil du gerne søge efter?", "Din søgning")
Sheets(1).Select
While ActiveSheet.Index < ActiveWorkbook.Sheets.Count
    asheet = ActiveSheet.Name
   
    With Range("A1:A10")
        Set LastCell = .Cells(.Cells.Count)
    End With
    Set FoundCell = Range("A1:A10").Find(what:=dt, after:=LastCell)

    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
    End If
    Do Until FoundCell Is Nothing
        id = id + 1
        Sheets("data").Hyperlinks.Add Anchor:=Sheets("data").Range("A" & id), Address:="", SubAddress:= _
            "" & asheet & "!" & FoundCell.Address, TextToDisplay:="" & FoundCell
   
        Set FoundCell = Range("A1:A10").FindNext(after:=FoundCell)
        If FoundCell.Address = FirstAddr Then
            Exit Do
        End If
    Loop

    ActiveSheet.Next.Select
Wend
End Sub

Samtidig skal du ind 3 steder at rette i det område, hvor den skal søge i.
Avatar billede dego Novice
08. december 2010 - 20:38 #29
Koden finder umiddelbart alle de indtastede værdier.

Hvis jeg indtaster "bt" i celle A2 i ark1,2,3 og kører koden, findes "bt" ganske vist i alle 3 ark, men samtidig skiftes der ark til dataarket hvor der så er links til de 3 fundne værdier i ark1, ark2, ark3.

De fundne links er klikbare og virker også, men desværre er funktionaliteten ikke helt som jeg skal bruge...
Avatar billede dego Novice
14. december 2010 - 20:59 #30
Løsningen er ikke helt som håbet, men da du har brugt en masse tid fortjener du dine points så send mig venligst et svar!
Avatar billede newbieatphp Nybegynder
25. december 2010 - 19:54 #31
Okay, her er et svar
God jul
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