Làm thế nào để viết công thức hàm công thức trong VBA thay thế viết trong Excell (vd: countif), sau đó coppy công thức tự động xuống các hàng tiếp theo ạ?
Có 2 cách:
Cách 1: gán công thức trực tiếp vào 1 ô rồi kết hợp lệnh Filldown như sau:
Ví dụ:
gán hàm SUM(A2:D2) vào ô E2 thì:
Range("E2").Formula = "=SUM(A2:D2)"
Sao chép công thức từ ô E2 tới ô E10:
Range("E2:E10").Filldown
Bỏ công thức, giữ nguyên kết quả cho vùng E2:E10
Range("E2:E10").Value = Range("E2:E10").Value
Với cách này bạn chú ý là khi gán công thức, nếu trong công thức có dùng dấu " thì tại vị trí đó bạn viết 2 lần dấu "", ví dụ:
Range("E2").Formula = "=IF(A2="""",""Đúng"",""Sai"")"
thì kết quả công thức tại ô E2 sẽ là =IF(A2="","Đúng","Sai")
Cách 2: sử dụng cách viết hàm trong VBA như sau:
Range("E2").Value =WorksheetFunction.Sum(range("A2:D2"))
Range("G2").Value =WorksheetFunction.CountIf(Range("A2:D2"), range("F2"))
Khi đó kết quả tại các ô E2, G2 sẽ là kết quả của hàm Sum, hàm Countif luôn (mà không thông qua 3 bước ở cách 1)
Với việc filldown công thức thì bạn dùng vòng lặp:
Dim i as long
For i = 2 to 10
Range("E" & i).Value =WorksheetFunction.Sum(range("A" & i & ":D" & i))
Next i
Dạ, Cám ơn thầy ạ