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úc307301
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àngCô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.