エクセルマクロでコンボボックスを使用する方法とUserFormで入力を制御する方法

このQ&Aのポイント
  • エクセルマクロでコンボボックスを使用する際に、複数のシートからのデータを指定したい場合には、プロパティのRowSourceにどのような記述をすれば良いかについて説明します。
  • UserFormで入力を制御する際に、一部の入力項目の値を前回の入力値と同じにしたい場合には、どのような工夫をすれば良いかについて説明します。
  • エクセルのバージョンが2003で、OSがXPの場合でも、本記事の内容を参考にして問題を解決することができます。
回答を見る
  • ベストアンサー

エクセルマクロについて コンボボックスについて

コンボボックスについて質問が2つあるのですが、 1.コンボボックスのリストに、シートに記載の値や文字を採用するにつき、 プロパティのRowSourceに、B1:B100 と記述しますが、 ABCと複数シートがありまして、どのシートからコンボボックスを起動しても、AシートのB1~B5を指定したい場合、プロパティのRowSourceはどのような記述をしたらよいのでしょうか? 2.UserFormで入力を制御したいのですが、その中に複数入力項目がありまして、その都度全部入力することはありません。 たとえば、元金、利息、月々返済額と3つある場合で、月々返済額だけ変更して、元金、利息は前の数値をそのままで入力したいとき、どのような工夫(記述)をしたらよいでしょうか? 言い方を変えますと、UserFormを起動したときは、前回入力したそれぞれの数値がUserFormに表示されているようにしたいのです。 ちなみにエクセル2003、OS=XPです。 どうかよろしくお願いします。

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

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

1) シート名!B1:B5 で良いと思います。 2) 前回の値を復元させるには、ディスクに残さないとダメです。 シートの何処かに書いておいて UserForm のInitialize に呼び出すのが現実的だと思います。 例えば、シート名を ini にしたシートを用意します。 UserForm に TextBox1 と CommandButton1 を置いて下記を記入します。 Private Sub UserForm_Initialize()   TextBox1.Value = Worksheets("ini").Range("A1").Value End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)   Worksheets("ini").Range("A1").Value = TextBox1.Value End Sub Private Sub CommandButton1_Click()   Unload Me End Sub ini シートが目障りなら非表示にして置けば良いでしょう。

gotetsu
質問者

お礼

こんにちは。 一気に問題が解決しました。 助かりました。 ご丁寧な解説、どうもありがとうございました。

関連するQ&A

  • 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をつくったら名前が適切でありませんとエラーがでました。 どのようにしたらいいですか?教えてください。

  • ユーザーフォームのコンボボックス

    エクセルのユーザーフォームでの質問です。 コンボボックスの項目についてsheet2のB2~B10を選択したいのですが、このユーザーフォームはsheet1で使うもので、プロパティのrowsource欄にセルを選択できません(やり方が分かりません)。 どう入力したら別シートのセルをコンボボックスに反映出来るのでしょうか??

  • コンボボックスのリストについて(エクセル、マクロ)

    またお世話になります。 多分簡単な疑問だと思うのですが・・・、 ユーザーフォームのコンボボックスのRowsourceの 設定に関して可変式にしたいので以下のように マクロ(一部を抜粋)を組んでみました。 Dim b As Integer b = 2 Do b = b + 1 Loop Until Sheets(3).Cells(b, "A") = "" ComboBox1.RowSource = Range(Cells(2, "A"), Cells(b - 1, "C")) が、「型が一致しません」と出てうまくいきません。 どうしたらよいでしょうか? また、 A列   B列 C列 2005/1/1 東京 10 ・ ・ ・ のようにシートには並んでいるものを コンボボックスのリストとして取り入れたいのですが 変な5桁の数字しか現れず(たぶんこの数字は 2005/1/1を標準値化した数値なのでしょうが) 3つきれいにそろって表れません。 こちらの方も解決していただけないでしょうか?

  • コンボボックスに別のシート上のリストを出したいのですが?

    コンボボックスに別のシート上のリストを出したいのですがうまくいきません。以下の場合だとうまくいくのですが、シート名を変えたいのです。 sheet1のままだと以下の記述でうまくいくのですが ComboBox1.RowSource = "sheet2!b1:b31" sheet1から名前を項目に、つまりsheet項目にすると下の記述ではうまくいきません。 ComboBox1.RowSource = "sheet項目!b1:b31" もちろん基本となるシート名は”項目”に変えてあります。どこがいけないのでしょうか? いろいろやってみたのですがだめです。どなたか教えてください。

  • マクロでコンボボックスのリストの設定について

    マクロを記述しているワークブック内では UserForm.ComboBox1.RowSource = "D2:D" & Range("D65536").End(xlUp).Row とすると希望通りのリストがコンボボックスに入るのですが、 他のワークブックからの参照ができないので教えてください。 C:\Documents and Settings\taro\デスクトップ にあるワークブック(abc.xls)のsheet1のD列をコンボボックスに入れるにはどのように書けばいいですか? 最初に WorkBoooks.open = (ThisWorkbook.path & "\abc.xls") などを記入する必要がありますか? できればワークブックを開けることなく値を参照したいです。 よろしくお願いします。

  • EXCEL VBAのコンボボックスに取り込むリストについて

    すいません、EXCEL VBAのコンボボックスにデータを取り込む方法について教えていただきたいことがあります。 (1)「シート1」のA列にデータが入力されている (2)ユーザーフォームにコンボボックスを設置し、このA列のデータを取り込む。 このときにA列に入っているデータの数だけ取り組むにはどうしたらいいのでしょうか。 シート1    A列 1行 11 2行 21 3行 31  ・   ・  ・   ・ Private Sub UserForm_Initialize() ComboBox1.RowSource = Sheets("シート1").Range("?") End Sub ?の部分がわかりません。End(xlup)のようなものを使ってデータが入っている最後の行を調べるのかと思いましたが、どうもうまくいきませんでした。 よろしくお願いします。

  • VBA コンボボックスの条件分岐

    コンボボックスの条件分岐のコードが間違っているみたいで 調べても分からなかったので質問します。 やりたいこと 『マスタ』という名前のシート内のセルを参照し マスタシートには C2セル『A』C3セル『B』C4セル『C』と それぞれアルファベットがあります。 そこでコンボボックスを使用し コンボボックス22にC2~C4セルを選択できるようにし 例えばC2セルを選択したら コンボボックス21の参照範囲をマスタシート内の D2~D13セルを選択できるようにし C3セルを選択したら コンボボックス21の参照範囲をマスタシート内の E2~E13セルを選択できるようにしたいのです。 すいませんがコードを記載して頂けますと 助かります。 Private Sub UserForm_Activate() '----------------------- With ComboBox22 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!C2:C4" End With '↑こうすればコンボボックス22のマスタシートのC2からC4まで値を選択できるようになります。 '------------------------わかりやすく区切っています。 '--------------------------------------- If UserForm1.ComboBox22 = "A" Then With ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!D2:D13" End With End If '↑コンボボックス22の値が(C2セルの値がAなら)コンボボックス21をマスタシートのD2からD13までを選択できるようにしたい If UserForm1.ComboBox22 = "B" Then With ComboBox21 .ColumnCount = 2 .ColumnWidths = "90;10" .RowSource = "マスタ!E2:E13" End With End If '↑コンボボックス22の値が(C3セルの値がBなら)コンボボックス21をマスタシートのE2からE13までを選択できるようにしたい '----------------------------------------区切っています。 End Sub

  • エクセルVBA コンボボックス

    今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?

  • エクセルVBA 別シートからのコンボボックス連動

    エクセルVBA 別シートからのコンボボックス連動について Book1(多人数入力用ブック) ・入力シート ・データ用シート Book2(反映用ブック) ・シート1 Book1にコンボボックスが2列 テキストボックスが2列 * 6行のユーザーフォームを作成しました。 コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 コンボボックス3 コンボボックス4 テキストボックス3 テキストボックス4 ・ ・ ・ 左のコンボボックスで「あ」が選ばれたときには、右のコンボボックスで「あ行の顧客」・・・というように連動させたいと考えております。 データ用シートのデータは、   A      B          C 1 あ あ行で始まる顧客 か行で始まる顧客 2 か 3 さ 4 た 5 な 6 Private Sub UserForm_Initialize() Dim c As Range ComboBox1.RowSource = "データ用シート!A1:A9" End Sub Private Sub ComboBox1_Change() 'Dim Rng As Range 'Dim i As Long i = ComboBox1.ListIndex If i > -1 Then Dim c As Range Set Sh = Worksheets("データ用シート") Set Rng = Worksheets("データ用シート").Range("B2:I30") ComboBox2.Value = "" ComboBox2.RowSource = Rng.Columns(i + 1).Address End If End Sub 上記コードですと、コンボボックス2が入力シートのデータを表示してしまいうまくいきません。 欲をいえば、 Book1(多人数入力用ブック)入力シートの特定セルに コンボボックス2・テキストボックス1 コンボボックス4・テキストボックス3というように続けて1セルに反映 Book2(反映用ブック)シート1に コンボボックス2・テキストボックス1・テキストボックス2 を各1セル 1行に反映させたいと考えております。 まったく知識がないのですが 仕事上どうしても必要となったので、各種サイトを見よう見真似でやっております。 ご助力いただければ幸いです。

  • excel 2003 vba コンボボックス 日付

    始めまして初心者です。よろしくお願いします。 ワークシートのA列に日付、B列に作業内容、C列に作業人員が入力されているとします。 それをユーザーフォームから操作したいです。 ユーザーフォーム上にコンボボックスとテキストボックス1,2を設置しています。 コンボボックスのRowSourceにA列日付をセットしています。 コンボボックスを操作すると、その日付のB列、C列の内容をそれぞれテキストボックス1,2に表示させたいです。

専門家に質問してみよう