• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA ユーザーフォームについて)

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

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

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

  • ベストアンサー
回答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

専門家に質問してみよう