mình cần hỗ trợ viết code VBA lọc list dữ liệu từng cột có FIle đính kèm

Liên hệ QC

sti1

Thành viên mới
Tham gia
21/11/22
Bài viết
4
Được thích
0
Donate (Momo)
Donate
Giới tính
Nam
do mới biết đến VBA nên chưa rành cần mọi người viết giúp mình code để nghiên cứu
mình có data bên sheet2, sheet1 là dãy list theo cột khi mình chọn A thì ra B đến cột cuối
VD : khi chọn nước Việt Nam ở cột A thì ra các tỉnh ở cột B, khi chọn tỉnh rồi thì ra xã ở cột C cứ thế đến hết dữ liệu
mình xin cảm ơn mọi người trước.
 

File đính kèm

  • giupcodeVBAtaolist.xlsx
    25.8 KB · Đọc: 12
Đoạn này chưa hiểu?
"HÀNG 2 LÀ LIST KHI CHỌN 1 DỮ LIỆU TRONG LIST Ở A1 THÌ XUẤT HIỆN LIST B1 VÀ TƯƠNG TỰ ĐẾN CỘT O"
Bạn nói chi tiết xem nào?
 
Đoạn này chưa hiểu?
"HÀNG 2 LÀ LIST KHI CHỌN 1 DỮ LIỆU TRONG LIST Ở A1 THÌ XUẤT HIỆN LIST B1 VÀ TƯƠNG TỰ ĐẾN CỘT O"
Bạn nói chi tiết xe
em muốn code để ra như này ạ
VD : khi chọn nước Việt Nam ở cột A thì ra các tỉnh ở cột B, khi chọn tỉnh rồi thì ra xã ở cột C
 

File đính kèm

  • giupcodeVBAtaolist.xlsx
    26.4 KB · Đọc: 3
do mới biết đến VBA nên chưa rành cần mọi người viết giúp mình code để nghiên cứu
mình có data bên sheet2, sheet1 là dãy list theo cột khi mình chọn A thì ra B đến cột cuối
VD : khi chọn nước Việt Nam ở cột A thì ra các tỉnh ở cột B, khi chọn tỉnh rồi thì ra xã ở cột C cứ thế đến hết dữ liệu
mình xin cảm ơn mọi người trước.
Chỉ là nghiên cứu thôi à bạn.Vậy bạn tìm hiểu cách Record Macro Về Data Validation.Rồi hiểu cách tạo thì làm bước tiếp theo.
 
Làm đại. Các ô chọn là A2, B2, C2 và D2
Click chhuột phải và tên sheet1/viewcode, dán code này vô:
PHP:
Option Explicit

Private Sub Worksheet_Activate()
Dim lr&, i&, rng
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet2")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    rng = .Range("B6:B" & lr).Value2
    For i = 1 To UBound(rng)
        If Not dic.exists(rng(i, 1)) Then dic.Add rng(i, 1), ""
    Next
End With
Range("CV2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
lr = Cells(Rows.Count, "CV").End(xlUp).Row
ActiveWorkbook.Names.Add "ngay", Range("CV2:CV" & lr)
On Error Resume Next
Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=ngay"
Set dic = Nothing
Columns("CV:CY").Hidden = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&, i&, rng
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
If Target.Address(0, 0) = "A2" Then
    If IsEmpty(Target) Then
        Range("B2").ClearContents
        Exit Sub
    End If
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:C" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Target Then
                If Not dic.exists(rng(i, 2)) Then dic.Add rng(i, 2), ""
            End If
        Next
    End With
    Range("CW2:CW10000").ClearContents
    Range("CW2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CW").End(xlUp).Row
    ActiveWorkbook.Names.Add "job", Range("CW2:CW" & lr)
    If WorksheetFunction.CountIf(Range("job"), Range("B2")) = 0 Then Range("B2").ClearContents
    On Error Resume Next
    Range("B2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=job"
    Set dic = Nothing
ElseIf Target.Address(0, 0) = "B2" Then
    If IsEmpty(Target) Then
        Range("C2").ClearContents
        Exit Sub
    End If
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:D" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Range("A2") And rng(i, 2) = Target Then
                If Not dic.exists(rng(i, 3)) Then dic.Add rng(i, 3), ""
            End If
        Next
    End With
    Range("CX2:CX10000").ClearContents
    Range("CX2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CX").End(xlUp).Row
    ActiveWorkbook.Names.Add "sig", Range("CX2:CX" & lr)
    If WorksheetFunction.CountIf(Range("sig"), Range("C2")) = 0 Then Range("C2").ClearContents
    On Error Resume Next
    Range("C2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=sig"
    Set dic = Nothing
ElseIf Target.Address(0, 0) = "C2" Then
    If IsEmpty(Target) Then
        Range("D2").ClearContents
        Exit Sub
    End If
    On Error Resume Next
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:E" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Range("A2") And rng(i, 2) = Range("B2") And rng(i, 3) = Target.Value Then
                If Not dic.exists(rng(i, 4)) Then dic.Add rng(i, 4), ""
            End If
        Next
    End With
    Range("CY2:CY10000").ClearContents
    Range("CY2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CY").End(xlUp).Row
    ActiveWorkbook.Names.Add "id", Range("CY2:CY" & lr)
    If WorksheetFunction.CountIf(Range("id"), Range("D2")) = 0 Then Range("D2").ClearContents
    Range("D2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=id"
    Set dic = Nothing
End If
End Sub
[/code]
 

File đính kèm

  • giupcodeVBAtaolist.xlsm
    42.1 KB · Đọc: 9
Làm đại. Các ô chọn là A2, B2, C2 và D2
Click chhuột phải và tên sheet1/viewcode, dán code này vô:
PHP:
Option Explicit

Private Sub Worksheet_Activate()
Dim lr&, i&, rng
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet2")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    rng = .Range("B6:B" & lr).Value2
    For i = 1 To UBound(rng)
        If Not dic.exists(rng(i, 1)) Then dic.Add rng(i, 1), ""
    Next
End With
Range("CV2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
lr = Cells(Rows.Count, "CV").End(xlUp).Row
ActiveWorkbook.Names.Add "ngay", Range("CV2:CV" & lr)
On Error Resume Next
Range("A2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=ngay"
Set dic = Nothing
Columns("CV:CY").Hidden = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&, i&, rng
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
If Target.Address(0, 0) = "A2" Then
    If IsEmpty(Target) Then
        Range("B2").ClearContents
        Exit Sub
    End If
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:C" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Target Then
                If Not dic.exists(rng(i, 2)) Then dic.Add rng(i, 2), ""
            End If
        Next
    End With
    Range("CW2:CW10000").ClearContents
    Range("CW2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CW").End(xlUp).Row
    ActiveWorkbook.Names.Add "job", Range("CW2:CW" & lr)
    If WorksheetFunction.CountIf(Range("job"), Range("B2")) = 0 Then Range("B2").ClearContents
    On Error Resume Next
    Range("B2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=job"
    Set dic = Nothing
ElseIf Target.Address(0, 0) = "B2" Then
    If IsEmpty(Target) Then
        Range("C2").ClearContents
        Exit Sub
    End If
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:D" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Range("A2") And rng(i, 2) = Target Then
                If Not dic.exists(rng(i, 3)) Then dic.Add rng(i, 3), ""
            End If
        Next
    End With
    Range("CX2:CX10000").ClearContents
    Range("CX2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CX").End(xlUp).Row
    ActiveWorkbook.Names.Add "sig", Range("CX2:CX" & lr)
    If WorksheetFunction.CountIf(Range("sig"), Range("C2")) = 0 Then Range("C2").ClearContents
    On Error Resume Next
    Range("C2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=sig"
    Set dic = Nothing
ElseIf Target.Address(0, 0) = "C2" Then
    If IsEmpty(Target) Then
        Range("D2").ClearContents
        Exit Sub
    End If
    On Error Resume Next
    With Sheets("Sheet2")
        lr = .Cells(Rows.Count, "B").End(xlUp).Row
        rng = .Range("B6:E" & lr).Value
        For i = 1 To UBound(rng)
            If rng(i, 1) = Range("A2") And rng(i, 2) = Range("B2") And rng(i, 3) = Target.Value Then
                If Not dic.exists(rng(i, 4)) Then dic.Add rng(i, 4), ""
            End If
        Next
    End With
    Range("CY2:CY10000").ClearContents
    Range("CY2").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
    lr = Cells(Rows.Count, "CY").End(xlUp).Row
    ActiveWorkbook.Names.Add "id", Range("CY2:CY" & lr)
    If WorksheetFunction.CountIf(Range("id"), Range("D2")) = 0 Then Range("D2").ClearContents
    Range("D2").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=id"
    Set dic = Nothing
End If
End Sub
[/code]
tuy chưa đúng ý em lắm
nhưng cảm ơn thầy đã bỏ ra thời gian để viết ra đoạn code này
 
Nếu bạn thích kiểu nhức đầu, thì xem thêm file bên dưới.
 

File đính kèm

  • TinhTP_QuanHuyen_XaPhuong.xlsx
    486.1 KB · Đọc: 13
Web KT

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

Back
Top Bottom