怎么用vba做出excel 单元格三级可选下拉的问题? 50

excel单元格做出三级可选下拉的问题要做一个表,左侧是统计的物品型号配置的价格,目的是右侧可选下拉出物品1、物品2、物品3..,在型号下拉里面只有“物品”对应的型号,例... excel 单元格做出三级可选下拉的问题要做一个表,左侧是统计的物品型号配置的价格,目的是右侧可选下拉出物品1、物品2、物品3..,在型号下拉里面只有“物品”对应的型号,例如:物品2下可以选T1型、T5型、T7型,配置下拉可选之前选的物品下的型号下对应的配置,例如物品2下的T5型的可选y1配置、y2配置、y3配置,这样三级可选下拉的表后自动显示出报价1、报价2和定价,下面每行都是这样,最好能用vba做,请给出办法,谢谢。 展开
 我来答
浩哥奕弟
2020-02-17 · 杂七杂八想到什么就是什么
浩哥奕弟
采纳数:381 获赞数:956

向TA提问 私信TA
展开全部

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   '----------------------------------------------------------------------

   Dim D1 As Object, K1

   Dim i As Integer

   Dim Rng As Range

   Dim Str As String

   '----------------------------------------------------------------------

    '当前工作表&当前工作表数组

    Dim St As Worksheet

    Dim R As Integer

    Dim Arr

   '----------------------------------------------------------------------

    Set St = Sheets("Sheet1")

    If Target.Count > 1 Then Exit Sub

    R = St.Range("A" & Rows.Count).End(xlUp).Row

    Arr = St.Range("A2:F" & R)

   '----------------------------------------------------------------------

   'H列的数据有效性

    Set Rng = ActiveCell

    If Rng.Column = St.Range("H1").Column And Rng.Row > 1 Then

            Rng.Offset(0, 1).Validation.Delete

            Rng.Offset(0, 2).Validation.Delete

            Set D1 = CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(Arr)

                D1(Arr(i, 1)) = ""

            Next

            K1 = D1.Keys

            With Rng.Validation

                .Delete

                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

                xlBetween, Formula1:=Join(K1, ",")

            End With

   'i列的数据有效性

   ElseIf Rng.Column = St.Range("I1").Column And Rng.Row > 1 And Rng.Offset(0, -1) <> "" Then

            Rng.Offset(0, 1).Validation.Delete

            Set D1 = CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(Arr)

                If Rng.Offset(0, -1) = Arr(i, 1) Then

                    D1(Arr(i, 2)) = ""

                End If

            Next

            K1 = D1.Keys

            With Rng.Validation

                .Delete

                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

                xlBetween, Formula1:=Join(K1, ",")

            End With

    'J列的数据有效性

    ElseIf Rng.Column = St.Range("J1").Column And Rng.Row > 1 And Rng.Offset(0, -1) <> "" And Rng.Offset(0, -2) <> "" Then

            Set D1 = CreateObject("Scripting.Dictionary")

            For i = 1 To UBound(Arr)

                If Rng.Offset(0, -2) & Rng.Offset(0, -1) = Arr(i, 1) & Arr(i, 2) Then

                    D1(Arr(i, 3)) = ""

                End If

            Next

            K1 = D1.Keys

            With Rng.Validation

                .Delete

                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

                xlBetween, Formula1:=Join(K1, ",")

            End With

    ElseIf Rng.Column = St.Range("K1").Column Then

        If Rng.Row > 1 And Rng.Offset(0, -1) <> "" And Rng.Offset(0, -2) <> "" And Rng.Offset(0, -3) <> "" Then

            Str = Rng.Offset(0, -3) & Rng.Offset(0, -2) & Rng.Offset(0, -1)

            For i = 1 To UBound(Arr)

                If Str = Arr(i, 1) & Arr(i, 2) & Arr(i, 3) Then

                    Rng = Arr(i, 4)

                    Rng.Offset(0, 1) = Arr(i, 5)

                    Rng.Offset(0, 2) = Arr(i, 6)

                    Exit For

                End If

            Next

        End If

    End If

    Set D1 = Nothing

End Sub

侯玉川
科技发烧友

2020-02-15 · 教育领域创作者
个人认证用户
侯玉川
采纳数:2041 获赞数:3571

向TA提问 私信TA
展开全部
用VBA提取数组,筛选数组,把筛选后的结果放到下拉菜单中。可以做到的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2020-02-13 · TA获得超过123个赞
知道答主
回答量:1441
采纳率:10%
帮助的人:116万
展开全部
做是可以做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
djovy05
2020-02-15
知道答主
回答量:6
采纳率:100%
帮助的人:2.4万
展开全部
我可以做,不过可以把原表先发给我吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式