- ベストアンサー
配列番号の取得について
ここに配列 SheetName(i) があります。 For i = 0 To 10 SheetName(i) = ActiveWorkbook.Sheets(i + 1).Name Next i でシートの名前を配列に入れ込みます。 フォームのコンボボックスを用いてセレクトされたSheetName(i) の変数iの値(配列番号)を取得することは可能なのでしょうか? すみませんが、お助け下さい。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 視点を変えてみました。 >フォームのコンボボックスを用いてセレクトされたSheetName(i) やはり、SheetName は、グローバル変数にしているのかなって思いました。言葉どおり忠実に再現してみました。InputArray を実行してください。いくつもの回答が出ていますから、同じものを書いてもしょうがありません。 以下は、「フォーム」のコンボボックス用のサンプルコードです。(^^; '<シートモジュール> Option Explicit Dim SheetName() As String Sub InputArray() Dim i As Long ReDim SheetName(0 To Worksheets.Count - 1) For i = 0 To Worksheets.Count - 1 SheetName(i) = Worksheets(i + 1).Name Next i Call shComboSetting End Sub ' Private Sub shComboSetting() Dim j As Long For j = 0 To Worksheets.Count - 1 Range("IV1").Offset(j) = SheetName(j) Next j DropDowns(1).ListFillRange = _ Range("IV1").Resize(Worksheets.Count).Address DropDowns(1).OnAction = ActiveSheet.Name & ".ComboMacro" End Sub ' Sub ComboMacro() Dim indx As Long indx = DropDowns(1).ListIndex MsgBox "コンボボックスのIndex は、" & indx & "で、" & Chr(13) & _ "シート名は、" & SheetName(indx) & " です。", vbInformation End Sub
その他の回答 (4)
- hana-hana3
- ベストアンサー率31% (4940/15541)
#3です。 勘違いがあったので訂正です。 >ComboBox1.ListIndex が、i の値と同じになると思います。(1番目 = 0) つまり、シートの並べ並びを変更しない限り、配列番号(i)と同じになるはずです. 正確には、 ListIndex + 1 シートインデックスと同じ番号になります。
- hana-hana3
- ベストアンサー率31% (4940/15541)
ボタン作戦変更ですか? >フォームのコンボボックス 配列の順番通りに .AddItemしていれば、 ComboBox1.ListIndex が、i の値と同じになると思います。(1番目 = 0) つまり、シートの並べ並びを変更しない限り、配列番号(i)と同じになるはずです. 配列要素を使わなくても、ComboBox1.Value でシート名が取り出せます。 配列を使う理由がわかりませんが、「シート情報(名前・インデックス)」が必要なら、配列は不要かと思います。
- papayuka
- ベストアンサー率45% (1388/3066)
フォームのコンボボックスというのが、ユーザーフォームの事なら UserForm1 に ComboBox1 があるとして、下記のような感じでしょうか? Private Sub UserForm_Initialize() Dim ws As Worksheet ComboBox1.Style = fmStyleDropDownList For Each ws In ThisWorkbook.Worksheets ComboBox1.AddItem ws.Name Next ws End Sub Private Sub ComboBox1_Change() Worksheets(ComboBox1.Value).Activate MsgBox "Name: " & ComboBox1.Value & _ " , Index : " & ComboBox1.ListIndex End Sub
- shkwta
- ベストアンサー率52% (966/1825)
Indexプロパティを使えば番号を取得できます。 たとえば、 j = ActiveWorkbook.Sheets("予定表").Index とすれば、jには予定表というシートの番号(最初に名前を配列に入れたときのi+1に相当する値)が入ります。1を引けばiの値になります。
お礼
回答ありがとうございます。 Indexプロパティというのがあるのですね! これは使えます! ありがとうございました!