2017-08-14 9 views
-1

データ検証入力メッセージでは、名前付き範囲( "MyRange")内の各セルについて、Table1 [Column1]と照合し、表1 [列2]。Excel VBA:動的データ検証入力メッセージ(インデックス一致)

アクティブなセルは一定であり、範囲全体に同じ入力メッセージがあるので、ループするためにはこれが必要です。私は数式INDEX MATCHにコミットしていない、それだけでその機能を実行する必要があります。

Sub Tester() 
    Dim mycell As String 
    mycell = ActiveCell 
     With Range("MyRange").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _ 
     Operator:=xlBetween, Formula1:="=INDIRECT(Test1&Test2)" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = Application.WorksheetFunction.Index(Range("Table1[Column2]"), _ 
     Application.WorksheetFunction.Match(mycell, Range("Table1[Column1]"), 0)) 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = False 
    End With 
End Sub 

ありがとうございました!

+0

何のループはありませんか?あなたはRange Validationを持っているだけです...どこがループすると思いますか? *少なくとも、あなたが最初に 'Cells(activecell.row + 1、ActiveCell.Column)'を使ってアクティブセルを変更したいと思うでしょう。 ...また、[.Select'/'.Activate'の使用を避けるのが最善です(https://stackoverflow.com/questions/10714251/how-to-avoid-using-select)。 -in-excel-vba)。 – BruceWayne

+0

私はそれを期待していません。それが私が解決しようとしている問題です。 :) – AlivePresumably

+0

あなたは範囲内のループについてのWeb検索を行うことができます.... http://www.excel-easy.com/vba/examples/loop-through-defined-range.html – jsotola

答えて

0

あなたが今持っているコードの周りを囲みます。基本的には、Debug.Printという行にコードを貼り付けます。 。 。非常に小さな変更が加えられています。

Sub LoopRange() 

    Dim rCell As Range 
    Dim rRng As Range 

    Set rRng = Sheet1.Range("A1:A6") 

    For Each rCell In rRng.Cells 
     Debug.Print rCell.Address, rCell.Value 
    Next rCell 

End Sub 

Loop through each cell in a range of cells when given a Range object

関連する問題