EXCEL VBA ユーザーフォームについて

このQ&Aのポイント
  • EXCEL VBA ユーザーフォームについて。選択した「1の行」のC1をクリックしたときにユーザーフォームを起動させて入力しその行のセルに、数字の1を反映させたいと思っています。
  • EXCEL VBA ユーザーフォームの作成方法。Page1ではテキストボックスとチェックボックスを配置し、Page2ではオプションボタンを配置します。選択後には右下のOKボタンをクリックして反映させます。
  • EXCEL VBA 初心者のためのユーザーフォームの使い方。C列の選択した行に対してユーザーフォームを表示し、入力内容をセルに反映させる方法について説明します。複数選択と多数の日付への対応にも言及します。
回答を見る
  • ベストアンサー

EXCEL VBA ユーザーフォームについて

仕事上システムを作り始めたVBA初心者です。すみませんが、ご教示下さい。 選択した「1の行」のC1をクリックしたときにユーザーフォームを起動させて入力しその行のセルに、数字の1を反映させたいと思っています。 その行は1で終了で今後足していきません。他の行に移ります。 フォームだけは作ってみたのですが反映の仕方がわかりません。 選択項目が多いので、2ページで作りました。 Page1 C1にテキストボックスで「#1」、D1に「#2」(記入ない場合有り)、F1に「#3」(記入ない場合有り)、H1にチェックボックス#4(選択ない場合有り)。 獲得コーナーのI1~Z1まで「Frame1」のグループどれか一組、チェックボックス(I1・J1・K1 3個ずつの連続)。3個中、左以外は記入ない場合有り。いずれかのグループに必ずチェック。 内訳の「Frame2」AA1~AK1のオプションボタン一つ必ず選択。 Page2 「Frame3」AL1、AM1、AN1で、オプションボタン一つ必ず選択。 「Frame4」チェックボックス複数選択「#11」AO1・PO1、 「#12」AQ1・AR1、「#13」AS1、AT1(記入ない場合有り) 「Frame5」AV1~AZ1複数選択 「Frame6」BA1~BC1複数選択 「Frame7」BD1~BE1複数選択 「Frame8」BF1~BI1オプションボタン一つ必ず選択。 選択後右下のコマンドボタンの「OK」ボタンで反映させたいと思っています。 選択セルが全てC列なのですが、複数選択する場所があるのと、シートが1日~31日と多いのです。(中身は全て一緒です。) 何を記入するとその行のセルに反映されるのかわからなかったのでご教示いただきたく思います。

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

  • ベストアンサー
回答No.4

nightquest 様 こんばんわ。こんな感じではどうでしょうか? (1) まず、ユーザーフォームに日にち(シート)を識別する用のTextBox1と、転記する行を識別するためのTextBox2を追加してください。 次に、ユーザーフォームのShowModalプロパティをFalseにして下さい。 (2) で、各シートモジュールに以下を記載してください Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 3 Then 'C列のセルをダブルクリックした際に、フォームを表示 Range("A1").Select 'セルの編集状態のままだと不都合あるので、A1を選択 With UserForm1 .Show .TextBox1.Value = Me.Name  '転記するシート名をフォームに取得 .TextBox2.Value = Target.Row '転記する行番号をフォームに取得 End With End If End Sub (3) そして、ユーザーフォームのボタンクリックイベントに以下を記載してみてください。 Private Sub CommandButton1_Click() With Sheets(TextBox1.Value) .Range("C" & .TextBox2.Value ).Value = Text#1.Value .Range("D" & .TextBox2.Value ).Value = Text#2.Value '中略(Text#1とかは、そちらのオブジェクト名にして下さいね) End With End Sub

nightquest
質問者

お礼

お世話になっております。 何度も何度も質問にお答えいただいてありがとうございます。 ご教授いただいた方法で無事解決いたしました。 即明確な回答をいただき大変感謝しております。 またよろしくお願いいたします。

その他の回答 (3)

回答No.3

nightquest 様 こんな感じでどうでしょうか?思いと違ったらスイマセン。 Private Sub CommandButton1_Click() With Sheets("日にち") 'チェックボックスにチェックがしてあったら○する If CheckBox1.Value Then '←CheckBox1.Value=Trueと同義です .Range("F1").Value = "○" End If If CheckBox2.Value Then 'チェックしてなかったら何もしません .Range("G1").Value = "○" End If 'オプションボタンにチェックがしてあったら○する If OptionButton1.Value Then .Range("L1").Value = "○" End If If OptionButton2.Value Then .Range("M1").Value = "○" End If End With '2つの行に入力するパターン With Sheets("日にち") .Range("C1").Value = TextBox1.Value .Range("D1").Value = TextBox1.Value End With '「1日」と「2日」のシートに同じ事を入力するパターン With Sheets("1日") .Range("C1").Value = TextBox1.Value .Range("D1").Value = TextBox1.Value End With With Sheets("2日") .Range("C1").Value = TextBox1.Value .Range("D1").Value = TextBox1.Value End With 'フォームを閉じる Unload Me 'もしくはUnload UserForm1でも同義 End Sub

nightquest
質問者

補足

お世話になっております。 早速のご返事ありがとうございます。 無事チェックボックス、オプションボタンの"○"成功しました! そして「フォームを閉じる」も見事に成功いたしました。 ありがとうございます。 あと、私の質問の仕方が悪かったのですが、 たとえば、1の行を入力した後、7の行、3の行と入力する行が連続して変わります。 入力する列はフォームの記載のアルファベットなのですが、行はダブルクリックして入力フォームを出した行になります。 そして次の日には2日(シート2)も同じようにしたいのですが、1日(シート1)に記載されてしまいます。 やることは同じ作業なのですが、入力「行」がダブルクリックした行、次の日にはシート2、その次の日にはシート3と、シート31まで毎日同じフォーマットのものを入力していきます。 なにかよい方法はありますでしょうか? 毎回下手な質問とお願いが多くて申し訳ございません。

回答No.2

(1) 各シートのモジュールに以下を記載します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 3 Then 'C列のセルをダブルクリックした際に、フォームを表示 Range("A1").Select 'セルの編集状態のままだと不都合あるので、A1を選択 UserForm1.Show UserForm1.TextBox1.Value = "日にち" '何日のシートに転記するかを識別するためのものです '「TextBox1」は、そちらのオブジェクト名に合わせて下さい '「"日にち"」は1日~31日のシート名を入れて下さい。 End If End Sub (2) フォームに日にちを識別するためのTextBox1を追加して、ユーザーフォームのモジュールに以下を記載下さい。 全部を記載するのは大変なので、最初の方だけ記載します。 Private Sub CommandButton1_Click() With Sheets("日にち") .Range("C1").Value = Text#1.Value ’テキストボックスの値を転記します .Range("D1").Value = Text#2.Value ’「Text#1~Text#3」はそちらのオブジェクト名 .Range("E1").Value = Text#3.Value ’に合わせて下さい .Range("F1").Value = Check#4.Value ’チェックしてあれば「True」、なければ「False」を転記 ・ ・ ・ End With End Sub 何か、そちらの思いと違うことをしていたらゴメンナサイ。

nightquest
質問者

補足

お世話になっております。 質問の説明が下手で申し訳ございませんでした。 記入する行が「1の行」「2の行」「3の行」・・・と複数行、複数ページあるのです。 テキストボックスは教えていただいた方法で入力できました! チェックボックスやオプションボタンにチェックを入れるとそのセルに"○"、チェック無しですと空白のまま。(当初は数字の1を入れる予定でしたが"○"の方が確認しやすかったので変更いたしました) オプションボタンの、どちらかにチェックしたら該当のセルに反映する記入方法ががわかりませんでした。 「Range("C1").Value・・・」ですとそのセルだけなのですが、 記入する行が複数あるのですが方法はありますでしょうか? 最後にコマンドボタンをおしてユーザーフォームの窓も一緒に消えてくれる方法はありますでしょうか? 質問が多くて申し訳ございません。 是非よろしくお願いします。

回答No.1

こんにちは。 >選択した「1の行」のC1をクリックしたときにユーザーフォームを起動させて入力しその行のセルに、数字の1を反映させたいと思っています。 >その行は1で終了で今後足していきません。他の行に移ります。 「1の行」って何?、「その行のセルに、数字の1を反映」どのセル?「他の行に移ります」どんな条件で他の行に移るの?といった具合に前提条件に不明点が多かったので、とりあえず以下の2点だけご提案します。 (1) 「C1」セルをダブルクリックした際に、フォームを表示する ※クリックしたらフォームを表示というのは思いつきませんでした、ゴメンナサイ。 (2) フォームからシートへ転記する の2点だけ提案します。 携帯からの回答なんで、次に続きます。

関連するQ&A

  • ユーザーフォーム上のボタンの使い方

    今、VBAの本とインターネットで調べながら初めてユーザーフォームを作成中ですが、 どうしてもわからないことがあり、ご質問させていただきました。 初歩的なことかも知れませんが、ご教授よろしくお願い致します。 1.オプションボタンを二つ作成しました。  一方を選択した場合、フレーム全体をグレーアウトに  することはできますか。  例)ユーザーフォーム上のオプションボタン  A:住所登録   (郵便番号・所在地等を入力)  B:電話番号登録 (電話番号を入力) ※Bをオプションボタンで選択した場合、Aのフレーム全体を  グレーアウト(入力禁止)にすることはできますか。 2.ComboBoxで"年"、"月"、"日"それぞれプルダウンで選択できるように  したのですが、ワークシートに反映する時、同一セルに入力するか、  それらの数字を認識して日付として一つのセルに表示することはできますか。  例)ユーザーフォーム上    2007▼年   4▼月  19▼日  ※一つのセルに“2007年4月19日”と表示することはできますか。 3.2.の続きで、"年"、"月"、"日"すべて選択している場合、  チェックボックスにチェックが入り、どれか一つでも空白の場合は  チェックボックスがグレーアウトしている、という状態はできますか。 4.ユーザーフォームで入力した内容がExcel上にどんどん   追加していく時のマクロはどのように記述したらいいのですか。  (ユーザーフォームに入力した内容を、セルを指定せずにどんどん  追記していく方法) 質問が多くて申し訳ございませんが、よろしくお願い致します。

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • エクセルのユーザーフォームについての質問です。

    エクセルのユーザーフォームについての質問です。 かなりの初心者です。 テキストボックスを3つ、チェックボックスを10個作りました。 チェックボックスは複数チェックすることができます。 コマンドボタンをクリックすると、テキストボックスに入力された値とチェックされた チェックボックスがsheet1に自動入力できるようにしたいです。 たとえば、 テキストボックス1には「あいう」 テキストボックス2には「かきく」 テキストボックス3には「さしす」と入力。 チェックボックス1から10のうち、「1」「2」「3」にチェック。 この状態でコマンドボタンをクリックすると、Sheet1には     A列       B列       C列        D列 1行目 テキスト1    テキスト2    テキスト3     チェックボックス 2行目 あいう      かきく      さしす       1 3行目 あいう      かきく      さしす       2 4行目 あいう      かきく      さしす       3 このように、チェックボックスにチェックがあった数だけ、テキストボックスも コピーされて、次々と下の行に入って行くようにしたいのです。 こんなことができるのでしょうか? できるのなら、コードを教えてください。 お願いします。

  • VBAユーザーフォームの操作について

    いつもお世話になっております。 VBAでユーザーフォームのチェックボックス使用したデータを作成しています。 ●ユーザーフォームの仕様  1.各県名ごとにフレームを作成し、フレーム内に市名と全選択のチェックボックスを配置  2.各フレームの全選択のチェックボックスにチェックを入れると、フレーム内の市名のチェックボックスにチェックが入る  3.フレーム外の全選択のチェックボックスにチェックを入れると、全チェックボックスにチェックが入る。 ●オブジェクト名 ・フレーム  Frame1:神奈川県 Frame2:茨城県 Frame3:栃木県 ・チェックボックス  CheckBox1:フレーム外の全選択  CheckBox2~4:各フレームの全選択  CheckBox5~11:市町村名(横浜市~小山市の順) ●プロシージャ 1つ1つの動作をIFステートメントを使って記述しています。 ※IFの中身については、チェックボックスの数がもっと多ければ For Nextなんかを使ってもっとスッキリできますが、今回は数か少ないので羅列しています。 以上に関して、貼付ファイルのようなコードを記述してみました 一応仕様を満足する動作はしてくれるようですが・・・ ご指摘がありましたら、よろしくお願いします。

  • ExcelのVBAで選択したフォームデータの維持

    フォームでコンボボックスの内容をInitialize()にaddItemで記入すると、フォームを閉じて、改めて開くと、初期化されてしまいます。 これを、改めて開いたときにも、前回指定した内容が保持されていて、フォーム上のリセットボタンを押すまで初期化されない方法をご教示ください。 もし、ファイルを閉じても選択内容を保持できる方法があれば、合わせてご教示頂けたら幸いです。 使うアイテムは、コンボボックスとチェックボックスとして、各アイテムを選択した後、OKボタンを押して、その内容をセルに反映させ、リセットボタンで初期化することを想定しています。 よろしくお願いいたします。

  • ユーザーフォームいろいろについて

    いろいろ手探りでVBAでユーザーフォームを作成し コマンドボックスによりテキストボックスを指定のセルへ転記し ユーザーフォームを終了させるという簡単ですがプログラミングをしました。 さらに、下記のことができたらと思ってるのですがどうしたら良いのかわかりません。 1.2種類のユーザーフォームを作成し、ファイルを開くと  選択肢ウィンドウが現れ選択したほうのユーザーフォームが開く 2.チェックボックスまたはラジオボタンで選択された項目を  指定のセルへ○を反映させたい。 以上のことを加えたいのですが、できますでしょうか。 つたない説明ですが御回答の程宜しくお願い致します。

  • エクセルVBAのチェックボックスの使い方について

    初心者です。 ユーザーフォーム中で、6個のチェックボックスと3個のオプションボタンから、帳票を作成しようと思っています。 例  □check1□check2□check3□chechk4□check5(フレーム1) □check6○op1○op2○op3(フレーム1内、フレーム2) この状況から、□check1~6の内4個まで選択可能で□checkが選択されたら、順番に他のセルからセルa1、a4、a7、a10に転記する。(1個ならa1のみでa2に"文字"を記入)また、□check6のチェックでop1~op3→Enabled = TrueとしてActiveSheet.Shapes("グループオブジェクト").Select→移動(コピー)としたい。 if check1.Value = True Then文、celect case文等使用してみましたが思うようにいきません。ご指導願います。

  • エクセルのユーザーフォームのことです

    はじめまして。よろしくお願いします。 エクセルで、リストを作成しようと思っています。内容は、顧客名簿で、A名前、B住所、CからEまでははじめから項目があって、それに該当するものにチェックを入れる。項目とは、C医療、D教育、E学校という項目です。ユーザーフォームでテキストボックスを2つとチェックボックスを3つ、その他に確定ボタン、閉じるボタンを付けました。ユーザーフォームの名前住所に文字を入れ、チェックボックスに該当するもののチェックを入れ、確定ボタンでシートに転記し、続けて次の名簿を入れる・・という風にしたいのです。いろいろ参考にしながら作成したのですが、、、 質問(1)一人目、3つあるチェックボックスのうち2つにチェックを入れる→確定ボタンを押してもチェックボックスのチェックが残ってしまい、二人目を入れるのにチェックを一度消さなくてはならないのです。確定ボタンを押すと転記された後チェックがリセットされるようにするには、どうしたらよいのでしょうか? 質問(2)チェックをシートに転記すると、現在セルにはTRUEと入ります。これを”○”とか”レ”とかの記号にするにはどうしたらよいですか? おそらく、既に回答がある質問だとは思ったのですが、探すのが下手なのか見つけられずに、はじめてこちらに質問させて頂く次第です。よろしくお願いいたします。

  • excel vba ユーザーフォーム

    現在、セルa101からa110までに「商品名」、セルb101からb110までに「金額」が 入力済みです。 このデータを、ユーザーフォーム上にコンボボックスを2つ作成し、セルa1へ 商品名を選択後、入力。また、b2へ金額を選択後、入力させたいのです。 また、ユーザーフォーム上にテキストボックスを作成し、ここに入力した 「備考」の全角10文字をc1へ移動したいです。 今のところ、ユーザーフォーム、コンボボックス、テキストボックスを作成した だけで 立ち往生しています。 どなたか、ご教授お願いいたします。

  • VBAユーザーフォームのチェックボックスについて

    いつもお世話になっております。 VBAのチェックボックスについてお尋ねします。 貼付ファイルのようなユーザーフォームを作成しました。 フレーム1(TEST1)に 1.CheckBox1(全選択) 2.CheckBox2 3.CheckBox3 フレーム2(TEST2)に 4.CheckBox4(全選択) 4.CheckBox5 5.CheckBox6 フレーム外に 6.CheckBox7(全選択) があります。 フレーム1のCheckBox1にチェックを付けるとCheckBox2とCheckBox3にチェックが入り フレーム外のCheckBox7にチェックを付けると全てのCheckBoxにチェックが入るようにしたいのですが。 どなたかご教授をお願いします。

専門家に質問してみよう