Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2704|回复: 2

[已解决]VBA查询名单

[复制链接]
发表于 2016-6-29 17:26 | 显示全部楼层 |阅读模式
本帖最后由 龙送农 于 2016-6-29 20:01 编辑

这是fjmxwrs老师写的代码:
1、怎样调整代码,使信息往前一列调整;
2、序号的代码是那句,麻烦您帮标出来。
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$2" Then
        Dim arr, str1$, brr(), x%, i%, y%, r%
        With Sheet1
            r = .Range("B65536").End(xlUp).Row
            arr = .Range("A5:BG" & r)
        End With
        str1 = Target.Value
        If str1 = "全部" Then
            For x = 1 To UBound(arr)
                i = i + 1
                ReDim Preserve brr(1 To 31, 1 To i)
                brr(1, i) = i
                For y = 3 To 7
                    brr(y, i) = arr(x, y)
                Next y
                For y = 9 To 12
                    brr(y - 1, i) = arr(x, y)
                Next y
                brr(11, i) = arr(x, 14)
                brr(12, i) = arr(x, 16)
                For y = 18 To 27
                    brr(y - 4, i) = arr(x, y)
                Next y
                For y = 31 To 38
                    brr(y - 7, i) = arr(x, y)
                Next y
                brr(31, i) = arr(x, 47)
            Next x
        Else
            For x = 1 To UBound(arr)
                If arr(x, 4) = str1 Then
                    i = i + 1
                    ReDim Preserve brr(1 To 31, 1 To i)
                    brr(1, i) = i
                    For y = 3 To 7
                        brr(y, i) = arr(x, y)
                    Next y
                    For y = 9 To 12
                        brr(y - 1, i) = arr(x, y)
                    Next y
                    brr(11, i) = arr(x, 14)
                    brr(12, i) = arr(x, 16)
                    For y = 18 To 27
                        brr(y - 4, i) = arr(x, y)
                    Next y
                    For y = 31 To 38
                        brr(y - 7, i) = arr(x, y)
                    Next y
                    brr(31, i) = arr(x, 47)
                End If
            Next x
        End If
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        Range("A5:AE10000").ClearContents
        Range("A5").Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
        Erase arr, brr
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$F$2:$H$2" Then
        Dim d As Object, arr, x%, str1$
        Set d = CreateObject("scripting.dictionary")
        With Sheet1
            r = .Range("B65536").End(xlUp).Row
            arr = .Range("A5:BG" & r)
        End With
        For x = 1 To UBound(arr)
            d(arr(x, 4)) = ""
        Next x
        str1 = Join(d.keys, ",") & ",全部"
        With Target.Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=str1
        End With
        d.RemoveAll
        Erase arr
    End If
End Sub


最佳答案
2016-6-29 18:03
查询名单.rar (17.66 KB, 下载次数: 32)

复件 VBA查询名单.rar

18.43 KB, 下载次数: 9

发表于 2016-6-29 18:03 | 显示全部楼层    本楼为最佳答案   
查询名单.rar (17.66 KB, 下载次数: 32)
回复

使用道具 举报

发表于 2016-6-29 18:14 | 显示全部楼层
brr(1,i)=i这句是序号。

复件 VBA查询名单.rar

18.05 KB, 下载次数: 11

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 15:34 , Processed in 0.264546 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表