Excel - Finn et bestemt nummer i en liste?
Utgave
Jeg vil gjerne lage makro i Excel som nedenfor:- Når vi klikker på kommandoknappen, bør den be om å skrive inn nummeret i innboksboksen.
- Etter at tallet er skrevet inn, skal det ta oss til cellen som har nummeret og sistnevnte skal fylles med gjeldende tid.
Mal er som nedenfor:
Når jeg klikker på Kommando, legger du inn nummeret 307304 i innboksboksen. Det burde ta med meg til den aktuelle cellen, og starttidspunktet skal fanges. Hvis jeg klikker igjen, skal sluttid bli fanget. (thesevalues vil bli brukt til å beregne nåværende tid).
Ansatt # Starttid sluttid307301
307302
307303
307304
307305
307306
307307
307308
307309
307310
Løsning
Prøv dette. Rutinen å bruke er doTimeStamp- Tanken er at du vil koble denne rutinen til kommandoknappen. Når du klikker på den, vil den be om emp id og vil legge inn startdatoen (hvis den er tom) eller sluttdato (hvis den er tom) og deretter spørre deg igjen for neste id. Det vil spørre deg om id til du skriver inn et tomt og det punktet vil det slutte.
Alternativ EksplisittOffentlig Sub doTimeStamp ()
Dim lRå så lenge
Dim sSearchText As String
Dim lEmpID så lenge
Dim sTgtSheet As String
'navn på arket der ids er
sTgtSheet = "Sheet1"
Gjøre
sSearchText = InputBox ("Vennligst skriv inn ansattes ID", "Time Recording")
sSearchText = Trim (sSearchText)
Hvis (sSearchText = vbNullString) _
Deretter
Ingen data ble oppgitt. avslutt deretter
GoTo Loop_Bottom
Slutt om
Hvis ikke (IsNumerisk (sSearchText)) _
Deretter
'skrevet inn var ikke numerisk.
MsgBox "Ugyldig medarbeids-ID. Medarbeids-ID kan bare være siffer. Prøv igjen", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Slutt om
Hvis (InStr (1, sSearchText, ".")> 0) _
Deretter
'Inntastet tekst hadde et desimal.
MsgBox "Ugyldig medarbeids-ID. Medarbeids-ID kan bare være siffer. Prøv igjen", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Slutt om
'Finn raden i kolonne 1
lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Kolumner (1))
Hvis (lRow = 0) _
Deretter
'søk returnerte ingen treff
MsgBox "Employee ID ikke funnet. Prøv igjen", vbInformation + vbOKOnly
GoTo Loop_Bottom
Slutt om
Hvis (Ark (sTgtSheet) .Cells (lRow, "B") = vbNullString) _
Deretter
'celle av den funnet raden har kolonne B tom
Ark (sTgtSheet) .Cells (lRow, "B") = Nå
ElseIf (Ark (sTgtSheet) .Cells (lRow, "C") = vbNullString) _
Deretter
'celle av den funnet raden har kolonne C tom
Ark (sTgtSheet) .Cells (lRow, "C") = Nå
Ellers
'celle av den funnet raden har kolonne B og C fylt inn
MsgBox "Start og sluttid er allerede registrert for Medarbeider" & sSearchText, vbInformation + vbOKOnly
Slutt om
Loop_Bottom:
'loop til sSearchText er et tomt
Loop While (sSearchText vbNullString)
Slutt Sub
Offentlig funksjon getItemLocation (sLookFor As String, _
rngSearch As Range, _
Valgfri bFullString som boolsk = True, _
Valgfri bLastOccurance som boolsk = True, _
Valgfri bFindRow som boolsk = sant) så lenge
'For å finne den første / siste rad / kolonne innenfor et område for en bestemt streng
Dimcelle som rekkevidde
Dim iLookAt As Integer
Dim iSearchDir som helhet
Dim iSearchOdr som helhet
Hvis (bFullString) _
Deretter
iLookAt = xlWhole
Ellers
iLookAt = xlPart
Slutt om
Hvis (bLastOccurance) _
Deretter
iSearchDir = xlForrige
Ellers
iSearchDir = xlNext
Slutt om
Hvis ikke (bFindRow) _
Deretter
iSearchOdr = xlByColumns
Ellers
iSearchOdr = xlByRows
Slutt om
Med rngSearch
Hvis (bLastOccurance) _
Deretter
Sett Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
Ellers
Sett Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Slutt om
Slutt med
Hvis Cell er ingenting da
getItemLocation = 0
ElseIf ikke (bFindRow) _
Deretter
getItemLocation = Cell.Column
Ellers
getItemLocation = Cell.Row
Slutt om
Sett Cell = Ingenting
Sluttfunksjon
Takk til rizvisa1 for dette tipset.