Chuyển đổi công thức sang VBA

Liên hệ QC

lp0042019.dkdn

Thành viên mới
Tham gia
21/4/20
Bài viết
16
Được thích
2
Kính chào anh chị,
Nhờ anh chị tạo giúp em code VBA thay cho công thức ở cột C và D trong file đính kèm, Cảm ơn các anh chị ạ.
 

File đính kèm

  • Xuat.xlsm
    10 KB · Đọc: 10
Bạn thử:
Mã:
Sub gancongthuc()
Dim td As Long
Dim i As Long
Dim Arr()
td = Sheet1.Range("D6").Value
Arr = Sheet1.Range("B7:D15").Value
    For i = 1 To 9
       If td > Arr(i, 1) Then
            Arr(i, 2) = 200
            Arr(i, 3) = td + Arr(i, 1) - Arr(i, 2)
       Else
            Arr(i, 2) = 100
            Arr(i, 3) = td + Arr(i, 1) - Arr(i, 2)
       End If
    Next i
Sheet1.Range("B7").Resize(9, 3) = Arr
End Sub
 
Upvote 0
Upvote 0
Bạn thử:
Mã:
Sub gancongthuc()
Dim td As Long
Dim i As Long
Dim Arr()
td = Sheet1.Range("D6").Value
Arr = Sheet1.Range("B7:D15").Value
    For i = 1 To 9
       If td > Arr(i, 1) Then
            Arr(i, 2) = 200
            Arr(i, 3) = td + Arr(i, 1) - Arr(i, 2)
       Else
            Arr(i, 2) = 100
            Arr(i, 3) = td + Arr(i, 1) - Arr(i, 2)
       End If
    Next i
Sheet1.Range("B7").Resize(9, 3) = Arr
End Sub
Kết quả không đúng bạn ơi. Tồn cuối của mỗi dòng ở cột D (cuối dòng trước) so với dòng ở cột B bạn nhé. Cảm ơn bạn
 
Upvote 0
Xin lỗi Hoàng Tuấn 868 Mình nghĩ đoạn code Sheet1.Range("D7").Formula = "=$D$6+SUM(B7:B7)-SUM(C7:C7)"phải sửa lại thế này Sheet1.Range("D7").Formula = "=$D$6+SUM($B$7:B7)-SUM($C$7:C7)" chứ Hoàng Tuấn 868 nhỉ
Đúng rồi bạn ạ, nhưng mình kiểm tra kết quả vẫn đúng nên hơi lười một tí, cảm ơn bạn nhé.
 
Upvote 0
Sửa lại chút, tại mình không xem kỹ :D
Mã:
Sub gancongthuc()
Dim td As Long
Dim i As Long
Dim Arr()
Arr = Sheet1.Range("B6:D15").Value
    For i = 2 To 10
       If Arr(i - 1, 3) > Arr(i, 1) Then
            Arr(i, 2) = 200
       Else
            Arr(i, 2) = 100
       End If
    Arr(i, 3) = Arr(i - 1, 3) + Arr(i, 1) - Arr(i, 2)
    Next i
Sheet1.Range("B6").Resize(10, 3) = Arr
End Sub
 
Upvote 0
Sửa lại chút, tại mình không xem kỹ :D
Mã:
Sub gancongthuc()
Dim td As Long
Dim i As Long
Dim Arr()
Arr = Sheet1.Range("B6:D15").Value
    For i = 2 To 10
       If Arr(i - 1, 3) > Arr(i, 1) Then
            Arr(i, 2) = 200
       Else
            Arr(i, 2) = 100
       End If
    Arr(i, 3) = Arr(i - 1, 3) + Arr(i, 1) - Arr(i, 2)
    Next i
Sheet1.Range("B6").Resize(10, 3) = Arr
End Sub
Code này luộm thuộm lắm. Điển hình, Range("B6: D15") thì cũng in hệt như Range("B6").Resize(10,3), mắc mớ gì phải viết khác nhau cho dễ hiểu lầm?
(tôi chỉ cho cách chỉnh code thôi chứ code làm gì, đúng hay sai yêu cầu thì tôi không biết)
Dim Rg As Range
Set Rg = Sheet1.Range("B6: D15")
Arr = Rg.Value
For i = 2 To UBound(Arr)
Arr(i, 2) = IIF(Arr(i - 1, 3) > Arr(i, 1), 200, 100)
Next i
Rg = Arr
Set Rg = Nothing
 
Upvote 0
Code này luộm thuộm lắm. Điển hình, Range("B6: D15") thì cũng in hệt như Range("B6").Resize(10,3), mắc mớ gì phải viết khác nhau cho dễ hiểu lầm?
(tôi chỉ cho cách chỉnh code thôi chứ code làm gì, đúng hay sai yêu cầu thì tôi không biết)
Dim Rg As Range
Set Rg = Sheet1.Range("B6: D15")
Arr = Rg.Value
For i = 2 To UBound(Arr)
Arr(i, 2) = IIF(Arr(i - 1, 3) > Arr(i, 1), 200, 100)
Next i
Rg = Arr
Set Rg = Nothing
Vâng ạ. Em chỉ hình dung ra các bước cơ bản là: Lấy mảng đó ra, xử lý xong thì ốp nó lại ạ. Chưa biết cách làm cho tối ưu hơn ạ :D
 
Upvote 0
Web KT

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

Back
Top Bottom