• ベストアンサー

ユーザーフォームのテキストボックスに配列の値を読み込む方法を教えて下さい

maruru01の回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 まず、コレクションを使ってフォーム上のテキストボックスをインデックスで操作出来るようにします。 コレクションについては以下を参照して下さい。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=172927 この時、AddItemメソッドで追加するテキストボックスの順番をデータ一覧表の項目の順と一致させることが必要です。 例えば配列kokyakudat(i,j)の0列目がIDなら、他のデータは1列目からになりますが、Collectionオブジェクトのインデックス値は1から始まるので、順番(と項目数)が同じならちょうどいいわけです。 で、とりあえず、iが列でjが行で、0列がIDとすると、 For j = (行の最初) To (行の最後)   If kokyakudat(0, j) = tx1.Text Then     '見つけた行のデータを入力する     For i = 1 to (列番号の最後)       myCollect(i).Text = kokyakudat(i, j)     Next i     Exit For   End If Next j If j > (行の最後) Then   MsgBox "データが見つかりません。" End If こんな感じです。 ところで、このようなデータは配列より、ユーザー定義型(構造体)にした方がいいのではないでしょうか。 構造体なら、各項目に適当な変数名を付けることが出来るので、コードの見た目で分かり易いです。 配列だと、何番目が何のデータかコード見ただけでは分からないですよね。 まあ、構造体にすると上記のコレクションは使えません(使っても意味がない)が、項目数がそれ程多くない(20以下ぐらい)なら、1つずつ入力してもいいでしょう。 テキストボックスにも分かりやすい名前を付けておけば、何のデータをどこにいれたかが、確認し易いですし。 ちなみに、この手のデータ検索は、Accessを使用した方がいいと思いますが。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=172927
tomosato
質問者

補足

maruru01様 いつもお手数おかけして申し訳ありません 相変わらず丁寧なご指導に感謝します 私の不勉強のため、せっかく丁寧にご指導頂いたにもかかわらず、内容が理解できないところが多数あります。 本来ならば、勉強し直してから再度お尋ねするのが筋だと思いますが、今回のユーザーフォームの件はどうしても解決してみたいので、あつかましいかぎりですが、現在作っているマクロの概要を以下に記載し、どこをどのようになおすべきか再度おたずねする次第です。 とりあえず、IDを入力し、氏名が表示できれば、後は自分で何とかしたいと思います。  お時間とお気持ちの許す範囲で結構ですので見ていただければ幸いです  エクセルのsheet1のb10~f10にID,氏名,部署のフィールドがあり、その下に500件程のデータが入力済みです。 マクロの記述の概要は以下のとおりです Dim data1(1000,10) Dim i As Integer Dim j As INteger Sub input1() Sheets("Sheet1").Select Range("b11").Select 'データを配列に格納 For i = 11 To 1000 If Cells(i,0) = "" Then Exit For For j = 1 To 7 data1(i, j) = Cells(i, j) Next i Next j UserForm1.Show End Sub ユーザーフォームの概要とマクロ UserForm1 TextBox1・・・ID入力欄 TextBox2・・・氏名をここに表示させたい TextBox3・・・部署をここに表示させたい  CommandBUtton1・・・・次のIDへ移動させたい CommandButton2・・・・前のIDへ移動させたい ユーザーフォームのマクロ *をつけたところが、maruru01さんのご指導を私なりに理解して加えた部分です(たぶん理解ができていないと思いますが) *Private myCollect As New Collection・・・変数の宣言部分? Private Sub UserForm_Click() *With myCollect・・・・コレクションの作成? * .Add Item:=text1 * .Add Item:=text2   *.Add Item:=text3 *End With *For i = 11 to 1000 * If data1(i,1) = tx1.Text Then * For j = 1 to 7 * myCollect(j).Text = data1(i,j) * Next j * Exit For * End If *Next i * If i>1000 Then * MsgBox = "データなし" * End If End Sub Privare Sub CommandButton1_Click() 未作成 End Sub

関連するQ&A

  • ユーザーフォームのテキストボックスの内の値を検索する方法

    エクセルVBAのユーザフォームでテキストボックス内の値を検索したいのですが、どのように書いたら検索できるかわかりません。 検索をできるかもわかりません。 ※ユーザフォームの値はセルにセットしない形でお願いします。  直接テキストボックスの値を検索したいです。  検索の結果として返ってくる値は特になんでもいいです。 ご存知でしたらよろしくおねがいいたします。

  • Excel ユーザーフォームのコンボボックスについて

    始めまして、マクロに関してはまだまだ勉強中なのですが、ユーザーフォームのコンボボックスについてつまづいてしまい、皆さんにご教授頂ければと思います。 一つユーザーフォームを作成後、そのフォーム内にコンボボックスを配置し、リストから項目を選択できるようにしたいと考え下記のように記述したのですが、ユーザーフォームを実行してもフォームは表示されてきますが、ボックスを選択してもリストに項目が表示されてきません。 Private Sub cmd入力_Click() End Sub Private Sub 選択グループCombo_Change() With 選択グループCombo .AddItem "初級" .AddItem "中級" .AddItem "上級" Private Sub cmd閉じる_Click() Unload Me End Sub この記述自体が間違っているのでしょうか。 宜しくお願いします。

  • セルの値をユーザーフォームのテキストボックスに

    エクセルの質問です。 シート1にボタンを設置してユーザーフォームを呼び出すようにしています。 ユーザーフォームにテキストボックスを用意してて、シート1のセル(A1)に記入された数字を、ボタンを押した時に立ち上がったユーザーフォームのテキストボックスに表示されるようにしたいのですが、どうしたらいいのでしょうか?

  • テキストボックスの合計について

    エクセルのユーザーフォームに 1から7までのテキストボックスが あります。 そして 1から6までのテキストボックスに数値を投入していきます。 それぞれの値が確定したら、7のテキストボックスに 1から6までの 値の合計が表示されるようなマクロを記述したいのですが、うまく いきません。 どのように記述したらよいのか教えていただけないでしょうか。

  • テキストボックスの値をテーブルに追加

    お世話になります。 Access2000 あるテーブルの一覧をフォームのリストボックス(lst_1)に表示し、 そのリストボックスから選択された行を フィールド上の各テキストボックス(非連結)に表示しております。 そこで、表示されているテキストボックスの値を変更した時に テーブルに変更された値を反映させる方法をご教授よろしくお願いします。

  • ユーザフォームのリストボックス

    お世話になります。 ユーザフォームのリストボックス内の下記2個のどちらかを選択し Private Sub UserForm_Initialize() ListBox1.AddItem ("印刷プレビュー") ListBox1.AddItem ("印刷") End Sub CommandButton1をクリックして Worksheets("Sheet1").PrintOut か Worksheets("Sheet1").PrintPreview を実行したいのですが どうやってリストボックスとコマンドボタンを 連動できるようにすればいいのでしょうか コマンドボタンのみだったら出来るのですが、 リストボックスを使うとうまくいきません。 ご教授よろしくお願いいたします。

  • 【VBA】ユーザーフォームから、シート上のテキストボックスを操作

    ユーザーフォームで入力した値を、シート上にあるテキストボックスに入力させたいのですが、 どのように記述すればいいのでしょうか?(ボタンで操作) またおなじくテキストボックスの大きさ、フォントの大きさ、などを操作するにはどのようにしたらいいですか?

  • エクセルVBAユーザーフォーム「テキストボックス」「コンボボックス」の書式設定について

    ユーザーフォームを作成して、出荷実績を投入しようとしています。 現在、ユーザーフォームを作成して、 上から以下のようにボタンが並んでいます。 (1)コンボボックス1  商品コードと商品名を選択する。 (2)テキストボックス1~7  地域ごとの出荷実績を投入する。 (3)コマンドボタン1  決定→入力 (4)コマンドボタン2  終了 そして、以下3つの問題点がありますが、どのようにVBAを記述したら良いのか、わかりません。  a.コンボボックス1に表示される商品を商品コード   (アルファベット)と商品名で改行したい。   つまり「折り返して全体を表示する」ことは出来ないでしょうか。  b.「AAAA~」は5行目・「CCCC~」は7行目 といった   ように、商品ごとに値を投入する行を変更したい。  c.テキストボックス1~6の内容の合計が自動で(入力している   最中に)テキストボックス7に表示されるようにしたい。 次のようなVBAは記述出来たのですが、上記3つの要素を加えるには どのようにしたらよいのか、教えていただけないでしょうか? ちなみに入力する順番は次のようになっています。(設定済み) M4→L4→J4→K4→H4→I4 →M5→L5→J5→K5→H5→I5 ------------------------------------------------------------- ’フォームを表示させる。 Sub formdsp() UserForm1.Show End Sub ’フォーム内容 Dim cnt As Integer Private Sub Combobox1_Change() End Sub '入力ボタン Private Sub CommandButton1_Click() With ActiveSheet .Cells(cnt, 13) = TextBox1.Text .Cells(cnt, 12) = TextBox2.Text .Cells(cnt, 10) = TextBox3.Text .Cells(cnt, 11) = TextBox4.Text .Cells(cnt, 8) = TextBox5.Text .Cells(cnt, 9) = TextBox6.Text .Cells(cnt, 15) = TextBox7.Text cnt = cnt + 1 .Cells(cnt, 13) = Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox2.Text = "" UserForm1.TextBox3.Text = "" UserForm1.TextBox4.Text = "" UserForm1.TextBox5.Text = "" UserForm1.TextBox6.Text = "" UserForm1.TextBox7.Text = "" UserForm1.Combobox1.Text = "" UserForm1.TextBox1.SetFocus End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End End Sub 'コンボボックス Private Sub userform_initialize() cnt = 4 With UserForm1.Combobox1 .AddItem "AAAA 11111111111" .AddItem "BBBB 22222222222" .AddItem "CCCC 333333333" .AddItem "DDDD 444444" .AddItem "EEEE 5555555555" .AddItem "FFFF 666" .AddItem "GGGG 7777777" .AddItem "HHHH 88888" .AddItem "IIIII 999999999" .AddItem "JJJJ 0000000000000" .AddItem "KKKK 1111" .AddItem "LLLL 222222" .AddItem "MMMM 3333" End With End Sub

  • ユーザーフォーム上にコンボボックス作成

    ここの書き込みでも何度も書きましたが、まだ解決できません。 sheet1:にボタンをクリックすると、ユーザーフォームが現れ、その上にコンボボックスを作成しました。 sheet2:には、リストの項目を書いています。それをコンボボックスに表示させたいのですが、上手くいきません。すいません何度、本当に知りたいです 下記を記述しても表示できません。 Private Sub 記入フォームAC_Initialize() For I = 0 To 7 コンボA.AddItem Worksheets("データ").Cells(I + 2, 2).Value Next End Sub

  • テキストボックスの値をセルに反映させたい。

    はじめまして、いつもお世話になっております。 EXCEL VBAの質問です。 下記(1)(2)の質問にお答えいただきたく、お願いいたします。 (1)ユーザーフォームのテキストボックスの値をEXCELのデータが入力されている 最終行の下の空白にユーザーフォームのボタンをクリックして反映。 (2)(1)の逆で特定のセルの値をユーザーフォームのテキストボックスに反映。 色々なサイトのプロシージャをコピペしましたが、うまくいきません。 見づらいかもしれませんが、ユーザーフォームの画像を添付します。 皆様、よろしくお願いいたします。