2017-02-27 3 views
0

Excel 2016でドロップダウンを試みていますが、頻繁には使用しないので、やり方を今はしません。ExcelでVBAを使用してセルの値を条件付きでドロップダウンする方法

データは次のようになります。私は、列Eのセルの値に基づいて、「タイトル1」の値が含まれますドロップダウン、「タイトル2」、「TITLE3」を作成しようとしています

Excel data screenshot

。他の言葉で

、このような何か:

if Cell E == 'index' 
    add Cell A value to dropdown 
end 

これを実現するための最良の方法だろうか? Excel機能を使用してそれを行うことはできますか、またはVBAが必要ですか?そして、もしVBAが必要なら、どんなヒントも大いに評価されるでしょう。

+0

あなたが書いている_ "ベースあなたの疑似コードは実際に_Cell D_をいくつか使用しますが、リンクされた画像が列 "E"に表示する '' index''と比較します。 – user3598756

+0

ごめんなさい、私は列Eを意味しました – Jeremie

+0

それに応じて質問を編集してください – user3598756

答えて

0

(実際のニーズにそれを調整するためのコメントを参照してください):

Sub Main() 
    With Worksheets("sheetWithDropDownName").Range("A1").Validation '<--| change "sheetWithDropDownName" and "A1" to your actual "dropdown" worksheet and cell references 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=Join(GetTitles(), ",") 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 

Function GetTitles() As Variant 
    Dim cell As Range, rng As Range 

    With Worksheets("sheetWithDataName") '<--| change "sheetWithDataName" to your actual sheet with data name 
     Set rng = .Range("A1", .cells(.Rows.Count, "E").End(xlUp)) '<--| set a range as its columns A:E range from row 1 down to last column E not empty row 
    End With 
    With CreateObject("Scripting.Dictionary") 
     For Each cell In rng.Columns(5).cells 
      If cell.Value = "index" Then .Item(cell.Offset(, -4).Value) = cell.Offset(, -4).Value 
     Next cell 
     GetTitles = .keys 
    End With 
End Function 
+0

素晴らしい!それは完璧に動作します! – Jeremie

0

VBAでは、このようなものが動作する可能性があります。コンボボックスはフォームにあり、データは "MyData"という名前のシートに置かれています。あなたはエクセルUIのドロップダウン細胞を扱っている場合、あなたはこのコードを使用する場合があります

Private Sub UserForm_Initialize() 
Dim lLastRow As Long 
Dim i As Integer 

lLastRow = Worksheets("MyData").Cells(Rows.Count, 1).End(xlUp).Row 

    For i = 2 To lLastRow 
     If Worksheets("MyData").Cells(i, 5) = "index" Then 
      ComboBox1.AddItem (Worksheets("MyData").Cells(i, 1)) 
     End If 
    Next 

End Sub 
関連する問題