Đúng rồi mình viết nhầm - Xin được cáo lỗi và chuyển lại FileCho mình hỏi ceel nó là cái gì thế, có phải ý bác là cell không?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SL As Double, Arr(), I As Long, Lr As Long
Dim rngMa As Range, rngSL As Range
Set rngMa = Range("D4")
Set rngSL = Range("G7")
If Target.Address = rngMa.Address Or Target.Address = rngSL.Address Then
If rngMa <> "" And rngSL <> "" Then
SL = rngSL.Value - Fix(rngSL.Value)
Lr = Cells(Rows.Count, "AA").End(xlUp).Row
If Lr < 4 Then Exit Sub
Arr = Range("AA4:AB" & Lr).Value
For I = 1 To UBound(Arr)
If UCase(Arr(I, 1)) = UCase(rngMa.Value) Then
Arr(I, 2) = SL
Exit For
End If
Next
Range("AA4:AB" & Lr) = Arr
End If
End If
End Sub
Bạn đã tính tới các mã trước đó đã có dữ liệu sẵn hay chưa?Bác xem có phải như thế này không.
Chưa được bạn ơi ! Khi mình thay đổi dữ liệu ở D4 và G7 đi thì Code không chạy nữaBác xem có phải như thế này không.
Bác bật macro lên chưa vậy, làm gì có chuyện code không chạy. Mình có thử lại rồi mà vẫn OKChưa được bạn ơi ! Khi mình thay đổi dữ liệu ở D4 và G7 đi thì Code không chạy nữa
Mình nói rõ hơn là : Tại D4 dữ liệu sẽ thay đổi bằng cách chọn theo Lis hoặc nhập từ bàn phím từ KH1 ... KH12
Tại G7 : Là dữ liệu số thay đổi liên tục (Không cố định) được nhập từ bàn phím
Người nhập liệu có thể nhập dữ liệu từ D4 trước hoặc ngược lại có thể nhập từ G7 trước
Bạn xem tes lại giúp
Cảm ơn bạn mình sẽ tes thử. Đúng như bạn nói : 2 tình huống đóCode trong module worksheet nhé:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim SL As Double, Arr(), I As Long, Lr As Long Dim rngMa As Range, rngSL As Range Set rngMa = Range("D4") Set rngSL = Range("G7") If Target.Address = rngMa.Address Or Target.Address = rngSL.Address Then If rngMa <> "" And rngSL <> "" Then SL = rngSL.Value - Fix(rngSL.Value) Lr = Cells(Rows.Count, "AA").End(xlUp).Row If Lr < 4 Then Exit Sub Arr = Range("AA4:AB" & Lr).Value For I = 1 To UBound(Arr) If UCase(Arr(I, 1)) = UCase(rngMa.Value) Then Arr(I, 2) = SL Exit For End If Next Range("AA4:AB" & Lr) = Arr End If End If End Sub
Bạn đã tính tới không có mã trùng nào hoặc là các mã trước đó đã có dữ liệu sẵn hay chưa?
Mình chỉ làm theo yêu cầu của thớtCode trong module worksheet nhé:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim SL As Double, Arr(), I As Long, Lr As Long Dim rngMa As Range, rngSL As Range Set rngMa = Range("D4") Set rngSL = Range("G7") If Target.Address = rngMa.Address Or Target.Address = rngSL.Address Then If rngMa <> "" And rngSL <> "" Then SL = rngSL.Value - Fix(rngSL.Value) Lr = Cells(Rows.Count, "AA").End(xlUp).Row If Lr < 4 Then Exit Sub Arr = Range("AA4:AB" & Lr).Value For I = 1 To UBound(Arr) If UCase(Arr(I, 1)) = UCase(rngMa.Value) Then Arr(I, 2) = SL Exit For End If Next Range("AA4:AB" & Lr) = Arr End If End If End Sub
Bạn đã tính tới các mã trước đó đã có dữ liệu sẵn hay chưa?
Cái này thì tùy thớt thôi, nhưng 1 bảng mà chỉ nhập 1 giá trị duy nhất thì nó quá vô lý. Nhập xong cái này, thay mã khác nhập số khác có vẻ hợp lý hơn.2. Theo nội dung thì thớt không nói gì tới lưu dữ liệu mà mình đang hiểu là dữ liệu là mới nhất.
Cảm ơn bạn nhiều nhiều. Mình đã tes thử đúng như cái mình cần rồiCode trong module worksheet nhé:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim SL As Double, Arr(), I As Long, Lr As Long Dim rngMa As Range, rngSL As Range Set rngMa = Range("D4") Set rngSL = Range("G7") If Target.Address = rngMa.Address Or Target.Address = rngSL.Address Then If rngMa <> "" And rngSL <> "" Then SL = rngSL.Value - Fix(rngSL.Value) Lr = Cells(Rows.Count, "AA").End(xlUp).Row If Lr < 4 Then Exit Sub Arr = Range("AA4:AB" & Lr).Value For I = 1 To UBound(Arr) If UCase(Arr(I, 1)) = UCase(rngMa.Value) Then Arr(I, 2) = SL Exit For End If Next Range("AA4:AB" & Lr) = Arr End If End If End Sub
Bạn đã tính tới các mã trước đó đã có dữ liệu sẵn hay chưa?
Tôi rất phục bạn ở cách bắt bài tình huống của người dùng (Không chỉ riêng bài này của tôi). Tôi thấy rất nhiều bài của bạn đoán ý, bắt bài rất tốt - Xin cảm ơn, cảm ơn nhiềuCái này thì tùy thớt thôi, nhưng 1 bảng mà chỉ nhập 1 giá trị duy nhất thì nó quá vô lý. Nhập xong cái này, thay mã khác nhập số khác có vẻ hợp lý hơn.
Mà theo mình thấy thì vẫn nên tạo button "Nhập Liệu" thì hay hơn, khi nào thấy dữ liệu đúng mới ấn nhập chứ nếu vừa nhập mã cũ xong, ấn droplist để đổi mã mới (mã thứ 2) nó cũng chạy số lượng mã cũ (mã 1). Rồi nhỡ may mã 2 bấm lộn, chọn sang mã 3 thì cái mã 2 vừa bấm lộn đó vô tình cũng có số liệu không mong muốn
Bạn xem xử lý dùm mình tý chỗ này nữa :Code trong module worksheet nhé:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim SL As Double, Arr(), I As Long, Lr As Long Dim rngMa As Range, rngSL As Range Set rngMa = Range("D4") Set rngSL = Range("G7") If Target.Address = rngMa.Address Or Target.Address = rngSL.Address Then If rngMa <> "" And rngSL <> "" Then SL = rngSL.Value - Fix(rngSL.Value) Lr = Cells(Rows.Count, "AA").End(xlUp).Row If Lr < 4 Then Exit Sub Arr = Range("AA4:AB" & Lr).Value For I = 1 To UBound(Arr) If UCase(Arr(I, 1)) = UCase(rngMa.Value) Then Arr(I, 2) = SL Exit For End If Next Range("AA4:AB" & Lr) = Arr End If End If End Sub
Bạn đã tính tới các mã trước đó đã có dữ liệu sẵn hay chưa?
Cảm ơn bạn đã nhắc nhở - Xin cảm ơnĐã nhận tiêu đề viết sai thì mình chỉnh lại cho đúng đi. Để tiêu đề nguyên đó có khi vào thùng rác trước khi nhận được đáp án thỏa mãn. @@
Bài này thế nào rồi bạn, trong file bạn gửi mình có thử số trên nhưng nó không báo lỗi gìBạn xem xử lý dùm mình tý chỗ này nữa :
Bạn cho khống chế số liệu sau dấu phảy chỉ lấy đúng 3 chữ số giúp mình với - Không biết có phải do hiên tại nó đang ngầm định quá dài ( 0,0230000000447035 ) hay do việc sắp xếp thứ tự mã điều kiện KH trong File gốc không theo thứ tự nên khi sáp vào tính toán trong File gốc của mình thì nó báo lỗi dòng Range("AA4:AB" & Lr) = Arr
Mong bạn quan tâm giúp - Xin cảm ơn
Bạn giúp cho khống chế số liệu sau dấu phảy chỉ lấy đúng 3 chữ số giúp mình với - Hiên tại nó đang ngầm định quá dài ( 0,0230000000447035 ) làm ảnh hưởng tới việc tính toán trước đó trong File - Cảm ơn sự nhiệt thành của bạn - Xin cảm ơnBài này thế nào rồi bạn, trong file bạn gửi mình có thử số trên nhưng nó không báo lỗi gì
Bác befaint dùng worksheetfunction thay hàm round của vba chắc có lý do đấy chứ?Arr(I, 2) = SL
-->
Arr(I, 2) = worksheetfunction.round(SL, 3)
Nếu dùng application.round thì tương tự worksheet round phải không anh? Em kiểm tra một số trường hợp thấy kết quả giống nhau