Code vba cập nhật dữ liệu khi giá trị thay đổi

Liên hệ QC

Vanminh123

Thành viên mới
Tham gia
4/12/20
Bài viết
19
Được thích
4
XIn chào mọi người !
Mình có bảng dữ liệu như hình ( khoảng 25.000 dòng ) . Dữ liệu mới nhất nằm trên, cũ nhất nằm dưới. Ví dụ khi mình sửa giá trị 1 ô nào đó trong cột Tiền hàng ( VÍ dụ ô D14 hiện đang là 60.000 giờ muốn đổi thành 160.000 thì mình mong muốn các dòng có khách hàng tên là Khách A tính từ dòng đang sửa trở lên ( Cụ thế là số HĐ :4, 7,10,13. Còn HĐ Số 1 nằm dưới không cần tính ) Thì các dữ liệu sẽ tính toán lại hết . ( Do nợ cũ phiếu hiện tại = còn nợ phiếu gần nhất ). Cảm ơn mọi người




1607076364133.png
Giao diện chỉnh sửa mong muốn

1607076710260.png
 

File đính kèm

  • no cu.xlsm
    13.2 KB · Đọc: 9
Lần chỉnh sửa cuối:
Bạn cần viết hàm tìm kiếm theo cột khách hàng, và chỉnh sửa những cột tương ứng ở những dòng đó là ok.
 
Upvote 0
XIn chào mọi người !
Mình có bảng dữ liệu như hình ( khoảng 25.000 dòng ) . Dữ liệu mới nhất nằm trên, cũ nhất nằm dưới. Ví dụ khi mình sửa giá trị 1 ô nào đó trong cột Tiền hàng ( VÍ dụ ô D14 hiện đang là 60.000 giờ muốn đổi thành 160.000 thì mình mong muốn các dòng có khách hàng tên là Khách A tính từ dòng đang sửa trở lên ( Cụ thế là số HĐ :4, 7,10,13. Còn HĐ Số 1 nằm dưới không cần tính ) Thì các dữ liệu sẽ tính toán lại hết . ( Do nợ cũ phiếu hiện tại = còn nợ phiếu gần nhất ). Cảm ơn mọi người




View attachment 250591
Giao diện chỉnh sửa mong muốn

View attachment 250597
Bạn kiểm tra file dưới xem sao. Bạn chỉ cần nhập giá trị vào cột tiền hàng hoặc cột đã thu là nó tự tính ra kết quả nhé.
 

File đính kèm

  • no cu.xlsm
    20.9 KB · Đọc: 7
Upvote 0
Bạn kiểm tra file dưới xem sao. Bạn chỉ cần nhập giá trị vào cột tiền hàng hoặc cột đã thu là nó tự tính ra kết quả nhé.
Code bạn dùng sự kiện Change khi thay đổi dữ liệu khá hay và rất nhanh.Mình cảm ơn bạn nhiều. Mình có tùy chỉnh lại code dạng sub để mình gán vào nút bấm nhưng code bị lổi tính toán sai 1 dòng. Nhờ bạn giúp

Cụ thể: khi mình cần chỉnh sửa số hđ sô 2 . nhưng code lại chạy từ hđ số 5 trở lên. Mình đã thử cho vị trí + thêm 1 cũng không được. Nhờ bạn sửa lại code
1607127975019.png

Mã:
Sub Updatenew()

If Range("Q5") > 0 Then ' neu khong tim thay so hoa don
      Dim i As Double, j As Double, n As Double
      Dim ro As Double, na As String
      Dim arr As Variant, brr As Variant
    
  
          'Vi tri Hang nam Bao nhieu
          ro = Range("Q5").Value
        
          'Ten khach hang
          na = Range("R5").Value
        
          'Bang araaay tu Dong dau tien den dong dang chinh sua
          arr = Range("C5:I" & ro)
        
          'update value
          arr(UBound(arr, 1), 4) = arr(UBound(arr, 1), 2) + arr(UBound(arr, 1), 3)
          arr(UBound(arr, 1), 6) = arr(UBound(arr, 1), 4) - arr(UBound(arr, 1), 5)
        
          'get array size
          ReDim brr(1 To UBound(arr, 1))
        
          'get first debit(con no) value
          brr(1) = arr(UBound(arr, 1), 6)
          n = 1
          For i = UBound(arr, 1) - 1 To LBound(arr, 1) Step -1
              If arr(i, 7) = na Then
                  arr(i, 2) = Range("L5").Value ' tien hang
                  arr(i, 3) = brr(n)
                  arr(i, 4) = arr(i, 2) + arr(i, 3)
                  arr(i, 5) = Range("M5").Value ' da thu
                  arr(i, 6) = arr(i, 4) - arr(i, 5)
                  n = n + 1
                  brr(n) = arr(i, 6)
              End If
          Next i
        
          ' xuat ra
          Range("C5:I" & ro).Value = arr
  
End If
End Sub
 

File đính kèm

  • no cu Nut bam.xlsm
    21.2 KB · Đọc: 15
Lần chỉnh sửa cuối:
Upvote 0
Code bạn dùng sự kiện Change khi thay đổi dữ liệu khá hay và rất nhanh.Mình cảm ơn bạn nhiều. Mình có tùy chỉnh lại code dạng sub để mình gán vào nút bấm nhưng code bị lổi tính toán sai 1 dòng. Nhờ bạn giúp

Cụ thể: khi mình cần chỉnh sửa số hđ sô 2 . nhưng code lại chạy từ hđ số 5 trở lên. Mình đã thử cho vị trí + thêm 1 cũng không được. Nhờ bạn sửa lại code
View attachment 250622

Mã:
Sub Updatenew()

If Range("Q5") > 0 Then ' neu khong tim thay so hoa don
      Dim i As Double, j As Double, n As Double
      Dim ro As Double, na As String
      Dim arr As Variant, brr As Variant
  

          'Vi tri Hang nam Bao nhieu
          ro = Range("Q5").Value
      
          'Ten khach hang
          na = Range("R5").Value
      
          'Bang araaay tu Dong dau tien den dong dang chinh sua
          arr = Range("C5:I" & ro)
      
          'update value
          arr(UBound(arr, 1), 4) = arr(UBound(arr, 1), 2) + arr(UBound(arr, 1), 3)
          arr(UBound(arr, 1), 6) = arr(UBound(arr, 1), 4) - arr(UBound(arr, 1), 5)
      
          'get array size
          ReDim brr(1 To UBound(arr, 1))
      
          'get first debit(con no) value
          brr(1) = arr(UBound(arr, 1), 6)
          n = 1
          For i = UBound(arr, 1) - 1 To LBound(arr, 1) Step -1
              If arr(i, 7) = na Then
                  arr(i, 2) = Range("L5").Value ' tien hang
                  arr(i, 3) = brr(n)
                  arr(i, 4) = arr(i, 2) + arr(i, 3)
                  arr(i, 5) = Range("M5").Value ' da thu
                  arr(i, 6) = arr(i, 4) - arr(i, 5)
                  n = n + 1
                  brr(n) = arr(i, 6)
              End If
          Next i
      
          ' xuat ra
          Range("C5:I" & ro).Value = arr

End If
End Sub
Tặng bạn Sub này:
PHP:
Public Sub Update_Gpe()
Dim sArr(), I As Long, N As Long, R As Long, SoHD As Long, TenKH As String
Dim TienHang As Double, DaThu As Double, NoCu As Double
    sArr = Range("C5", Range("C5").End(xlDown)).Resize(, 7).Value
    R = UBound(sArr)
    SoHD = Range("K5").Value
    TienHang = Range("L5").Value
    DaThu = Range("M5").Value
'---------------------Cap nhat du lieu theo So Hoa don'
For I = R To 1 Step -1
    If sArr(I, 1) = SoHD Then
        sArr(I, 2) = TienHang
        sArr(I, 4) = sArr(I, 2) + sArr(I, 3)
        sArr(I, 5) = DaThu
        sArr(I, 6) = sArr(I, 4) - sArr(I, 5)
        TenKH = sArr(I, 7)
        NoCu = sArr(I, 6)
        N = I
        Exit For
    End If
Next I
'----------------------Cap nhat du lieu cac dong tren'
If N > 1 Then
    For I = N - 1 To 1 Step -1
        If sArr(I, 7) = TenKH Then
            sArr(I, 3) = NoCu
            sArr(I, 4) = sArr(I, 2) + sArr(I, 3)
            sArr(I, 6) = sArr(I, 4) - sArr(I, 5)
            NoCu = sArr(I, 6)
        End If
    Next I
End If
'------------------------------------'
Range("C5").Resize(R, 7) = sArr
End Sub
 
Upvote 0
Tặng bạn Sub này:
PHP:
Public Sub Update_Gpe()
Dim sArr(), I As Long, N As Long, R As Long, SoHD As Long, TenKH As String
Dim TienHang As Double, DaThu As Double, NoCu As Double
    sArr = Range("C5", Range("C5").End(xlDown)).Resize(, 7).Value
    R = UBound(sArr)
    SoHD = Range("K5").Value
    TienHang = Range("L5").Value
    DaThu = Range("M5").Value
'---------------------Cap nhat du lieu theo So Hoa don'
For I = R To 1 Step -1
    If sArr(I, 1) = SoHD Then
        sArr(I, 2) = TienHang
        sArr(I, 4) = sArr(I, 2) + sArr(I, 3)
        sArr(I, 5) = DaThu
        sArr(I, 6) = sArr(I, 4) - sArr(I, 5)
        TenKH = sArr(I, 7)
        NoCu = sArr(I, 6)
        N = I
        Exit For
    End If
Next I
'----------------------Cap nhat du lieu cac dong tren'
If N > 1 Then
    For I = N - 1 To 1 Step -1
        If sArr(I, 7) = TenKH Then
            sArr(I, 3) = NoCu
            sArr(I, 4) = sArr(I, 2) + sArr(I, 3)
            sArr(I, 6) = sArr(I, 4) - sArr(I, 5)
            NoCu = sArr(I, 6)
        End If
    Next I
End If
'------------------------------------'
Range("C5").Resize(R, 7) = sArr
End Sub
TUyệt vời. Mình cảm ơn bạn nhiều
 
Upvote 0
cảm ơn bạn. Nếu làm được mình đã không lên đây hỏi rồi. Bạn thử xem có làm được không ?
Trả lời kiểu này xấc lắm.
Người ta chỉ dẫn cách làm. Nếu bạn nghĩ cách ấy không đúng thì giải thích chỗ nào không đúng. Nếu bạn nghĩ cần thêm chỉ dẫn thì hỏi thêm. Nếu bạn muốn được code giùm VBA từ a đến z như bài #6 thì nói thẳng cần từ a đến z.
 
Upvote 0
Code bạn dùng sự kiện Change khi thay đổi dữ liệu khá hay và rất nhanh.Mình cảm ơn bạn nhiều. Mình có tùy chỉnh lại code dạng sub để mình gán vào nút bấm nhưng code bị lổi tính toán sai 1 dòng. Nhờ bạn giúp

Cụ thể: khi mình cần chỉnh sửa số hđ sô 2 . nhưng code lại chạy từ hđ số 5 trở lên. Mình đã thử cho vị trí + thêm 1 cũng không được. Nhờ bạn sửa lại code
View attachment 250622

Mã:
Sub Updatenew()

If Range("Q5") > 0 Then ' neu khong tim thay so hoa don
      Dim i As Double, j As Double, n As Double
      Dim ro As Double, na As String
      Dim arr As Variant, brr As Variant
   
 
          'Vi tri Hang nam Bao nhieu
          ro = Range("Q5").Value
       
          'Ten khach hang
          na = Range("R5").Value
       
          'Bang araaay tu Dong dau tien den dong dang chinh sua
          arr = Range("C5:I" & ro)
       
          'update value
          arr(UBound(arr, 1), 4) = arr(UBound(arr, 1), 2) + arr(UBound(arr, 1), 3)
          arr(UBound(arr, 1), 6) = arr(UBound(arr, 1), 4) - arr(UBound(arr, 1), 5)
       
          'get array size
          ReDim brr(1 To UBound(arr, 1))
       
          'get first debit(con no) value
          brr(1) = arr(UBound(arr, 1), 6)
          n = 1
          For i = UBound(arr, 1) - 1 To LBound(arr, 1) Step -1
              If arr(i, 7) = na Then
                  arr(i, 2) = Range("L5").Value ' tien hang
                  arr(i, 3) = brr(n)
                  arr(i, 4) = arr(i, 2) + arr(i, 3)
                  arr(i, 5) = Range("M5").Value ' da thu
                  arr(i, 6) = arr(i, 4) - arr(i, 5)
                  n = n + 1
                  brr(n) = arr(i, 6)
              End If
          Next i
       
          ' xuat ra
          Range("C5:I" & ro).Value = arr
 
End If
End Sub
mình có sửa lại ở file dưới nhé. Bạn ko cần phải nhập vị trí và tên khách hàng làm gì nữa, chỉ cần nhập vào 3 ô kia thui là đủ rùi.
 

File đính kèm

  • no cu Nut bam.xlsm
    22.5 KB · Đọc: 9
Upvote 0
Web KT

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

Back
Top Bottom