lp0042019.dkdn
Thành viên mới
- Tham gia
- 21/4/20
- Bài viết
- 16
- Được thích
- 2
Bạn xem thử.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ị ạ.
Mình vẫn thấy nó kiểu dạng như công thức rồi bạnBạn xem thử.
Bạn xóa đi thì không phải nhập lại nữa và chỉ nhấn nút thôi mà.Mình vẫn thấy nó kiểu dạng như công thức rồi bạn
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
Chắc ý bạn thế này phải không.Mình vẫn thấy nó kiểu dạng như công thức rồi bạn
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ỉChắc ý bạn thế này phải không.
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ạnBạ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
Thì bạn sửa lại theo hướng tại bài #7 xem đã đúng theo ý bạn chưa ???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
Đú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é.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ỉ
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?Sửa lại chút, tại mình không xem kỹ
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
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 ạ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