2011-12-10 17 views

答えて

8

リストまたはコンボボックスを使用している場合は、ListIndexのようになります。

VBヘルプListIndexプロパティ:リストボックスまたはコンボボックスで現在選択されている項目のインデックス番号を返すか設定します。長く読む/書く。備考。このプロパティは、複数選択リストボックスでは使用できません。

何も選択しない場合、ListIndexの値は-1です。メモリが使用されている場合は、ゼロベースのインデックスです。

ListIndexはデザイン時に設定することはできませんので、プロパティウィンドウには表示されません。

コードを入力するときに、リストボックス名を入力してからドットを入力すると、使用可能なすべてのプロパティがエディタに表示されます。リストを下にスクロールし、面白そうに見えるものをメモし、次にそれらを探します。

+0

それでした。私はそれが単純な機能であることを知っていましたが、私はそれを見つけることができませんでした。ご協力いただきありがとうございます! – jroeleveld

9

[データ検証リストのインデックスを探しているなら、これは私がしたいものです。

はThisWorkbookモジュールに次のコードを置き:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
Dim ValidationIndex As Long 
Dim rngTest As Excel.Range 

'assumes the data validation is in a cell named "rngTest" 
On Error Resume Next 
Set rngTest = Sh.Range("rngTest") 
If rngTest Is Nothing Then 
    Exit Sub 
End If 
On Error GoTo 0 

If Not Intersect(ActiveCell, Sh.Range("rngTest")) Is Nothing Then 
    ValidationIndex = GetValidationIndex 
    MsgBox ValidationIndex 
End If 
End Sub 

は、この機能を入れてこのワークブックモジュール、または他の通常のモジュール:

Function GetValidationIndex() As Long 
'returns a 1-based index 
Dim rngTest As Excel.Range 
Dim varValidationString As Variant 
Dim ErrNumber As Long 
Dim i As Long 

With ActiveCell.Validation 
    If .Type = xlValidateList Then '3 
     On Error Resume Next 
     Set rngTest = ActiveCell.Parent.Range(.Formula1) 
     'I do this goofy thing with ErrNumber to keep my indenting and flow pretty 
     ErrNumber = Err.Number 
     On Error GoTo 0 
     'if the Validation is defined as a range 
     If ErrNumber = 0 Then 
      GetValidationIndex = Application.WorksheetFunction.Match(ActiveCell.Value2, rngTest, 0) 
      Exit Function 
     'if the validation is defined by comma-separated values 
     Else 
      varValidationString = Split(.Formula1, ",") 
      For i = LBound(varValidationString) To UBound(varValidationString) 
       If varValidationString(i) = ActiveCell.Value2 Then 
        GetValidationIndex = i + 1 
        Exit Function 
       End If 
      Next i 
     End If 
    End If 
End With 
End Function 
+0

+1これは一気に驚くほど驚くほどです! –

+0

@ Jean-FrançoisCorbettありがとう!私はそれがOPが望んでいたものではなく、実際の使用を考えることができないと確信していましたが、書くのは楽しいものでした。 –

+0

+1私はJCFと一緒です:) – brettdj

0

機能を使う必要はないと思います。上記のDougの答えのように、Match関数だけを使って得ることができます。

Dim GetValidationIndex as Integer 
Dim rngTest as Range  
' Get the validation list 
With ActiveCell.Validation 
    Set rngTest = ActiveCell.Parent.Range(.Formula1) 
end with 

GetValidationIndex = Application.WorksheetFunction.Match(ActiveCell.Value2, rngTest, 0) 
関連する問題