Nhờ giúp đoạn code tự động điền công thức và thời gian nhập liệu

Liên hệ QC

nguyenhoangtuananh9897

Thành viên mới
Tham gia
6/4/22
Bài viết
38
Được thích
11
Chào mọi người,

Nhờ mọi người giúp mình đoạn code đơn giản sau: Khi mình nhập mã sản phẩm vào cột A, cột B tự hiện ra tên sản phẩm, cột C D và E lần lượt hiện ra ngày tháng và năm nhập liệu. Lưu các giá trị ở cột B C D và E ở dạng value.

Dữ liệu nguồn là bảng L -> M

Chúc mọi người một ngày tốt lành.
 

File đính kèm

  • A.xlsx
    8.7 KB · Đọc: 7
Mình thấy phức tạp và khó phết đấy.
Phần viết công thức vào các ô ở cột B C D E bằng code thì mình có thể làm được, vấn đề mình gặp phải là mình không biết xử lý thế nào để chỉ khi nào ô ở cột A có giá trị thì code tự điền công thức vào các ô tương ứng ở cột B C D E.
 
Upvote 0
Phần viết công thức vào các ô ở cột B C D E bằng code thì mình có thể làm được, vấn đề mình gặp phải là mình không biết xử lý thế nào để chỉ khi nào ô ở cột A có giá trị thì code tự điền công thức vào các ô tương ứng ở cột B C D E.
Code trong Module:
Mã:
Option Explicit

Public Function VlookupUDF(ByVal LookupVL As String, ByVal Rng As Range, ByVal Col As Long) As String
Dim I As Long, Arr(), U As Long
Arr = Rng.Value
U = UBound(Arr)
For I = 1 To U
    If UCase(LookupVL) = UCase(Arr(I, 1)) Then
        VlookupUDF = Arr(I, Col)
        Exit Function
    End If
Next
If I > U Then VlookupUDF = "#N/A"
End Function

Code trong module sheet1:
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, M As Integer
Set Rng = Columns("A")
If Target.Cells.Count = 1 Then
    If Not Intersect(Target, Rng) Is Nothing Then
        If Cells(Target.Row, "C") = "" Then
            Change (Target.Row)
        Else
            M = MsgBox("ÐaÞ coì dýÞ liêòu, Coì thay ðôÒi không?", vbYesNo + vbInformation)
            If M = vbYes Then
                Change (Target.Row)
            End If
        End If
    End If
End If
End Sub
Private Sub Change(ByVal Rws As Long)
    Cells(Rws, "B") = VlookupUDF(Cells(Rws, "A"), Range("L2:M12"), 2) 'SýÒa dýÞ liêòu nguôÌn õÒ ðây
    Cells(Rws, "C") = Day(Date)
    Cells(Rws, "D") = Month(Date)
    Cells(Rws, "E") = Year(Date)
End Sub

Biết được code đơn giản thì chắc bạn cũng biết viết code đấy, chịu khó lên
 

File đính kèm

  • a.xlsm
    17.1 KB · Đọc: 8
Upvote 0
Code trong Module:
Mã:
Option Explicit

Public Function VlookupUDF(ByVal LookupVL As String, ByVal Rng As Range, ByVal Col As Long) As String
Dim I As Long, Arr(), U As Long
Arr = Rng.Value
U = UBound(Arr)
For I = 1 To U
    If UCase(LookupVL) = UCase(Arr(I, 1)) Then
        VlookupUDF = Arr(I, Col)
        Exit Function
    End If
Next
If I > U Then VlookupUDF = "#N/A"
End Function

Code trong module sheet1:
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, M As Integer
Set Rng = Columns("A")
If Target.Cells.Count = 1 Then
    If Not Intersect(Target, Rng) Is Nothing Then
        If Cells(Target.Row, "C") = "" Then
            Change (Target.Row)
        Else
            M = MsgBox("ÐaÞ coì dýÞ liêòu, Coì thay ðôÒi không?", vbYesNo + vbInformation)
            If M = vbYes Then
                Change (Target.Row)
            End If
        End If
    End If
End If
End Sub
Private Sub Change(ByVal Rws As Long)
    Cells(Rws, "B") = VlookupUDF(Cells(Rws, "A"), Range("L2:M12"), 2) 'SýÒa dýÞ liêòu nguôÌn õÒ ðây
    Cells(Rws, "C") = Day(Date)
    Cells(Rws, "D") = Month(Date)
    Cells(Rws, "E") = Year(Date)
End Sub

Biết được code đơn giản thì chắc bạn cũng biết viết code đấy, chịu khó lên
Chúc bạn một ngày tốt lành :victory:
 
Upvote 0
Chào mọi người,

Nhờ mọi người giúp mình đoạn code đơn giản sau: Khi mình nhập mã sản phẩm vào cột A, cột B tự hiện ra tên sản phẩm, cột C D và E lần lượt hiện ra ngày tháng và năm nhập liệu. Lưu các giá trị ở cột B C D và E ở dạng value.

Dữ liệu nguồn là bảng L -> M

Chúc mọi người một ngày tốt lành.
Thử xem file, hy vọng đúng ý.
Tôi đã tạm lập thêm 1 Sh DanhMuc cho bạn
Thử bằng cách:
1/ Nhập mã số Sp vào A../Sh DaTa ===> Kiểm tra B,C,D,E
2/Thay đổi B.. hoặc C...===> kiểm tra xem A.. và B.. xem có thay đổi gì không.
 

File đính kèm

  • A(Mr.NguyenhoanTuanAnh).xlsm
    29.2 KB · Đọc: 8
Upvote 0
Code trong Module:
Mã:
Option Explicit

Public Function VlookupUDF(ByVal LookupVL As String, ByVal Rng As Range, ByVal Col As Long) As String
Dim I As Long, Arr(), U As Long
Arr = Rng.Value
U = UBound(Arr)
For I = 1 To U
    If UCase(LookupVL) = UCase(Arr(I, 1)) Then
        VlookupUDF = Arr(I, Col)
        Exit Function
    End If
Next
If I > U Then VlookupUDF = "#N/A"
End Function

Code trong module sheet1:
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, M As Integer
Set Rng = Columns("A")
If Target.Cells.Count = 1 Then
    If Not Intersect(Target, Rng) Is Nothing Then
        If Cells(Target.Row, "C") = "" Then
            Change (Target.Row)
        Else
            M = MsgBox("ÐaÞ coì dýÞ liêòu, Coì thay ðôÒi không?", vbYesNo + vbInformation)
            If M = vbYes Then
                Change (Target.Row)
            End If
        End If
    End If
End If
End Sub
Private Sub Change(ByVal Rws As Long)
    Cells(Rws, "B") = VlookupUDF(Cells(Rws, "A"), Range("L2:M12"), 2) 'SýÒa dýÞ liêòu nguôÌn õÒ ðây
    Cells(Rws, "C") = Day(Date)
    Cells(Rws, "D") = Month(Date)
    Cells(Rws, "E") = Year(Date)
End Sub

Biết được code đơn giản thì chắc bạn cũng biết viết code đấy, chịu khó lên
em xin lỗi e chưa đọc kỹ mà không biết thu hồi bài ^^
 
Upvote 0
Nhờ mọi người xem giúp mình file này. Mình chỉ biết đây là lỗi nhỏ nhưng không biết sửa như thế nào :)
Lỗi xuất hiện khi mình nhập dữ liệu vào ô A2 của sheet Data
Code bị tô vàng ở đoạn:
Cells(Rws, "C").Formula = "=IFERROR(INDEX(DU_LIEU!P:p;MATCH(Data!A2;DU_LIEU!O:O;0));"""")"

Cám ơn mọi người rất nhiều.
 

File đính kèm

  • A.xlsm
    68.9 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Nhờ mọi người xem giúp mình file này. Mình chỉ biết đây là lỗi nhỏ nhưng không biết sửa như thế nào :)
Lỗi xuất hiện khi mình nhập dữ liệu vào ô A2 của sheet Data
Code bị tô vàng ở đoạn:
Cells(Rws, "C").Formula = "=IFERROR(INDEX(DU_LIEU!P:p;MATCH(Data!A2;DU_LIEU!O:O;0));"""")"

Cám ơn mọi người rất nhiều.
Sửa tất cả dấu chấm phẩy thành dấu phẩy trong công thức
 
Upvote 0
...
If Not Intersect(Target, Rng) Is Nothing Then
If Cells(Target.Row, "C") = "" Then
Change (Target.Row)
Else
M = MsgBox("ÐaÞ coì dýÞ liêòu, Coì thay ðôÒi không?", vbYesNo + vbInformation)
If M = vbYes Then
Change (Target.Row)
End If
End If
End If
...
Private Sub Change(ByVal Rws As Long)
Cells(Rws, "B") = VlookupUDF(Cells(Rws, "A"), Range("L2:M12"), 2) 'SýÒa dýÞ liêòu nguôÌn õÒ ðây
Cells(Rws, "C") = Day(Date)
Cells(Rws, "D") = Month(Date)
Cells(Rws, "E") = Year(Date)
End Sub
Chuyển lô gic lại mọt chút thì code đơn giản hơn:

M = vbNo
If Not Intersect(Target, Rng) Is Nothing Then
If Cells(Target.Row, "C") = "" Then
M = vbYes
Else
M = MsgBox("ÐaÞ coì dýÞ liêòu, Coì thay ðôÒi không?", vbYesNo + vbInformation)
End If
End If
If M = vbYes Then
rw = Target.Row
Cells(rw, "B") = VlookupUDF(Cells(rw, "A"), Range("L2:M12"), 2) 'SýÒa dýÞ liêòu nguôÌn õÒ ðây
Cells(rw, "C") = Day(Date)
Cells(rw, "D") = Month(Date)
Cells(rw, "E") = Year(Date)
End If

Chú thích:
Gặp những CSDL tối quan trọng hoặc run realtime thì người ta lấy Date vào mọt biến rồi mới trích Day, Month, Year từ đấy ra.
Lý do: nếu "rất xui xẻo" đúng vào tích tắc cuối cùng cuả cuối tháng hay cuối năm thì ngày sẽ ra trật với năm tháng. Tuy nhiên, vì khả năng này rất rất thấp cho nên code như bạn cũng chả sao.
 
Lần chỉnh sửa cuối:
Upvote 0
Có phải dấu ngăn cách các thành phần trong công thức trong VBA luôn là dấu phẩy, và mình không thể đổi sang dấu chấm phẩy phải không nhỉ. :)
Cho dù Control Panel có đặt là gì thì VBA cũng chỉ chấp nhận phân cách đối số là dấu phẩy khi ta dùng nó để điền công thức. Khi vào trang tính thì Excel tự sửa lại theo C. Panel.
 
Upvote 0
Lý do: nếu "rất xui xẻo" đúng vào tích tắc cuối cùng cuả cuối tháng hay cuối năm thì ngày sẽ ra trật với năm tháng. Tuy nhiên, vì khả năng này rất rất thấp cho nên code như bạn cũng chả sao.
Cảm ơn bác đã góp ý, đúng là khả năng này theo lý thuyết có thể xảy ra được thật! Không biết tốc độ của code chạy với nhảy thời gian thực tế có thể hay không (Nếu file nặng, nhiều công thức mà chưa tắt tính toán tự động thì khả năng này cao hơn nhiều :D )
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom