エクセルのシートへの入力も、人間がセル位置を決めて、そこにデータを入力する。付加して新項目データを入力する場合なら、同行に主項目(例えば氏名)データもみえている。ユーザーフォームでの入力と変わらない。それなのに(初心者には)難しことをなぜ考えるのか。
他人に使ってもらうもの(仕組み)を作るため、とかいう理由も過去質問にあったが、ここに質問しているようなレベルで、他人に使ってもらうようなプログラムを(それも仕事がらみの)作るのは危険である。
下記コードなどは、短くないが、データはチェックが出来てない。実際では必要だろう。
ーー
まずは既に回答の在る、データーユーザーフォームの利用がある。
ーー
それ以外はユーザーフォームの利用はVBAを使うことが前提だろう。
「アクセス」のようにテーブル(クエリ)と連結した、テキストボックスを自動で作れないようなので複雑化する。。
参考までに
例データ
Sheet1のデータ A1:D6
氏名 住所 年令 車所有(現在空白、追加項目)
山田 相模原市 33
小島 厚木市 31
大田 横浜市 35
鈴木 海老名市 36
大木 横須賀市 36
ーー
車所有の情報を追加するのが主目的。
データの1行分を1行ずつ、ボタンクリックで(下に)すすめる。
車所有以外も変更・訂正してボタンをクリックすると、変更される。
ーー
VBE画面でー挿入ーユーザーフォーム
テキストボックス4つ、コマンドボタン1つ貼り付け。
フォーム 上に
(テキストボックスの四角 空欄) ←氏名表示用テキストボックス
(テキストボックス 空欄) ←住所表示用テキストボックス
(テキストボックス 空欄)
(テキストボックス 空欄)
■ <--コマンドボタン
普通は、テキストボックスの左には見だし(氏名など)をラベルで表示したりする(略)
ーー
コード
ユーザーフォームの「コードの表示」の
コマンドボタンのクリックイベントに
Private Sub CommandButton1_Click()
Static f
Static i
Static w
'ーーー
If f = "" Then ' 初回のみ
i = 1 '最初の表示第2行目から
w = 1 '表示モードから
GoTo p2 '最初は表示モードから
End If
p1:
'--更新モード
If f <> "" Then '初回はスキップ
If w = 0 Then '更新モードなら
Cells(i, "A") = TextBox1.Text
Cells(i, "B") = TextBox2.Text
Cells(i, "C") = TextBox3.Text
Cells(i, "D") = TextBox4.Text
w = 1 '次は表示モード
'--終わり判定
If i >= Range("A65536").End(xlUp).Row Then
MsgBox "終わり"
Exit Sub
End If
'---
End If
End If
'---
p2:
i = i + 1 '次行
w = 1 '次は表示モード
f = "n" '最初ではないに設定
If w = 1 Then '表示モードなら
'----
TextBox1.Text = Cells(i, "A")
TextBox2.Text = Cells(i, "B")
TextBox3.Text = Cells(i, "C")
TextBox4.Text = Cells(i, "D")
w = 0 '次は更新モード
End If
f = "n" '最初ではないに設定
End Sub
ーー
メニューの「実行ーSUB/ユーザーフォームの実行」で
ユーザーフォームが現れる。クリックすると、第2行目のデータが現れ、テキストボックスの中を、変更なりしてボタンをクリックすると、その状態でシートに保存され、次の行のデータがテキストボックス群に出てくる。
後戻りは出来るように考慮してない。
私は相当苦労したので、初心者には難しいと思う。
お礼
かなり複雑なことになってしまうのですね。 ちょっと手に負えるか解かりませんが、折角筋道たてていただいたのでチャレンジしてみます。 自分のためにこれ程ご尽力いただき、大変感激しております。 本当にどうもありがとうございました。 行き詰ったらまたお願いします。