- 締切済み
マクロのフォームから。。。
マクロのフォームから。。。 マクロのフォームからシートの最終行に入力ができるようにしたいのです。 マクロは下記になります。今の状態ですと、新規入力ボタンを押してデータ登録ボタンを押すと、途中の行に登録がされてしまいます。 暫く考えていましたがどうしてもわからず、また初心者の為できればわかりやすく教えてもらえると幸いです。どうかよろしくお願い致します。 Private Sub CommandButton3_Click() 入力結果 = MsgBox("データを登録しますか", vbYesNo) If 入力結果 = 6 Then If ToggleButton1.Value = True Then 表示行 = Cells(2, 10).Value + 1 Else 表示行 = Cells(1, 10).Value End If If ToggleButton1.Value = True Then データクリア TextBox1.Value = Cells(表示行, 1).Value + 1 Else データ表示 End If 表示行 = Cells(1, 10).Value Cells(表示行, 1).Value = TextBox1.Value Cells(表示行, 2).Value = TextBox2.Value Cells(表示行, 5).Value = TextBox3.Value Cells(表示行, 6).Value = TextBox4.Value Cells(表示行, 7).Value = TextBox5.Value Cells(表示行, 4).Value = ComboBox1.Value If OptionButton1.Value = True Then Cells(表示行, 3).Value = "男" Else Cells(表示行, 3).Value = "女" End If データ表示 End If End Sub ※ 表の範囲:a1:g5(1行目はタイトル) j1:表示行 j2:最終行(counta)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
長々と質問文を書いて質問するようなことでもなかろう。 データを最終行の次に入力データをセットしたければ Sheet1が対象であるとする。フォームにテキストボックス1つとコマンドボタン1つ設け 1データの入力が終わるとボタンをクリックする。 Private Sub CommandButton1_Click() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row Worksheets("Sheet1").Range("A" & d + 1) = TextBox1.Text End Sub これだけのことだろう。 テキストボックスを沢山設ければ、B列、C列のデータも同じ。 Worksheets("Sheet1").Range("B" & d + 1) = TextBox2.Text などを追加したらしまい。 ーー エクセルの操作でデータめにゅーでフォームがあるよ。使えないのかな。
- xls88
- ベストアンサー率56% (669/1189)
良く解らないのですが、変に思ったところを指摘します。 Private Sub CommandButton3_Click() 入力結果 = MsgBox("データを登録しますか", vbYesNo) If 入力結果 = 6 Then If ToggleButton1.Value = True Then '★1 表示行 = Cells(2, 10).Value + 1 Else 表示行 = Cells(1, 10).Value End If If ToggleButton1.Value = True Then '★2 データクリア TextBox1.Value = Cells(表示行, 1).Value + 1 Else データ表示 '★4 End If 表示行 = Cells(1, 10).Value '★3 Cells(表示行, 1).Value = TextBox1.Value Cells(表示行, 2).Value = TextBox2.Value Cells(表示行, 5).Value = TextBox3.Value Cells(表示行, 6).Value = TextBox4.Value Cells(表示行, 7).Value = TextBox5.Value Cells(表示行, 4).Value = ComboBox1.Value If OptionButton1.Value = True Then Cells(表示行, 3).Value = "男" Else Cells(表示行, 3).Value = "女" End If データ表示 '★4 End If End Sub --------------------------------------------------------- If文 ★1と★2は同じ条件のIf文だからひとつにまとめれると思います。 表示行 ★1で表示行を決定していますが、★3で否定しています。 ★3で表示行を再度決め打ちしているのは変です。 ★3は不要では? データ表示 ★4のデータ表示は何をしているのですか? データ表示というプロシージャを呼び出しているのですか? j1:表示行 セルJ1に表示行のデータがある j2:最終行(counta) セルJ2に最終行のデータがある という事のようですが、最終行データが利用されている部分が見えないです。 最終行 ワークシートの最終行、最終列を取得する http://www.niji.or.jp/home/toru/notes/8.html
- kmetu
- ベストアンサー率41% (562/1346)
最終行の行数は(例はA列) Cells(Rows.Count, 1).End(xlUp).Row で取得できます
補足
記述が不足してまして申し訳ありませんでした。 以下がデータ表示のプロシージャになります。 どうか宜しくお願い致します。 Sub データ表示() 表示行 = Cells(1, 10).Value TextBox1.Value = Cells(表示行, 1).Value TextBox2.Value = Cells(表示行, 2).Value TextBox3.Value = Cells(表示行, 5).Value TextBox4.Value = Cells(表示行, 6).Value ComboBox1.Value = Cells(表示行, 4).Value If Cells(表示行, 3).Value = "男" Then OptionButton1.Value = True Else OptionButton2.Value = True End If ※ また最終行データに関してですが… 以下のプロシージャをご確認下さい。 Private Sub CommandButton1_Click() If Cells(1, 10).Value > 2 Then Cells(1, 10).Value = Cells(1, 10) - 1 End If データ表示 End Sub Private Sub CommandButton2_Click() If Cells(1, 10).Value < Cells(2, 10).Value Then Cells(1, 10).Value = Cells(1, 10).Value + 1 End If データ表示 End Sub