• ベストアンサー

配列番号の取得について

ここに配列 SheetName(i) があります。 For i = 0 To 10 SheetName(i) = ActiveWorkbook.Sheets(i + 1).Name Next i でシートの名前を配列に入れ込みます。 フォームのコンボボックスを用いてセレクトされたSheetName(i) の変数iの値(配列番号)を取得することは可能なのでしょうか? すみませんが、お助け下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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)
回答No.4

#3です。 勘違いがあったので訂正です。 >ComboBox1.ListIndex が、i の値と同じになると思います。(1番目 = 0) つまり、シートの並べ並びを変更しない限り、配列番号(i)と同じになるはずです. 正確には、 ListIndex + 1 シートインデックスと同じ番号になります。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

ボタン作戦変更ですか? >フォームのコンボボックス 配列の順番通りに .AddItemしていれば、 ComboBox1.ListIndex が、i の値と同じになると思います。(1番目 = 0) つまり、シートの並べ並びを変更しない限り、配列番号(i)と同じになるはずです. 配列要素を使わなくても、ComboBox1.Value でシート名が取り出せます。 配列を使う理由がわかりませんが、「シート情報(名前・インデックス)」が必要なら、配列は不要かと思います。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

フォームのコンボボックスというのが、ユーザーフォームの事なら 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)
回答No.1

Indexプロパティを使えば番号を取得できます。 たとえば、 j = ActiveWorkbook.Sheets("予定表").Index とすれば、jには予定表というシートの番号(最初に名前を配列に入れたときのi+1に相当する値)が入ります。1を引けばiの値になります。

komusemari
質問者

お礼

回答ありがとうございます。 Indexプロパティというのがあるのですね! これは使えます! ありがとうございました!