Avatar billede familienriis Nybegynder
29. marts 2007 - 17:33 Der er 16 kommentarer og
1 løsning

springe til en celle med det nr man taster ind

Jeg har idag en masse nr. i kollonne A

a1 1000
a2 1001
a3 1002 osv.

Numrerne er faste og skal ALDRIG ændres.

Kan det lade sig gøre at lave en makro gør at hvis man indtaster eks. 1002 i kolonne A, så springer excel til felt a3 som jo indeholder 1002.
Hvis man skriver 1090, så springer den til a1091, da denne vil indeholde nr. 1090.

Jeg skal som sagt aldrig ændre i numrerne, men skal bruge det som en slags "nem" søgefunktion.

LAdf mig høre hvis I overhovedet ikke forstår hvad jeg mener med ovenstående
Avatar billede kabbak Professor
29. marts 2007 - 20:18 #1
Du kan ikke både have faste data i kolonne A og bruge samme kolonne til at taste søgenummer ind.
Så hvilken celle taster du søgenummer ind i ??
Avatar billede kabbak Professor
29. marts 2007 - 20:24 #2
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Then' her indtastes nr i B1, ret til en anden celle hvis det ønskes
        Cells((Target.Value - 1000) + 1, 1).Select
    End If
End Sub


Sættes i arkets modul
Avatar billede familienriis Nybegynder
29. marts 2007 - 21:30 #3
Jep denne løsning virker faktisk rigtig fint, men når man ikke selv programmerer kender man ikke systemets begrænsninger. Derfor kaster jeg lige et spørgsmål op i luften igen :-)

Kan man ikke lave en makro der gør følgende:

Så snart man sætter fokus på en celle i kolonne A skal en makro "gemme" den værdi som er i cellen.  Eks. celle a1 = 1000
Hvis man så taster en ny værdi ind i en af cellerne i kolonne A (eks. i celle a1 indtastes værdien 2000):
1. Der skal flyttes fokus til den celle som indeholder værdien 2000
2. Herefter indsættes den værdi der oprindeligt var i celle a1 som man indtastede i (altså den værdi som blev kopieret allerede ved fokus. På den måde kan A1 stadig hedde 1000 og man kan få fokus i celle A1001 som har værdien 2000

Makroen skal altså
1. kopiere værdien i den aktive celle (så snart der er fokus i kolonne A / eller så snart der ændres i kolonne A)
2. springe til den celle som har den nyindtastede værdi (fuldstændig som det er løst ovenfor)
3. indsætte den oprindelige værdi igen i den celle hvor man skrev det søgte kontonr.


Kan det lade sig gøre?
Avatar billede excelent Ekspert
29. marts 2007 - 22:04 #4
indsæt i arkets kodemodul

Dim værdi, x

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Application.EnableEvents = False
rk = Target.Value - 999
Target = værdi
Cells(rk, 1).Select
Application.EnableEvents = True
værdi = Cells(rk, 1).Value
x = 1
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If x = 0 Then værdi = Target.Value
End Sub
Avatar billede kabbak Professor
29. marts 2007 - 22:05 #5
mit bud

Option Explicit
Dim Old As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I
    If Target.Column = 1 Then
        I = (Target.Value - 1000) + 1
        If I < 1 Then Application.Undo: Exit Sub    ' tjekker om det er et gyldigt nummer
        Application.EnableEvents = False    'slår de automatiske makroer fra, mens der skrives den gamle værdi
        Target = Old
        Application.EnableEvents = True
        Cells(I, 1).Select    ' vælger den valgte række
    End If
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then
        Old = Target    ' fanger den eksisterende værdi i den valgte celle
    End If
End Sub
Avatar billede familienriis Nybegynder
29. marts 2007 - 22:35 #6
ja, det var jo 2 hurtige svar :-)
Jeg har prøvet dem begge af og der er noget der ikke helt virker som det skal i dem begge. Og det er nok bare min egen skyld da jeg ikke har skrevet helt som mit ark er.....

Excelent!
Din version hopper til den celle som den skal, men....
Den værdi som den gemmer i makroen er ikke korrekt. Så længe man ikke "piler" sig op og ned i i kolonne A så virker den, og får sat det korrekte tal ind i den celle som er ændret, men hvis man flytter fokus til en anden celle inden man taster et nyt nr ind, så sætter den ikke det rigtige tal ind.

kabbak
Din version hopper også til den rigtige celle, men...
Den måde din finder frem til cellen på er noget med nr - 1000.
Da jeg har ophold i mine nr. virker dette ikke helt som det skal...
I får lige et eksempel som det ser ud i virkeligheden:
a6 1000
a7 1001
a8 1002
a9 1003
a10 1004
a11 1005
a12 tom
a13 tom
a14 1006
a15 1007
a16 1008
a17 1009
a18 1010
a19 1011
a20 1012
a21 tom
a22 1013 osv.
Der er altsp intet system i hvornår der er en tom celle og man kan altså ikke bruge linienr. til at finde ud af hvor fokus skal være.
Avatar billede excelent Ekspert
29. marts 2007 - 22:45 #7
prøv lige skift den nederste sub med denne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If x = 0 Then værdi = Target.Value
x = 0
End Sub
Avatar billede familienriis Nybegynder
29. marts 2007 - 22:54 #8
jep, nu skrives der den korrekte værdi i den "gamle" celle.
Men vi har desværre stadig problemet med at eks. celle a19 repræsentere værdien 1011 og ikke 1019.

Hvis jeg skriver 1019 sprnger den til a20 som repræsenterer 1012 som vist ovenfor
Avatar billede excelent Ekspert
29. marts 2007 - 23:06 #9
ok prøver lige en anden - skift hele koden med:

Dim værdi, x

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
rk = Target.Value '- 999
Target = værdi
Cells.Find(What:=rk, After:=[A1], LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Select
Application.EnableEvents = True
værdi = ActiveCell.Value
x = 1
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If x = 0 Then værdi = Target.Value
x = 0
End Sub
Avatar billede familienriis Nybegynder
29. marts 2007 - 23:12 #10
YES!!!!!!
Nu var den der.
Det virker rigtig godt. Mange tak for hjælpen. Det er jeg meget glad for.
Så skal der bare svares så der kan inkasseres point. :-)
Avatar billede excelent Ekspert
29. marts 2007 - 23:15 #11
ok
Avatar billede familienriis Nybegynder
31. marts 2007 - 13:16 #12
Jeg har lige fundet nogle uhensigtsmæssigheder i koden ,som jeg vil høre om vi lige kan nå at få rettet til :-)

1.
Jeg har numrene 1000-6999 i min liste i kolonne A. Hvis jeg skriver et tal der er mindre eller større end disse tal eller hvis jeg kommer til at skrive et bogstav så sletter den det tal der står i den aktive celle i kolonne A.
Det er ikke hensigtsmæssig da numrerne 1000-6999 ALTID skal være der.
Hvis man således skriver et tal der ikke findes i kolonne A, skal makroen bare stoppe og ikke foretage sig noget.
Er det noget der kan fikses?

2.
Koden leder efter det indtastede tal i hele arket og springer til den første celle der har det "søgte" tal.
Dette er ikke så godt da jeg evt. kunne have tallet 5000 stående i celle d55.
Koden skal derfor kun lede efter det søgte tal i kolonne A
Kan det lade sig gøre?
Avatar billede excelent Ekspert
31. marts 2007 - 14:18 #13
Dim værdi, x

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
On Error GoTo ud
Application.EnableEvents = False
rk = Target.Value
Target = værdi
Cells.Find(What:=rk, After:=[A1], LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Select
If ActiveCell.Column > 1 Then Cells(ActiveCell.Row, 1).Select
værdi = ActiveCell.Value
x = 1
ud:
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If x = 0 Then værdi = Target.Value
x = 0
End Sub
Avatar billede familienriis Nybegynder
31. marts 2007 - 16:00 #14
Problemet med at indtaste noget som ikke findes i kolonnen eks. "12000" eller "a" er løst, mange tak for det.
Men hvis man eks. skriver "a" sætter den fokus i A1 det ville være meget rart at den sætter fokus på enten den celle man lige var i da man søgte efter et nr. eller i cellen lige under.
Det skyldes at jeg eksempelvis kan stå i a3300 når jeg taster.
Kan man få den til det?

Problemet med at den finder den første "søgte" værdi i hele arket driller også stadig.
I celle a16 har jeg konto 1008 og i celle B16 har jeg en indtastet værdi som tilfældigvis er 1017.
Hvis jeg nu skriver 1017 i kolonne a så skulle den hoppe til celle a26 (se nedenfor) da denne celle indeholder konto 1017, men den stopper istedet ved celle A16 som har værdien 1008, men som i samme række, altså B16 har en indtastet værdi på 1017
Det skal den ikke, den skal KUN søge i Kolonne A efter 1017 og derved stoppe når den finder tallet 1017 i KOL A (Celle A26)

Jeg kan godt selv se at ovenstående er noget speget, så jeg håber at det giver mening for andre end mig selv :o)



a6 1000
a7 1001
a8 1002
a9 1003
a10 1004
a11 1005
a12 tom
a13 tom
a14 1006
a15 1007
a16 1008  (i kolonne B står der tilfældigvis "1017"
a17 1009
a18 1010
a19 1011
a20 1012
a21 tom
a22 1013 osv.
a23 1014
a24 1015
a25 1016
a26 1017
Avatar billede excelent Ekspert
31. marts 2007 - 17:30 #15
prøv lige om denne dutter

Dim værdi, x

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
On Error GoTo ud
Application.EnableEvents = False
rk = Target.Value
Target = værdi
Range("A1:A10000").Find(rk, LookIn:=xlValues).Select
værdi = ActiveCell.Value
x = 1
ud:
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If x = 0 Then værdi = Target.Value
x = 0
End Sub
Avatar billede kabbak Professor
31. marts 2007 - 22:57 #16
et forslag

Dim Data As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For i = 1 To UBound(Data)
        If Data(i, 1) = Target Then
            Cells(i, 1).Select
            Exit For
        End If
    Next
    If i >= UBound(Data) Then Target.Select
    Target.Value = Data(Target.Row, 1)
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Data = Range(Cells(1, 1), Cells(65500, 1).End(xlUp))
End Sub
Avatar billede familienriis Nybegynder
01. april 2007 - 09:24 #17
Jeg har lige prøvet jeres 2 sidste forslag af og de virker begge 2 lige som de skal.
jeg takker endnu engang.

Men da jeg har givet point i dette spørgsmål er der desværre ikke flere point at give.
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