Xin giúp đỡ về code VBA copy công thức tương ứng mã nhập (1 người xem)

Liên hệ QC

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

thanhtung2026

Thành viên mới
Tham gia
12/6/14
Bài viết
10
Được thích
0
Xin chào anh chị em giaiphapexcel.com ngày mới chúc mọi người vui vẻ, làm việc hiệu quả.
Em có câu hỏi về code VBA copy công thức ô như sau.
Có 2 bảng excel trong cùng một sheet bảng thứ nhất (em đánh đấu 1 trong bảng excel đính kèm file) có 1 cột có tên là Mã với các ô có số tứ tự 123…27 sau cột mã là các cột a b c d e f g h mỗi cột có các ô có công thức riêng.
ở bảng excel thứ 2 cũng có các cột Mã và a b c d e f g h tương ứng
mục đích của em là bây giờ em gõ vào các ô ở cột Mã của bảng excel thứ 2 tương ứng một trong các số ở cột Mã ở bảng thứ nhất thì các ô ở cột abcd…gh bảng thứ 2 sẽ được copy công thức ở các ô của các cột abcd..gh ở bảng 1.
Vi dụ ở bảng 2 cột Mã ta gõ vào ô thứ nhất số 5 thì các ô thứ nhất của các cột abcd..gh ở bảng 2 sẽ được copy công thức ở các ô abcd..gh ở ô thứ 5 của bạng 1.
ý mình ở đây là các công thức ở các ô abcd..gh ở bảng 1 thì lây số liệu ở bảng 1, vậy khi copy công thức tương ứng xuống bảng 2 thì số liều cũng lấy tương ứng ở bảng 2.
Mong cao thủ nào viết hộ mình code VBA mình cũng đang chập chẹ học VBA mà cái này cần gấp quá. Thanks mọi người.
 

File đính kèm

Xin chào anh chị em giaiphapexcel.com ngày mới chúc mọi người vui vẻ, làm việc hiệu quả.
Em có câu hỏi về code VBA copy công thức ô như sau.
Có 2 bảng excel trong cùng một sheet bảng thứ nhất (em đánh đấu 1 trong bảng excel đính kèm file) có 1 cột có tên là Mã với các ô có số tứ tự 123…27 sau cột mã là các cột a b c d e f g h mỗi cột có các ô có công thức riêng.
ở bảng excel thứ 2 cũng có các cột Mã và a b c d e f g h tương ứng
mục đích của em là bây giờ em gõ vào các ô ở cột Mã của bảng excel thứ 2 tương ứng một trong các số ở cột Mã ở bảng thứ nhất thì các ô ở cột abcd…gh bảng thứ 2 sẽ được copy công thức ở các ô của các cột abcd..gh ở bảng 1.
Vi dụ ở bảng 2 cột Mã ta gõ vào ô thứ nhất số 5 thì các ô thứ nhất của các cột abcd..gh ở bảng 2 sẽ được copy công thức ở các ô abcd..gh ở ô thứ 5 của bạng 1.
ý mình ở đây là các công thức ở các ô abcd..gh ở bảng 1 thì lây số liệu ở bảng 1, vậy khi copy công thức tương ứng xuống bảng 2 thì số liều cũng lấy tương ứng ở bảng 2.
Mong cao thủ nào viết hộ mình code VBA mình cũng đang chập chẹ học VBA mà cái này cần gấp quá. Thanks mọi người.
Nhìn muốn "lòi con mắt" cũng chưa hiểu bạn muốn kết quả thế nào.
Công thức hiện ở 2 bảng trên dưới là khác nhau cho cùng một mã 5.
Nếu lấy công thức bên trên copy xuống dưới thì kết quả sẽ "tào lao" vì số liệu các ô bên trái không có gì, làm sao đây?
Thử cái này cho sheet A1-1 xem sao.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Cll As Range
If Not Intersect(Target, [BI71:BI1000]) Is Nothing Then
If Target.Rows.Count = 1 Then
If Target <> vbNullString Then
Set Rng = [BI3:BI34]
For Each Cll In Rng
If Target.Value = Cll.Value Then
Target.Offset(, 1).Resize(, 10).FormulaR1C1 = Cll.Offset(, 1).Resize(, 10).FormulaR1C1
Exit For
End If
Next Cll
Set Rng = Nothing
Else
Target.Offset(, 1).Resize(, 10) = vbNullString
End If
End If
End If
End Sub[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Nhìn muốn "lòi con mắt" cũng chưa hiểu bạn muốn kết quả thế nào.
Công thức hiện ở 2 bảng trên dưới là khác nhau cho cùng một mã 5.
Nếu lấy công thức bên trên copy xuống dưới thì kết quả sẽ "tào lao" vì số liệu các ô bên trái không có gì, làm sao đây?
Thử cái này cho sheet A1-1 xem sao.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Cll As Range
If Not Intersect(Target, [BI71:BI1000]) Is Nothing Then
If Target.Rows.Count = 1 Then
If Target <> vbNullString Then
Set Rng = [BI3:BI34]
For Each Cll In Rng
If Target.Value = Cll.Value Then
Target.Offset(, 1).Resize(, 10).FormulaR1C1 = Cll.Offset(, 1).Resize(, 10).FormulaR1C1
Exit For
End If
Next Cll
Set Rng = Nothing
Else
Target.Offset(, 1).Resize(, 10) = vbNullString
End If
End If
End If
End Sub[/GPECODE]
cảm ơn bạn mình quên xóa công thức bên dưới. Nhưng đoạn code bạn đã đúng ý mình. Một lần nữa cảm ơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhìn muốn "lòi con mắt" cũng chưa hiểu bạn muốn kết quả thế nào.
Công thức hiện ở 2 bảng trên dưới là khác nhau cho cùng một mã 5.
Nếu lấy công thức bên trên copy xuống dưới thì kết quả sẽ "tào lao" vì số liệu các ô bên trái không có gì, làm sao đây?
Thử cái này cho sheet A1-1 xem sao.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Cll As Range
If Not Intersect(Target, [BI71:BI1000]) Is Nothing Then
If Target.Rows.Count = 1 Then
If Target <> vbNullString Then
Set Rng = [BI3:BI34]
For Each Cll In Rng
If Target.Value = Cll.Value Then
Target.Offset(, 1).Resize(, 10).FormulaR1C1 = Cll.Offset(, 1).Resize(, 10).FormulaR1C1
Exit For
End If
Next Cll
Set Rng = Nothing
Else
Target.Offset(, 1).Resize(, 10) = vbNullString
End If
End If
End If
End Sub[/GPECODE]
Bạn ơi khi mình insert thêm một hàng nữa ở bảng thứ 2 thì code nó báo lỗi If Target <> vbNullString Then này là sao nhỉ.???
 
Upvote 0
Bạn ơi khi mình insert thêm một hàng nữa ở bảng thứ 2 thì code nó báo lỗi If Target <> vbNullString Then này là sao nhỉ.???
Là nó "cằn nhằn" chèn xóa lung tung.
1 là nó báo lỗi thì kệ nó, Reset rồi tiếp tục, thấy nó cằn nhằn thì làm 1 lần rồi thôi.
2 là tạm thời sửa dòng này:
If Not Intersect(Target, [BI71:BI1000]) Is Nothing Then
thành:
If Target.Column = 61 And Target.Row > 70 Then
3 là, sau này bạn chuẩn bị kỹ biểu bảng trước khi viết code, trong Code có viết các địa chỉ rõ ràng như Cột BI, dòng 71 v.v... nếu cứ chèn cột dòng tùy thích thì còn gặp nó "cằn nhằn" tiếp nhiều chuyện nữa.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom