• ベストアンサー

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

maruru01の回答

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

再びmaruru01です。 標準モジュール 'ユーザーフォームでも使用するので、Publicで宣言。 'データ数が分からないでの動的に宣言。 Public Data1() As String 'データ数 Public DataCount As Long Sub input1() '以下の変数はこのプロシージャでしか使用しないので、中に入れます。 'ループカウンタはInteterよりLongの方がいい。 Dim i As Long Dim j As Long Sheets("Sheet1").Select '表形式の場合は、CurrentRegionプロパティでデータ数を取得出来る。 '見出し行の分-1する。 DataCount = Range("B10").CurrentRegion.Rows.Count - 1 '配列の再宣言 Redim Data1(1 To 5, 1 To DataCount) '(b~f列なら、列番号は2~6ですよね?) For i = 2 To 6 '最終データ行数は、データ数+開始行-1で取得出来る For j = 11 To DataCount + 11 - 1 '- 1、- 10は、配列のインデックスが1から始まっているから Data1(i - 1, j - 10) = Cells(j, i) Next j Next i End Sub ユーザーフォームのコードモジュール '宣言部に Private myCollect As New Colletion 'コレクションオブジェクトの宣言 Private ViewNumber As Long '現在表示されているデータの行番号 'Initializeイベントに Private Sub UserForm_Initialize() Dim i As Long ’コレクションの追加 With myCollect .AddItem:=text1 'ID .AddItem:=text2 '氏名 .AddItem:=text3 '部署 ・・・略(シートの項目列の順に追加する、もちろん配列の列数と追加するテキストボックスの数は一致すること) End With 'とりあえず何かデータを表示(とりあえず、先頭のデータ) ViewNumber = 1 For i = 1 To 5 myCollect(i).Text = Data1(i, 1) Next i End Sub '次のデータへ移動するボタン Private Sub CommandBUtton1_Click() Dim i As Long If ViewNumber = DataCount Then '最後のデータの場合は移動しない MsgBox "最後のデータです。" Exit Sub Else ViewNumber = ViewNumber + 1 For i = 1 To 5 myCollect(i).Text = Data1(i, ViewNumber) Next i End If End Sub '前のデータへ移動するボタン Private Sub CommandBUtton2_Click() Dim i As Long If ViewNumber = 1 Then '先頭のデータの場合は移動しない MsgBox "先頭のデータです。" Exit Sub Else ViewNumber = ViewNumber - 1 For i = 1 To 5 myCollect(i).Text = Data1(i, ViewNumber) Next i End If End Sub なお、こちらの都合で、配列の行と列の順番を入れ替えました。

tomosato
質問者

お礼

maruru01様 身勝手なお願いにもかかわらず、根気よく丁寧にご指導いただき本当にありがとうございます。 おかげさまで、目的をはたすことができました。 maruru01様はじめお二人の方にご指導いただき、今回も書籍では得られない勉強をさせていただきました。 いつかは、私もmaruru01様の1/100でも人様にアドバイスできるようにがんばりたいと思いますので、今後ともよろしくお願いします。 心より感謝します。 tomosato

関連する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)の逆で特定のセルの値をユーザーフォームのテキストボックスに反映。 色々なサイトのプロシージャをコピペしましたが、うまくいきません。 見づらいかもしれませんが、ユーザーフォームの画像を添付します。 皆様、よろしくお願いいたします。