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 sluttid

307301

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 Eksplisitt

Offentlig 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.

Forrige Artikkel Neste Artikkel

Beste Tips