Duong.bach
Thành viên mới
- Tham gia
- 28/3/20
- Bài viết
- 34
- Được thích
- 2
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr
Dim i As Integer
sArr = Range("A1").CurrentRegion
If Target.Address = "$D$1" Then
If Target <= 10 And Target >= 1 Then
Range("F1") = sArr(Target, 2)
Columns(5).Delete
End If
End If
If Target.Address = "$E$1" Then
If Target >= 11 And Target <= 20 Then
Range("C1") = sArr(Target Mod 10, 1)
Columns(4).Delete
Columns(3).Insert
End If
End If
End Sub
Thanks pro rất nhiều@Duong.bach
Chuột phải vào sheet tab --> chọn view code --> dán code dưới đây
Mã:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim sArr Dim i As Integer sArr = Range("A1").CurrentRegion If Target.Address = "$D$1" Then If Target <= 10 And Target >= 1 Then Range("F1") = sArr(Target, 2) Columns(5).Delete End If End If If Target.Address = "$E$1" Then If Target >= 11 And Target <= 20 Then Range("C1") = sArr(Target Mod 10, 1) Columns(4).Delete Columns(3).Insert End If End If End Sub
Ôi bác ơi, ý em ko phải là cái source nó liên tiếp như thế, nó phải nó số bất kỳ cơ. bác có code nào tổng quát kiểu như theo cell koCảm ơn pro rất nhiều
Tiện bác cho em hỏi code em viết như này vấn đề ở đâu mà k chạy dc,viết đơn lẻ từng cái thì đúng mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
x = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Range("e1").Value = x
End If
If Target.Address = "$E$1" Then
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
End If
End Sub
Thử sửa lại thế này xemCảm ơn pro rất nhiều
Tiện bác cho em hỏi code em viết như này vấn đề ở đâu mà k chạy dc,viết đơn lẻ từng cái thì đúng mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
x = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Range("e1").Value = x
End If
If Target.Address = "$E$1" Then
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
End If
End Sub
Bài đã được tự động gộp:
Ôi bác ơi, ý em ko phải là cái source nó liên tiếp như thế, nó phải nó số bất kỳ cơ. bác có code nào tổng quát kiểu như theo cell ko
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then
Application.EnableEvents = False
Range("e1").Value = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0)
Application.EnableEvents = True
End If
If Target.Address = "$E$1" Then
Application.EnableEvents = False
Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))"
Application.EnableEvents = True
End If
End Sub
Thanks bác, cái này mới đúng mong muốn của em nè.Thử sửa lại thế này xem
Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$1" Then Application.EnableEvents = False Range("e1").Value = Application.VLookup(Range("d1"), Range("a1:b10"), 2, 0) Application.EnableEvents = True End If If Target.Address = "$E$1" Then Application.EnableEvents = False Range("d1").Formula = "=INDEX(Sheet2!A1:A12,MATCH(Sheet2!E1,Sheet2!B1:B12,0))" Application.EnableEvents = True End If End Sub
Do cái sự kiện Worksheet_Change sẽ xảy ra khi giá trị trong ô thay đổi. Vậy thì khi D1 thay đổi bạn tính E1 (Lúc này đã có ô thay đổi giá trị) lúc này sự kiện Worksheet_Change tiếp tục chạy mà E1 thay đổi bạn lại tính D1 (Lúc này đã có ô thay đổi giá trị), Worksheet_Change tiếp tục chạy bạn tính E1 ... Nó chạy mãi. Chính vì vậy lệnh Application.EnableEvents = False sẽ tắt tự kiện Worksheet_Change và tính gía trị cho ô D1 hoặc E1 sau đó cho nó hoạt động trở lại bằng lệnh Application.EnableEvents = TrueCảm ơn bác, cái này mới đúng mong muốn của em nè.
2 cái lệnh bác thêm vào nó có ý nghĩa như nào vậy ạ ?
Tại thấy bài mẫu nó liên tiếp vậy nên code vậy đó bạn.Ôi bác ơi, ý em ko phải là cái source nó liên tiếp như thế, nó phải nó số bất kỳ cơ. bác có code nào tổng quát kiểu như theo cell ko