Topic Những câu hỏi về code, xin giải thích các code... đã quá dài nên mình đóng nó lại và mở topic khác
Tất cả những bài viết liên quan đến việc nhờ giải thích, xử lý và gỡ rối code VBA, các bạn vui lòng đăng tại đây!
Cảm ơn
Mình có tại A9:C9 và L9:N9 có chứa công thức bên trong
Mình muốn copy công thức trên từ A10:C10 đến "A10xx:C10xx" và L10:N10 đến "L10xx:N10xx".
Biết rằng mình chốt dòng cần Paste Special Formular bằng cách tại dòng "A10xx 1 : C10xx 1" bằng chữ "End"
Và chốt tại dòng "L10xx 1:N10xx 1" bằng một công thức khác (ví dụ như sum hay if,....)
Mình có làm thử bằng Macro nhưng khổ nỗi nó ko biết Paste đến đâu là ngưng.
Chân thành cám ơn.
Mình có tại A9:C9 và L9:N9 có chứa công thức bên trong
Mình muốn copy công thức trên từ A10:C10 đến "A10xx:C10xx" và L10:N10 đến "L10xx:N10xx".
Biết rằng mình chốt dòng cần Paste Special Formular bằng cách tại dòng "A10xx +1 : C10xx +1" bằng chữ "End"
Và chốt tại dòng "L10xx +1:N10xx +1" bằng một công thức khác (ví dụ như sum hay if,....)
Mình có làm thử bằng Macro nhưng khổ nỗi nó ko biết Paste đến đâu là ngưng.
Chân thành cám ơn.
Bạn chẳng đưa cái file lên gì cả, tôi nhắm mắt làm bừa cho bạn luôn!
Giả sử hàng màu vàng chứa công thức chuẩn (từ hàng 9), trong file tôi có một nút lệnh, khi bấm nút này sẽ có một inputbox hiện lên và đề nghị bạn nhập số hàng cần copy công thức (dĩ nhiên số hàng nhập vào phải lớn hơn 9, vì đó là hàng chuẩn). Khi bạn nhập số xong thì nó sẽ copy toàn bộ công thức xuống dưới. Hàng cuối cùng + 1 sẽ là một hàm, với tôi tôi tạm chọn hàm COUNTA, bạn tùy cơ xử lý hàm của mình.
Đây là thủ tục cho nút lệnh:
Mã:
Sub NhapCongThuc()
Dim ipt
ipt = InputBox("Must be greater than 9", "Input row number")
ipt = Fix(Val(ipt))
If ipt > 9 Then
Range("A10:C1000, L10:N1000").ClearContents
Range("A9:C9").AutoFill Range("A9:C" & ipt), xlFillValues
Range("L9:N9").AutoFill Range("L9:N" & ipt), xlFillValues
With Range("A" & ipt + 1)
.Formula = "=COUNTA(" & Range("A9:A" & ipt).Address(0, 0) & ")"
.AutoFill Range("A" & ipt + 1 & ":C" & ipt + 1), xlFillValues
End With
With Range("L" & ipt + 1)
.Formula = "=COUNTA(" & Range("L9:L" & ipt).Address(0, 0) & ")"
.AutoFill Range("L" & ipt + 1 & ":N" & ipt + 1), xlFillValues
End With
Else
MsgBox "It's not done!"
End If
End Sub
Bạn chẳng đưa cái file lên gì cả, tôi nhắm mắt làm bừa cho bạn luôn!
Giả sử hàng màu vàng chứa công thức chuẩn (từ hàng 9), trong file tôi có một nút lệnh, khi bấm nút này sẽ có một inputbox hiện lên và đề nghị bạn nhập số hàng cần copy công thức (dĩ nhiên số hàng nhập vào phải lớn hơn 9, vì đó là hàng chuẩn). Khi bạn nhập số xong thì nó sẽ copy toàn bộ công thức xuống dưới. Hàng cuối cùng + 1 sẽ là một hàm, với tôi tôi tạm chọn hàm COUNTA, bạn tùy cơ xử lý hàm của mình.
Đây là thủ tục cho nút lệnh:
Mã:
Sub NhapCongThuc()
Dim ipt
ipt = InputBox("Must be greater than 9", "Input row number")
ipt = Fix(Val(ipt))
If ipt > 9 Then
Range("A10:C1000, L10:N1000").ClearContents
Range("A9:C9").AutoFill Range("A9:C" & ipt), xlFillValues
Range("L9:N9").AutoFill Range("L9:N" & ipt), xlFillValues
With Range("A" & ipt + 1)
.Formula = "=COUNTA(" & Range("A9:A" & ipt).Address(0, 0) & ")"
.AutoFill Range("A" & ipt + 1 & ":C" & ipt + 1), xlFillValues
End With
With Range("L" & ipt + 1)
.Formula = "=COUNTA(" & Range("L9:L" & ipt).Address(0, 0) & ")"
.AutoFill Range("L" & ipt + 1 & ":N" & ipt + 1), xlFillValues
End With
Else
MsgBox "It's not done!"
End If
End Sub
Mình xin lỗi, để mình bổ sung file.
Trong file mình có 2 sheet là Traicay và Dientu, mình muốn mỗi sheet có 1 code để copy 1 loạt công thức diễn giải như trong file.
Cám ơn các bạn đã nhiệt tình hướng dẫn.
Copy code này bỏ vào sheet2. Nếu đúng ý thì chế biến cho sheet1
*** Hình như cái dạng này nếu dùng Table thì nó sẽ tự động điền công thức cho mình mà
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
With Target.Offset(-1)
.Offset(, -2).Resize(2, 2).FillDown
.Offset(, 5).Resize(2).FillDown
End With
End If
End Sub
Copy code này bỏ vào sheet2. Nếu đúng ý thì chế biến cho sheet1
*** Hình như cái dạng này nếu dùng Table thì nó sẽ tự động điền công thức cho mình mà
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
With Target.Offset(-1)
.Offset(, -2).Resize(2, 2).FillDown
.Offset(, 5).Resize(2).FillDown
End With
End If
End Sub
Em không được lanh trong lĩnh vực này lắm, em có tự mò mẫm bằng Macro còn hiểu sơ sơ, bác quanghai1969 viết các code này em mù luôn. Đã thế em knock out ngay từ cái khai báo đầu tiên "Private Sub Worksheet_Change(ByVal Target As Range)"
Trước đây em toàn biết sub hay dim gì thôi @@
Em ko thấy chỗ nào assign macro để chạy được hết
Em không được lanh trong lĩnh vực này lắm, em có tự mò mẫm bằng Macro còn hiểu sơ sơ, bác quanghai1969 viết các code này em mù luôn. Đã thế em knock out ngay từ cái khai báo đầu tiên "Private Sub Worksheet_Change(ByVal Target As Range)"
Trước đây em toàn biết sub hay dim gì thôi @@
Em ko thấy chỗ nào assign macro để chạy được hết
Sub NhapCongThuc()
Dim ipt
ipt = InputBox("Must be greater than 9", "Input row number")
ipt = Fix(Val(ipt))
If ipt > 9 Then
Range("A10:C1000, L10:N1000").ClearContents
Nhờ mọi người giải thích vì sao đoạn code này không hoạt động ak
Em đang làm một file bán hàng, muốn thêm 1 cái validation động mà khi sử dụng cái đoạn code này thì không hoạt động.
Mong cao nhân chỉ giúp ak, em cảm ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet4.Range("TenCT")
.Range("$A$2:$A$" & Range("$A$65000").End(xlUp).Row).Name = "TenCT"
End With
With Sheet4.Range("TenHH")
.Range("$C$2:$C$" & Range("$C$65000").End(xlUp).Row).Name = "TenHH"
End With
End Sub
Update: Em đã đính kèm file cho các bác dễ hình dung ạ
Bạn chưa nói rỏ là bạn gởi cái macro thân iêu của bạn vô trang tính nào?
Nhưng dù sao macro của bạn có bậc tự do quá rọng hay sao í, bạn nên ràng buột bớt lại chăng?!
Bạn chưa nói rỏ là bạn gởi cái macro thân iêu của bạn vô trang tính nào?
Nhưng dù sao macro của bạn có bậc tự do quá rọng hay sao í, bạn nên ràng buột bớt lại chăng?!
Em để ở sheet4 để nó tự update vào list mỗi khi mình thêm dữ liệu vào các cột kia ak, sau đó thì có 1 cái validation ở sheet 1 nhưng ở file minh họa em chỉ để ở 1 sheet thôi cũng được ak
em gà vba lắm, mới học được một ít, mong các bác chỉ bảo ak
Em để ở sheet4 để nó tự update vào list mỗi khi mình thêm dữ liệu vào các cột kia ak, sau đó thì có 1 cái validation ở sheet 1 nhưng ở file minh họa em chỉ để ở 1 sheet thôi cũng được ak
em gà vba lắm, mới học được một ít, mong các bác chỉ bảo ak
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Sheet4")
.Range("$A$2:$A$" & Range("$A$65000").End(xlUp).Row).Name = "TenCT"
.Range("$C$2:$C$" & Range("$C$65000").End(xlUp).Row).Name = "TenHH"
End With
End Sub
Em đang làm một file bán hàng, muốn thêm 1 cái validation động mà khi sử dụng cái đoạn code này thì không hoạt động.
Mong cao nhân chỉ giúp ak, em cảm ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet4.Range("TenCT")
.Range("$A$2:$A$" & Range("$A$65000").End(xlUp).Row).Name = "TenCT"
End With
With Sheet4.Range("TenHH")
.Range("$C$2:$C$" & Range("$C$65000").End(xlUp).Row).Name = "TenHH"
End With
End Sub
Update: Em đã đính kèm file cho các bác dễ hình dung ạ
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet4
.Range([A2], [A65536].End(3)).Name = "TenCT"
.Range([C2], [C65536].End(3)).Name = "TenHH"
End With
End Sub
Up rồi mới thấy bài 159, nhưng bài 159 có thể sai tên sheet vì sheet đã có tên là List