Dynamic dropdown from other sheet and column (offset/index?)

▼魔方 西西 提交于 2020-05-17 06:46:23

问题


I have an Excel document containing 2 sheets, 1 import sheet and a data sheet. The dynamic dropdown in Column B of the Import sheet should be dependant on the value chosen in Column A of the import sheet.

However to find the corresponding "Series" I need to match the ID's from the data sheet. (Eicher ID should match the Series Parent ID; Column B and D)

Screenshots down below should explain it better;

I selected Eicher in User Sheet.A3, now I want to retrieve the ID from DataSheet Column B (mmcMake-24046283). With this I need to find all corresponding Series with the same Series Parent ID. So in this case my dropdown should have shown; Series Eicher, Series 2000, Series 3000, Series 300 and Series 400.


回答1:


Ok, here is a code to insert the validation. Check the "setting variables" part to make sure every variable is properly set. Sorry for the quite complex variables names, but empty stomach makes hard to synthesize. :D

Sub SubDynamicDropdownGenerator()

    'Declarations.
    Dim StrDataSheetName As String
    Dim StrImportSheetName As String
    Dim StrImportColumnMake As String
    Dim StrDataColumns As String
    Dim StrDataColumnSeries As String
    Dim StrDataColumnSeriesParentIDEntire As String
    Dim BytDataColumnMakesIDInternalColumn As Byte
    Dim RngCellWithDropDown As Range

    'Setting variables.
    StrDataSheetName = "Data"                       'Insert here the name of the sheet with data
    StrImportSheetName = "Import"                   'Insert here the name of the sheet with the import (where the range with the dynamic drowpdown is)
    StrImportColumnMake = "A"                       'Insert here the letter of the column where labeled Make (according to your first picture it is A)
    StrDataColumns = "A:E"                          'Insert here the letters of the columns where the data are located in the data sheet (i guess they are A:E)
    StrDataColumnSeries = "C"                       'Insert here the letter of the column where the Series are located in the data sheet (i guess is the C column)
    StrDataColumnSeriesParentIDEntire = "E:E"       'Insert here the address of the column where the Series Parent ID are located in the data sheet (i guess is the E column)
    BytDataColumnMakesIDInternalColumn = 2          'Insert here the internal reference of the MakesID in the data sheet for the VLOOKUP functions (since it's in the second column, i set it to 2)
    Set RngCellWithDropDown = Sheets(StrImportSheetName).Range("B3") 'Insert here the cell on witch you are going to apply the validation dropdown.

    'Setting validation.
    With RngCellWithDropDown.Validation
        .Delete
        .Add Type:=xlValidateList, _
             AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, _
             Formula1:="=INDIRECT(""" & StrDataSheetName & "!" & StrDataColumnSeries & """&MATCH(VLOOKUP(" & StrImportColumnMake & RngCellWithDropDown.Row & "," & StrDataSheetName & "!" & StrDataColumns & "," & BytDataColumnMakesIDInternalColumn & ",FALSE)," & StrDataSheetName & "!" & StrDataColumnSeriesParentIDEntire & ",0)&"":" & StrDataColumnSeries & """&COUNTIF(" & StrDataSheetName & "!" & StrDataColumnSeriesParentIDEntire & ",VLOOKUP(" & StrImportColumnMake & RngCellWithDropDown.Row & "," & StrDataSheetName & "!" & StrDataColumns & "," & BytDataColumnMakesIDInternalColumn & ",FALSE))+MATCH(VLOOKUP(" & StrImportColumnMake & RngCellWithDropDown.Row & "," & StrDataSheetName & "!" & StrDataColumns & "," & BytDataColumnMakesIDInternalColumn & ",FALSE)," & StrDataSheetName & "!" & StrDataColumnSeriesParentIDEntire & ",0)-1)"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End Sub

Like i've said, it should work as long as the data stay sorted by Series Parent ID. Tell me if you need to appy it on multiple cells. I can edit the code accordingly. Also if you need any explanation on the really messy formula, just say please.



来源:https://stackoverflow.com/questions/61223400/dynamic-dropdown-from-other-sheet-and-column-offset-index

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!