VBでの初期化済み配列変数の定義と値の参照方法

このQ&Aのポイント
  • VBでの初期化済み配列変数の定義方法と値の参照方法を教えてください。
  • VBでの初期化済み配列変数の定義方法や値の参照方法についてわかりません。どのようにすれば良いですか?
  • VBでの初期化済み配列変数の定義や値の参照方法について教えてください。
回答を見る
  • ベストアンサー

初期化済み配列変数

Cでの開発経験はありますが、VBに関しては初心者です。 現在現在VBを使用したシステムを作成するにあたり、ユーザーインターフェイスを検討するため、DBアクセス部を省略したプロトタイプを作成しています。 このシステムでは商品カテゴリを選択するコンボボックスと、選択されたカテゴリの商品一覧を表示するリストボックスからなるものです。 以下のようなプログラム(Cとのごちゃ混ぜですみません。)を作成すればとりあえず動くものは簡単にできるであろうと考えたのですが、VBでの初期化済み配列変数の定義の仕方が分からず困っています。 VBではどのようにすれば良いのでしょうか? また、VBでこのようなことができない場合、通常はどのようにするものなのでしょうか? struct Shouhin { char name[100]; int price; }; struct Shouhin shouhin_list[][] = { { {"鉛筆", 40}, {"ボールペン", 100} }, { {"大学ノート", 100}, {"お絵かき帳", 200} } }; --- ' コンボボックスでの選択に合わせてリストボックスの内容を切り替える。 Private Sub ComboBox_Click() ListBox.list = shouhin_list[ComboBox.ListIndex] End Sub

  • akym2
  • お礼率57% (4/7)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

こんな回答で良いのでしょうか。 VBでは、1次元配列に限り、関数でArrayがあります。VBAでも使えます。 Youbi=Array("日曜","火曜","水曜","木曜","金曜","土曜") のように使います。 A=youbi(2)でAに文字列の水曜が入ります。 二次元のデータを扱うときは,次元数が2,3次元程度なら 下記で凌げます。文字列、数値をまぜても差し支えない。 Youbix=Array("日曜",6,"月曜",6,"火曜",5,"水曜",6,"木曜", _ 6,"金曜",6,"土曜",5) で     日曜      6(出席者6人とか色々の意味あり)     月曜      6     火曜      5      水曜      6      ・      ・     土曜      5 の2次元表が定義できます。 使うときは     For i=0 to 11 step 2        you=youbix(i)          ninnzu=youbix(i+1)       (処理 略)     Next i で使えます。  とび先(ブランチ先)を配列にしたいときは、不勉強で 経験ありません。 誰かご存知の方答えてください。 コントロール配列と言うのも別にあります。 VBでは区切りセミコロンがないので、行を次ぎに変えて 続けるときは、スペース+アンダーバーを使います。      以 上

akym2
質問者

お礼

ご回答ありがとうございます。 先にも書きましたが、VBビギナーのため、ご回答内容を理解、検討するのに時間がかかり、お礼が遅くなってしまいました。 申し訳ありません。 ご回答を参考に私なりに試行錯誤した結果、一応目的は達せられました。 以下にその過程を記述します。 質問ではユーザー定義型Shouhinの配列を用意することを考えていましたが、Array関数の引数にユーザー定義型データを与えることはVBの仕様で不可能でした。 最終的にはリストボックスに表示するので、特にユーザー定義型である必要はありませんので、"鉛筆 40"、"ボールペン 100"のような文字列の配列を作成すればよいかと考えました。 しかし、"_"による行連結は最大10までしかできませんでした。 (質問中のサンプルはフィールド数もデータ数も少ないのですが、作成しようとしているシステムはリストボックスに通常数百個の項目が並ぶもので、プロトタイプでもスクロールが行える程度の数(20個ぐらい)のレコードが必要です。) 最後に、ご回答の最後の方で触れられているコントロール配列を以下のように使ってみて一応目的は達せられましたが、imogasiさんの想定されていたのはこのようなものでしょうか? --- 1. 商品を表示するためのリストボックス(lstShouhinListView)とは別に、データを保持するためだけの、非表示リストボックスを商品カテゴリの数だけ用意し、これらをコントロール配列(lstShouhinListData())とする。 (商品のリストの内容はフォームデザイナのプロパティウィンドウで設定する。) 2. コンボボックスにてカテゴリが選択されたら、選択されたカテゴリのデータ保持用ListBoxの内容を、商品一覧表示用のリストボックスへコピーする。 Private Sub cmbCategory_Click()   Dim lb As ListBox   Dim i As Integer   Set lb = lstShouhinListData(cmbCategory.ListIndex)   lstShouhinListView.Clear   For i = 0 To lb.ListCount     lstShouhinListView.AddItem (lb.List(i))   Next End Sub

関連するQ&A

  • ExcelVBAでコンボボックスに初期値設定

    ExcelVBAでユーザーフォームを作成しています。 表示したときにコンボボックスに「選択して下さい」と表示させる方法を教えて下さい。 コンボボックスで「2003年_H15」~「2012年_H24」が選択できて、選択するとラベルに「2002~2004年」のように表示されます。 【コンボボックス:選択】2003年_H15 【ラベル:表示】2002~2004年 コンボボックスの値はSheetから設定しています。 ユーザーフォームを表示させたときにコンボボックスに「選択して下さい」と初期値として設定するにはどうしたらよいか教えて下さい。 Sheetに追加するとかんたんなのですが、ラベルに表示させるために、以下のようなコードを書いていたりするので、うまく動きません。 Private Sub ComboBox_Change() Dim sh As Worksheet Set sh = Worksheets("Sheet1") With ComboBox If .ListIndex >= 0 Then Label.Caption = Left(sh.Cells(.ListIndex + 1, 1), 4) _ & "~" & Left(sh.Cells(.ListIndex + 3, 1), 4) & "年" End If End With End Sub よろしくお願い致します。

  • 同じコンボボックス、リストボックスを使うには?

    よろしくお願いします。 今、ユーザーフォームを使って製造計画表を作っています。 コンボボックスで会社名、リストボックスで会社ごとの製品名を選択させるとこまで出来ました。 1日に3つの製品を作ることが出来るので、同じ中身のコンボボックス、リストボックスを使って3つ作りたいと思っています。 ユーザーフォームの形的にはこのような感じですが。 1. コンボボックス  リストボックス 2. コンボボックス  リストボックス 3. コンボボックス  リストボックス 今は、1.のとこだけは出来たのですが、2.3.は1.と同じコードをコピーして必要と思われるとこだけをコンボボックス2と変えたりしてみたのですが、上手くいきませんでした。こんなコードですが。 Private Sub UserForm_initialize() 'ComboBox1セット Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("Sheet1") Do While .Cells(1, ico) <> "" Me.ComboBox1.AddItem .Cells(1, ico).Value ico = ico + 1 Loop End With Me.ComboBox1.SetFocus End Sub Private Sub ComboBox1_Change() 'ListBox1セット Dim ico As Long 'Me.ListBox1.Clear ico = Me.ComboBox1.ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.ListBox1.List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub VBAも初めたばかりで質問の内容もわかりづらいとも思いますが、よろしくお願いします。

  • 【エクセル】オプションボタンにセルの値を反映させるには

    エクセルマクロ初心者です。教えてください。 シート2 の あるセルの値が A のとき シート1上の オプションボタン1がtrueになる。 シート2 の あるセルの値が A以外のとき シート1上の オプションボタン1がfalseになる。 (オプションボタン1はフォームコントロールのオプションボタンです。) という結果になるマクロの登録方法を模索していますがうまくいきません。 実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記(オプションボタンのほかコンボボックスなどの内容を転記します)。シート1上のリストボックスに蓄積シートの内容を表示し、選択するとその内容を呼び出すようにしたいのです。 コンボボックスやテキストボックスに呼び出すところまではなんとか本を見たりしてできたのですが、オプションボタンに呼び出せません。 なんとかお知恵をお借りしたいです。 よろしくおねがいします。 *下記のようにやってみました。 Private Sub commandbutton3_click() Dim n As Integer n = ListBox1.ListIndex If n = -1 Then MsgBox "選択してください" Else ComboBox2.Value = ListBox1.List(n, 0) ComboBox3.Value = ListBox1.List(n, 3) ComboBox4.Value = ListBox1.List(n, 4) ComboBox5.Value = ListBox1.List(n, 8) ComboBox6.Value = ListBox1.List(n, 9) ComboBox7.Value = ListBox1.List(n, 1) ComboBox8.Value = ListBox1.List(n, 2) TextBox3.Value = ListBox1.List(n, 10) End if ***********ここからがうまくいきません******** If Worksheets("入力シート").ListBox1.List(n, 6).Value = "A" Then OptionButton1.Value = True Else OptionButton("A").Value = False End If End Sub

  • EXCEL VBA コンボボックスでのLISTINDEXの値

    初めて質問させていただきます。 EXCEL VBAでコンボボックスを設定したときのLISTINDEXの値についてですが、 コンボボックスがフォーム内に3つ(ComboBox1,2,3)あり、次のようなコードの入力を行い、 ComboBox1 Sub Userform_Intialize()  With CcomboBox1   AddItem"AAA" '・・・ここの値は0ですね   AddItem"BBB" '・・・ここの値は1ですね  End With End Sub sub ComboBox1_Change()  Me.combobox2.Clear  Select Case Me.ComboBox1.ListIndex   Case 0   Me.ComboBox2.AddItem "2AAA" '・・・ここの値は0ですね    Me.ComboBox2.AddItem "2BBB" '・・・ここの値は1ですね   Case 1   Me.ComboBox2.AddItem "2CCC" '・・・ここの値は何になりますか?   Me.ComboBox2.AddItem "2DDD" '・・・ここの値は何になりますか?  End Select End Sub このcombobox2の4つの項目から、 更にcombobox3の選択項目に分岐するように設定したいのです。 わかりやすいように、ComboBox3もComboBox2のように作成したいのですが、 このように入力した場合、ComboBox2で"2CCC"を選択した場合、 ListIndexの値が2ではないようなのです。 この"2CCC"と"2DDD"のListIndex値はいくつになるのでしょうか? どなたか教えて下さい。

  • Excel コンボボックス2つ以上の時のコード

    ユーザーフォームでコンボボックスを2つ作ったのですが、1つだけのときはうまくいったのですが、二つ目をつくったら、エラーが出てしまいました。 コード入力は、Initializeに入力してあります。 Private Sub UserForm_Initialize() ComboBox1.Style = fmStyleDropDownCombo ComboBox1.RowSource = "sheet1!F2:F7" ComboBox1.ListIndex = -1 End Sub Private Sub UserForm_Initialize() ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "sheet2!B2:B3" ComboBox2.ListIndex = -1 End Sub コンボボックス1だけはうまくいったのですが、コンボボックス2をつくったら名前が適切でありませんとエラーがでました。 どのようにしたらいいですか?教えてください。

  • リストボックスで選択した一行を一度にセルに入力したい

    Xcel2003でマクロ作成中です。以下のコードで、リストボックスで一行を選択しました。この選択した一行のデータのうち2個のデータをC列とD列に入力することができました。が、E列にもデータを入力したいのです。が色いろやってみましたができません。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.list(ListBox2.ListIndex, 1) End If End With Unload UserForm3 End Sub 上のコードにどう追加記入したらよろしいでしょうか?

  • テキストボックスのデフォルト設定とコンボボックスの更新について

    テキストボックスのデフォルト設定とコンボボックスの更新について エクセルのVBAで、ユーザーフォームを使用しています。 ユーザーフォームの中にはコンボボックスとテキストボックスとボタンがあります。 コンボボックスには「ABCDEFGHIJKLM」と合計13のリストがあります。 ユーザーフォーム起動時に、コンボボックスには最初のリスト(A)が表示 されていて、「次へ」ボタンと「戻る」ボタンの2つを用意しています。 (1)ユーザーフォーム起動時にテキストボックスに「0」を入れる方法を教えていただけないでしょうか。 コンボボックスで「A」が選択された状態で「次へ」ボタンをおしたら「B」が選ばれる。 「D」が選択された状態で「次へ」ボタンをおしたら「E」が選ばれる。 「M」が選択された状態で「次へ」ボタンをおしたら「A」が選択される。(リストの最初に戻る。) というのは、次のVBAで上手くいきました。 If Combobox1.ListIndex < Combobox1.ListCount - 1 Then Combobox1.Text = Combobox1.List(Combobox1.ListIndex + 1) Else Combobox1.Text = Combobox1.List(0) End If (2)しかし「E」が選択された状態で「戻る」ボタンをおしたら「D」が選ばれる。 「G」が選択された状態で「戻る」ボタンをおしたら「F」が選ばれる。 「A」が選択された状態で「戻る」ボタンをおしたら「M」が選ばれる。(リストの最後に戻る。) といった内容のマクロがうまく組めません。 教えていただけると助かります。

  • リストから値を取得する時

    コンボボックスなどで値(a)をとる時、 ・combobox.list = ・combobox.listindex = ・combobox.text = "a" これらの違いがわからないのですがどのように使いわけるのでしょうか?

  • VBA 都道府県から市を選択し詳細を表示させる

    またお世話になります。都道府県から市を選択するとその詳細を表示させたいのですが、「‘ここでエラーが出る」のところでエラーがでます。 「詳細」のシートには都道府県を入力したセルに名前を付け、市を入力したセルにも市ごとに名前を付けました。都道府県を選択し、市を選択するとエラーが出ます。 説明が足りないかとは思いますが、どなたか教えてください。 以下、入力したセルです。    A    B    C   D 1 北海道  赤平市  リンゴ ミカン 2 青森   阿寒郡  ブドウ モモ 3 岩手   旭川市  イチゴ  以下、今の現状です。 Private Sub UserForm_Initialize() ’都道府県を選択 Me.ComboBox1.RowSource = "都道府県" Me.ListBox2.RowSource = "" End Sub Private Sub ComboBox1_Change() ‘都道府県が選択されたらリストボックス2に市を表示させる Me.ListBox2.Value = "" Me.ListBox2.RowSource = Me.ComboBox1.Value End Sub Private Sub ListBox2_Click() 'リストボックス2に表示された市を選択すると詳細をテキストボックス7に表示させる Dim r As Long With ListBox2 If .ListIndex > -1 Then r = .List(.ListIndex, 1) = 0  ‘ここでエラーが出る TextBox7.Value = Worksheets("詳細").Cells(r, 3) ' TextBox8.Value = Worksheets("詳細").Cells(r, 4) ' End If End With End Sub

  • エクセルVBAでユーザーフォーム

    エクセルVBAでユーザーフォーム上にオプションボタンが2つ、コンボボックスが6つあります。 OptionButton1をクリックした場合のComboboxの動きの制御について以下のように書いてみました。 これでも期待通りCombobox1~3は動き4~6は動かなくなります。 ただ、もっと別の簡単な書き方があるのではないかと思い質問しました。 宜しくお願いします。 Private Sub OptionButton1_Click() ComboBox1.Enabled = True ComboBox1.ListIndex = 0 ComboBox2.Enabled = True ComboBox2.ListIndex = 0 ComboBox3.Enabled = True ComboBox3.ListIndex = 0 ComboBox4.Enabled = False ComboBox4.ListIndex = 0 ComboBox5.Enabled = False ComboBox5.ListIndex = 0 ComboBox6.Enabled = False ComboBox6.ListIndex = 0 End Sub