Giúp xây dựng code VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Chào anh chị diễn đàn. Như file đính kèm em muốn thay đổi công thức trong cột F thành công thức trong VBA cho gọn nhẹ (vì bảng tính của em có rất nhiều công thức).

Sub Macro1()
Dim I As Long
For I = 1 To Range("G1").Select
ActiveCell.FormulaR1C1 = "=+COUNTA(R[2]C[-5]:R[326]C[-5])"


Cells(I, 6) = "=+VLOOKUP(i,Tinh,2,0)"
Next I

End Sub

Em làm như này nhưng nó không chạy -+*/
 

File đính kèm

Chào anh chị diễn đàn. Như file đính kèm em muốn thay đổi công thức trong cột F thành công thức trong VBA cho gọn nhẹ (vì bảng tính của em có rất nhiều công thức).
Em làm như này nhưng nó không chạy -+*/

Bạn làm thế là viết công thức vào bảng tính qua vba nên không có chuyện cho gọn nhẹ. (vì trên bảng tính vẫn là công thức)
Còn code sửa theo ý của bạn:
PHP:
Sub Macro1()
Dim I As Long
Sheet1.Range("G1") = "=CountA(A3:A65000)"
For I = 1 To Sheet1.Range("G1").Value
Sheet1.Range("F3").Offset(I - 1, 0) = "=VLOOKUP(B" & I + 3 - 1 & ",Tinh,2,0)"
Next I
End Sub
 
Upvote 0
Bạn làm thế là viết công thức vào bảng tính qua vba nên không có chuyện cho gọn nhẹ. (vì trên bảng tính vẫn là công thức)
Còn code sửa theo ý của bạn:
PHP:
Sub Macro1()
Dim I As Long
Sheet1.Range("G1") = "=CountA(A3:A65000)"
For I = 1 To Sheet1.Range("G1").Value
Sheet1.Range("F3").Offset(I - 1, 0) = "=VLOOKUP(B" & I + 3 - 1 & ",Tinh,2,0)"
Next I
End Sub

Vâng thêm nữa là công thức Sheet1.Range("G1") = "=CountA(A3:A65000)" là vì em không biết I đến đâu. Có cách nào khác thay cách này để code chỉ chạy đến hết bảng tính tự dừng không anh?
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉ vậy thôi chứ làm gì mà phức tạp thế???
Mã:
Sub GPE()
Dim lr As Long
With Sheet1
    lr = .[A65000].End(3).Row
    .Range("F3:F" & lr).Value = "=VLOOKUP(RC[-4],Tinh,2,0)"
    .Range("F3:F" & lr).Value = .Range("F3:F" & lr).Value
End With
End Sub

Hi tại vì em mới bập bẹ VBA nên muốn cái hàm nào đơn giản nhất (chạy chậm chút cũng được) để em có thể hiểu vấn đề và tự áp dụng. Nhìn code của anh thấy hoa cả mắt !$@!!
Cho em hỏi cái End 3. Nếu em thay thành 4 thì nó chạy hết bảng tính, thay bằng 2 thì chạy đến A65000.
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng thêm nữa là công thức Sheet1.Range("G1") = "=CountA(A3:A65000)" là vì em không biết I đến đâu. Có cách nào khác thay cách này để code chỉ chạy đến hết bảng tính tự dừng không anh?

Sheet1.Range("G1") = "=CountA(A3:A65000)", tức là mình thông qua vba nhập cái đoạn =CountA(A3:A65000) vào cell G1 (tương tự như ta nhập bằng tay từ bàn phím vào cell G1).
I đến đâu: I tới giá trị hiện ở cell G1 = =CountA(A3:A65000), cột A có bao nhiêu thì nó chỉ chạy tới đó (cột A có dữ liệu đầy đủ liên tục từ A3).
 
Upvote 0
Khổ bạn quá. code trên là đơn giản nhất rồi. Không vòng lặp, chỉ xác định dòng cuối. Sau đó...gán hàm vlookup như ta gõ ngoài bảng tính = tay thôi. Sau đó paste value lại kết quả. Chỉ vậy thôi...là cái đơn giản nhất quả đất rồi..mà bạn còn nói phức tạp với hoa mắt thì ôi thôi......."Chúc Mừng Năm Mới"

Em cho code vào file mẫu thì ổn. Nhưng khi cho vào file của em (tên sheet không còn là sheet1 mà thay bằng một cái tên khác) thì nó không chạy. Em thay tên ở phần with theo tên sheet của em mà cũng không chạy. Mong anh giải đáp !$@!!
 
Upvote 0
Vậy nếu ở file sau em thay đổi như vậy thì vba cho cột C thay đổi như thế nào??
 

File đính kèm

Upvote 0
Hi em làm được rồi. Cảm ơn mọi người nhiều lắm :-=
 
Upvote 0
Cho em hỏi nếu em đứng ở sheet khác mà bấm chạy code thì sẽ ăn đòn. Em tưởng mình đã cố định tên sheet rồi thì chạy ở sheet nào thì lệnh nó cũng không thay đổi kết quả???
 
Upvote 0
Hi hi hôm nay nhờ mọi người mà em học được khá nhiều.
Code của em chạy ngon lành rồi nhưng có thể tối ưu hóa để nhanh được không? Em chạy đến phần lấy mã xã thì nó khựng lại vài giây mới có kết quả

Sub hpkhuong()
Dim lr As Long
With Sheets("code")
lr = .[a65000].End(3).Row
'Code Tinh
.Range("e3:e" & lr).Value = "=VLOOKUP(RC[-1],Tinh,2,0)"
.Range("e3:e" & lr).Value = Range("e3:e" & lr).Value
'Huyen
.Range("h3:h" & lr).Value = "=+RC[-5]&RC[-3]"
.Range("h3:h" & lr).Value = Range("h3:h" & lr).Value
'Code Huyen
.Range("f3:f" & lr).Value = "=VLOOKUP(RC[+2],huyen,2,0)"
.Range("f3:f" & lr).Value = Range("f3:f" & lr).Value
'Xa
.Range("i3:i" & lr).Value = "=+RC[-7]&RC[-3]"
.Range("i3:i" & lr).Value = Range("i3:i" & lr).Value
'Code xa
.Range("g3:g" & lr).Value = "=VLOOKUP(RC[+2],xa,2,0)"
.Range("g3:g" & lr).Value = Range("g3:g" & lr).Value

End With
End Sub
 
Upvote 0
Vậy anh xem giúp em nhé. Đây là file em phát triển thêm trên mẫu làm thuế nhanh trên mạng mà em quên tác giả (sr). Code em đang xây dựng là ở Module2. Cái phần code mà có chữ TinhTue. Xa Tran. Huyen Van... cũng là công thức addin em sưu tầm trên này.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xem rồi...Thôi file bạn rối như nồi canh hẹ...bố trí tùm lum...không ham code đâu. Thôi xài theo giải pháp của bạn như vậy đi...--=0--=0--=0
Hjx, thế anh bố trí khoa học giúp em lại xem. Em chỉ cần anh code lại ở phần sheet lấy mã code cho tối ưu thôi. Or anh có tài liệu nào học không? Em không biết cách áp dụng những hàm tương tự excel trong vba. Ở phần dữ liệu đầu vào vì khi triết xuất trên phần mềm nhân sự form nó là như vậy nên em muốn giữ nguyên để khi làm mới chỉ copy paste vào. Vậy nên mới có nhiều cột thực ra không cần đến nhưng em vẫn để :(.

Em thấy có phương thức ActiveCell.PasteSpecial (xlPasteValues) thay vì mình tạo thêm code cho nó bằng giá trị chính nó. Vậy cách dùng như thế nào nếu giả sử em muốn thay cho
.Range("g3:g" & lr).Value = .Range("g3:g" & lr).Value
trong
.Range("g3:g" & lr).Value = "=VLOOKUP(RC[+2],xa,2,0)"
.Range("g3:g" & lr).Value = .Range("g3:g" & lr).Value


 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom