Tìm dòng cuối cùng đã có dữ liệu trong 1 cột chứa công thức

Liên hệ QC

nvtnet

Thành viên thường trực
Tham gia
31/5/11
Bài viết
269
Được thích
15
file của em có 1 cột ngày bán, gõ bằng tay mất công quá, nên em chạy bằng công thức gán today();
Vì vậy Em đang viết một đoạn code để gán giá trị ngày trước khi đóng file nhằm cố định hàm today() của ngày đã nhập.
Vấn đề ở chỗ các hàm xác định lastrow nó toàn tính luôn cả các ô chứa công thức nhưng chưa có giá trị của công thức.
Vì vậy mong các bác giúp xác định ô cuối cùng tại cột a (đã có giá trị của công thức) giúp em
em trân thành cảm ơn
 

File đính kèm

  • vidu.xlsx
    10.9 KB · Đọc: 7
file của em có 1 cột ngày bán, gõ bằng tay mất công quá, nên em chạy bằng công thức gán today();
Vì vậy Em đang viết một đoạn code để gán giá trị ngày trước khi đóng file nhằm cố định hàm today() của ngày đã nhập.
Vấn đề ở chỗ các hàm xác định lastrow nó toàn tính luôn cả các ô chứa công thức nhưng chưa có giá trị của công thức.
Vì vậy mong các bác giúp xác định ô cuối cùng tại cột a (đã có giá trị của công thức) giúp em
em trân thành cảm ơn
Hy vọng giúp được bạn:
Mã:
Lastrow= Columns("A").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlValues).Row
 
Upvote 0
file của em có 1 cột ngày bán, gõ bằng tay mất công quá, nên em chạy bằng công thức . . .
Có thể gợi ý bạn cách sau:
Cài macro sự kiện tại các ô vùng nhập liệu (cột 'B'); Khi ta nhập liệu vô ô nào đó thì ô bên trái nó được cập nhật ngày hiện tại do macro
 
Upvote 0
cảm ơn các bác ạ, để em code thử sự kiện change, hihi có vậy em cũng không nghĩ ra
 
Upvote 0
Gợi ý thêm:
Bạn có thể khai báo thêm 2 tham biến phía trên macro sự kiện, đó là
Dim Rws As Long
Dim Rng As Range

Thêm macro sự kiện khi trang tính đó được kích hoạt, Macro này chứa các dòng lệnh để
(*) Xác định dòng cuối của cột 'B': (Rws + 9)
(*) Đưa vùng "B1:B" & Rws vào tham biến Rng

Tất nhiên làm vậy có tiện nhưng tốn thêm chút đĩnh bộ nhớ

Chúc bạn vui!
 
Upvote 0
cảm ơn các bác ạ, để em code thử sự kiện change, hihi có vậy em cũng không nghĩ ra
Cho bạn code này, dán vào sheet Trang tính.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B5000")) Is Nothing Then
    If Target(1, 0).Value = "" Then 'Sua thanh <>"" neu muon su dung cau lenh duoi
        'vbans = MsgBox("Da co du lieu. Ban co muon chep de len ko?", vbOKCancel + vbDefaultButton1)
        'If vbans = vbOK Then
            'With Target(1, 0)
            '.Value = Date
            '.EntireColumn.AutoFit
            'End With
        'End If
    'Else
        With Target(1, 0)
            .Value = Date
            '.EntireColumn.AutoFit
        End With
    End If
End If
End Sub
Phần trong nháy là tùy biến thêm để trường hợp bạn sửa lại sản phẩm và có thể muốn đổi ngày hoặc không. Hiện tại mình đang tắt đi vì mình không biết bạn có cần không
 
Upvote 0
em đã thử ạ, nhưng có 1 điều là khi snag ngày mới; nhập dữ liệu thì nó thay đổi toàn bộ theo ngày mới. có cách nào mà khi code đã chèn rồi thì
Cho bạn code này, dán vào sheet Trang tính.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B5000")) Is Nothing Then
    If Target(1, 0).Value = "" Then 'Sua thanh <>"" neu muon su dung cau lenh duoi
        'vbans = MsgBox("Da co du lieu. Ban co muon chep de len ko?", vbOKCancel + vbDefaultButton1)
        'If vbans = vbOK Then
            'With Target(1, 0)
            '.Value = Date
            '.EntireColumn.AutoFit
            'End With
        'End If
    'Else
        With Target(1, 0)
            .Value = Date
            '.EntireColumn.AutoFit
        End With
    End If
End If
End Sub
Phần trong nháy là tùy biến thêm để trường hợp bạn sửa lại sản phẩm và có thể muốn đổi ngày hoặc không. Hiện tại mình đang tắt đi vì mình không biết bạn có cần không
nhưng vấn đề là khi sang ngày mới, nhập dữ liệu mới thì nó cập nhật lại hết ngày của hôm trước, mình muốn khi nó đã được code nhập rồi, lần sau nếu dữ liệu cột b thay đổi nó không sửa nữa; mà chỉ có thể sửa bằng tay
 
Upvote 0
em đã thử ạ, nhưng có 1 điều là khi snag ngày mới; nhập dữ liệu thì nó thay đổi toàn bộ theo ngày mới. có cách nào mà khi code đã chèn rồi thì

nhưng vấn đề là khi sang ngày mới, nhập dữ liệu mới thì nó cập nhật lại hết ngày của hôm trước, mình muốn khi nó đã được code nhập rồi, lần sau nếu dữ liệu cột b thay đổi nó không sửa nữa; mà chỉ có thể sửa bằng tay
Bạn đã thử chưa???
 
Upvote 0
Gợi ý thêm:
Bạn có thể khai báo thêm 2 tham biến phía trên macro sự kiện, đó là
Dim Rws As Long
Dim Rng As Range

Thêm macro sự kiện khi trang tính đó được kích hoạt, Macro này chứa các dòng lệnh để
(*) Xác định dòng cuối của cột 'B': (Rws + 9)
(*) Đưa vùng "B1:B" & Rws vào tham biến Rng

Tất nhiên làm vậy có tiện nhưng tốn thêm chút đĩnh bộ nhớ

Chúc bạn vui!
như vậy mỗi lần có sự thay dổi số liệu nó lại gán lại; dữ liệu em lên tới vài chục ngàn, không biết máy trụ được không. Cảm ơn bác ạ
Bài đã được tự động gộp:

rồi ạ, em thay đổi ngày hệ thống, vào nhập tiếp dữ liệu thì toàn bộ thay đổi theo ngày hiện tại
 
Upvote 0
em thay đổi ngày hệ thống, vào nhập tiếp dữ liệu thì toàn bộ thay đổi theo ngày hiện tại
Nhập tiếp hay nhập điều chỉnh? Nếu nhập tiếp (tức chưa có ngày) thì nó thay đổi theo ngày hệ thống là đúng rồi. Còn nếu có sẵn ngày rồi, bạn sửa lại sản phẩm ngày không bị thay đổi nhé
(Nếu muốn test thì có thể sửa ngày trên file thành ngày 11,10,9... rồi nhập thử chứ cần gì đổi giờ hệ thống?)
 
Upvote 0
Nhập tiếp hay nhập điều chỉnh? Nếu nhập tiếp (tức chưa có ngày) thì nó thay đổi theo ngày hệ thống là đúng rồi. Còn nếu có sẵn ngày rồi, bạn sửa lại sản phẩm ngày không bị thay đổi nhé
(Nếu muốn test thì có thể sửa ngày trên file thành ngày 11,10,9... rồi nhập thử chứ cần gì đổi giờ hệ thống?)
ý mình là thế này: ví dụ mình nhập được 10 dữ liệu rồi; tương ứng đã có 10 ngày đã được chèn; sau đó thay đổi ngảy hệ thống. vào nhập dòng thứ 11 thì 10 dòng ngày đã được chèn trước đó thay đổi theo luôn.
Mình muốn 10 dòng kia không thay đổi theo. Tức là code chỉ chèn ngày 1 lần. Sau này không kiểm tra lại các ô đã chèn cho dù có làm gì đi nữa,
Bài đã được tự động gộp:

Đã dùng VBA rồi, sao lại dùng thêm công thức? :starwars:
mình chủ yếu tự học, nên toàn mò mẫm, kiến thức chưa đủ, nhiều cái muốn làm mà không nghĩ ra được hihi
 
Upvote 0
Web KT
Back
Top Bottom