Excel - Tìm một số cụ thể trong danh sách?

Vấn đề

Tôi muốn tạo macro trong Excel như sau:
  • Khi chúng ta nhấp vào nút lệnh, nó sẽ nhắc nhập số vào hộp nhập.
  • Sau khi nhập số, nó sẽ đưa chúng ta đến ô có số và số sau sẽ được điền vào thời gian hiện tại.

Mẫu như sau:

Khi tôi bấm Command và nhập số 307304 vào hộp nhập. nó sẽ đưa tôi đến ô cụ thể và thời gian bắt đầu nên được ghi lại. Nếu tôi bấm một lần nữa thời gian kết thúc sẽ được nắm bắt. (các điều kiện sẽ được sử dụng để tính thời gian hiện tại).

 Nhân viên # Thời gian bắt đầu Thời gian kết thúc

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Dung dịch

Thử đi. Thói quen sử dụng là doTimeStamp
  • Ý tưởng là bạn sẽ kết nối thói quen này với nút lệnh. Khi bạn nhấp vào nó, nó sẽ yêu cầu id id và sẽ nhập ngày bắt đầu (nếu nó trống) hoặc ngày kết thúc (nếu nó trống) và sau đó nhắc bạn một lần nữa cho id tiếp theo. Nó sẽ yêu cầu bạn cho id cho đến khi bạn nhập vào chỗ trống và điểm đó sẽ thoát.

 Tùy chọn rõ ràng

Công khai Sub doTimeStamp ()

Dim lRow As Long

Dim sSearchText dưới dạng Chuỗi

Dim lEmpID dài

Dim sTgtSheet dưới dạng chuỗi

'tên của trang tính có id

sTgtSheet = "Trang tính 1"

Làm

sSearchText = InputBox ("Vui lòng nhập ID nhân viên", "Ghi thời gian")

sSearchText = Trim (sSearchText)

Nếu (sSearchText = vbNullString) _

Sau đó

'Không có dữ liệu được nhập. sau đó bỏ

GoTo Loop_Bottom

Kết thúc nếu

Nếu không (IsNumeric (sSearchText)) _

Sau đó

'văn bản được nhập không phải là số.

MsgBox "ID nhân viên không hợp lệ. ID nhân viên chỉ có thể là chữ số. Thử lại", vbExclamation + vbOKOnly

GoTo Loop_Bottom

Kết thúc nếu

Nếu (InStr (1, sSearchText, ".")> 0) _

Sau đó

'văn bản được nhập có một số thập phân.

MsgBox "ID nhân viên không hợp lệ. ID nhân viên chỉ có thể là chữ số. Thử lại", vbExclamation + vbOKOnly

GoTo Loop_Bottom

Kết thúc nếu

'xác định hàng trong cột 1

lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Columns (1))

Nếu (lRow = 0) _

Sau đó

'tìm kiếm trở lại không có hit

MsgBox "Không tìm thấy ID nhân viên. Hãy thử lại", vbIn information + vbOKOnly

GoTo Loop_Bottom

Kết thúc nếu

If (Sheets (sTgtSheet) .Cells (lRow, "B") = vbNullString) _

Sau đó

'ô của hàng tìm thấy có cột B trống

Trang tính (sTgtSheet) .Cells (lRow, "B") = Bây giờ

Else If (Sheets (sTgtSheet) .Cells (lRow, "C") = vbNullString) _

Sau đó

'ô của hàng tìm thấy có cột C trống

Trang tính (sTgtSheet) .Cells (lRow, "C") = Bây giờ

Khác

'ô của hàng tìm thấy có cột B và C được điền vào

MsgBox "Thời gian bắt đầu và kết thúc đã được ghi lại cho nhân viên" & sSearchText, vbIn information + vbOKOnly

Kết thúc nếu

Vòng lặp_Bottom:

'vòng lặp cho đến khi sSearchText trống

Vòng lặp While (sSearchText vbNullString)

Kết thúc phụ

Hàm công khai getItemLocation (sLookFor As String, _

rngSearch As Range, _

Tùy chọn bFullString As Boolean = True, _

Tùy chọn bLastOccurance As Boolean = True, _

Tùy chọn bFindRow As Boolean = True) Miễn là

'Để xác định hàng / cột đầu tiên / cuối cùng trong phạm vi cho một chuỗi cụ thể

Dim Cell As Range

Dim iLookAt là số nguyên

Dim iSearchDir là số nguyên

Dim iSearchOdr là số nguyên

Nếu (bFullString) _

Sau đó

iLookAt = xlWhole

Khác

iLookAt = xlPart

Kết thúc nếu

Nếu (bLastOccurance) _

Sau đó

iSearchDir = xlPreingly

Khác

iSearchDir = xlNext

Kết thúc nếu

Nếu không (bFindRow) _

Sau đó

iSearchOdr = xlByColumns

Khác

iSearchOdr = xlByRows

Kết thúc nếu

Với rngSearch

Nếu (bLastOccurance) _

Sau đó

Đặt ô = .Tìm (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Khác

Đặt Cell =.

Kết thúc nếu

Kết thúc với

Nếu tế bào không là gì thì

getItemLocation = 0

Khác Nếu không (bFindRow) _

Sau đó

getItemLocation = Cell.Column

Khác

getItemLocation = Cell.Row

Kết thúc nếu

Đặt ô = Không có gì

Chức năng kết thúc

Cảm ơn rizvisa1 cho mẹo này.

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên