
現在会社のシステムで日報を入力させるユーザーフォームをExcel VBAで作成しています。
ユーザーフォームから登録ボタンを押して、
一覧のシートに転記するところまでは出来たのですが
間違えて入力したとき(又は一時保存して再度途中から入力したいとき)
再度日付をキーにしてデータを元のユーザーフォームに呼び出し、
上書き保存ができるようにしたいとのことで指示がありました。
現在は下記のような形で日付(+その他必須項目)が入力されていさえすれば
新しいデータは次の行に登録されていくようになっているのですが、
現在はITの会社でもなく私自身ほぼネットの情報から見様見真似でやっているので
どうしたらよいかわからず、手が止まってしまいました。
専門用語もあまりわからないような状態で申し訳ないのですが、
どなたか教えていただけると助かります…宜しくお願いします。
----------------------------------------------------------------------------------------
’登録ボタンを押した時の動作
Private Sub CommandButton1_Click()
’必須項目未入力時のエラーメッセージ
If TextBox295.Value = "" Then
MsgBox "日付を入力してください!", vbOKOnly
TextBox295.SetFocus
Exit Sub
:
:
Else: MsgBox "登録が完了しました。"
End If
’ ””入力””シートに下記のデータを転記する
With Worksheets("入力").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0) = TextBox295.Value '日付をA列に入れる
.Offset(1, 9) = ComboBox1.Value '天気をJ列に入れる
:
:
End with
End sub
----------------------------------------------------------------------------------------
No.3ベストアンサー
- 回答日時:
見様見真似とはいえ、
・「登録」(フォームボタンのシート)
・「閲覧フォーマット」(データを日ごとに見るためのシート)
・「入力」(フォームで登録したデータを蓄積していくシート)
はご自分で作成されたのであれば、アドバイス程度を・・・
「ユーザーフォーム」に「読込(等、表示内容はご自由に!)」のCommandButtonを追加し、以下の操作を加えればよい。
1.日付(TextBox295に入力済)をキーに「入力」シートに記載されている行を検索・特定する。
※「データ既存行」としておきます。No2さんも回答していますが、「Find」が一般的。
しかし、「閲覧フォーマット」(データを日ごとに見るためのシート)がある以上、そのアルゴリズムはほとんどできているはずです。
2.その行の情報を「ユーザーフォーム」に表示する。
※そのセルをもとに各コントロールに内容を入力する。
例
TextBox295.Value =.Offset(1, 0) 'A列の値を日付表示用に入れる
ComboBox1.Value=.Offset(1, 9) 'J列の値を天気表示用に入れる
:
:
--------------「ユーザーフォーム」に表示するための変更はここまでーーーーーーーーー
次に「登録操作の変更点」
・登録ボタンで、入力されてた内容をその行に書き込む
ほとんど既存の「登録ボタン」と同じ内容ですが、
「新規の登録」なのか「既存データの変更・追加」なのかによって
「With Worksheets("入力").Cells(Rows.Count, 1).End(xlUp)」
と
「With Worksheets("入力").Cells(データ既存行, 1).End(xlUp)」
を使い分ける必要が出てきます。
以上、参考にして下さい。
ご丁寧にありがとうございます。転記の方法については、
単純に転記元と転記先を入れ替えればよかったんですね!
そのあたりは簡単にできそうですが、Findを使う方法については
まだ少しよくわかっていない部分がありますので、書き方を他でも探してみます。
※閲覧フォーマットへの転記については、データを蓄積していく「入力」のシートから
単純にVLOOKUPでこちらも日付をキーにして入力させるようにしてしまいましたので
考え方は同じだと思うのですが、初めは検索ができない形式でも問題ないとの指示だったため、
閲覧用の方は、VLOOKであれば…と思い先に作成してしまったのですが、結果
フォームにも該当するデータを転記せざるを得なくなり、今VBAでやっています。
No.2
- 回答日時:
No.1です。
>・「閲覧フォーマット」(データを日ごとに見るためのシート)
>・「入力」(フォームで登録したデータを蓄積していくシート)
さて問題です。
「入力」シートのある1行のセルには、ユーザーフォームのどのコントロールから登録したのか?をどうやったら回答者はわかるでしょうか?
そもそもユーザーフォームにはどの位のコントロールが使われているのかも不明ですよね。
考え方だけで良ければ日付をFindメソッドで検索し、見つかったらOffsetでそれぞれのコントロールに値を入れていくと言う、
「登録」とは逆の動きをさせるButtonを配置して実行させる感じではないでしょうか?
考え方についてはわかりました!ありがとうございます。
ユーザーフォームには、「登録」というコマンドボタンを作っており、そのボタンに上記の内容とを入力しており、別の「入力」というシートに上から順に情報が追記されているような状態です。
単純な入力のみですので、その他にはユーザーフォームの終了ボタンしか作っておりません。
ただ、入力項目がそれぞれ数字を入力していくものが多く、全部で200項目程度あり、さらに混乱してしまっているような状態です…
No.1
- 回答日時:
登録ボタンの動作コードもですけど、どんなSheet構成になっているかが分からない(列とコントロールとの関係も)状態では、
回答も難しいのではないかと思いますよ。
ズブの素人ですので他の方はわかるのかもですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
入力済み、選択したセルに連動した行のデータをユーザーフォームで呼び出すには
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
6
ユーザーフォームに日付を表示させる方法を教えてください。そして、実行したあとでも日付が変わるようなプ
Visual Basic(VBA)
-
7
VBAコンボボックスで選択した値をシートに転記したい
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
10
UserForm1.Showでエラーになります。
工学
-
11
抽出したデータを修正して元のセルに上書きしたい
Access(アクセス)
-
12
EXCEL・VBAフォームの日付(表示形式を変更したい)
Excel(エクセル)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
15
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
16
コンボボックスからテキストボックスに連続して値を出したい
Excel(エクセル)
-
17
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
18
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
19
excel VBA ユーザーフォームを消すとTextBoxから反映させたセルの値も戻ってしまう
Excel(エクセル)
-
20
Excel にて、 リストボックスのデーターを別ブックのセルに転記するVBAをご教授願います
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初歩的な事だと思います。 Sub...
-
onkeyupのreplace処理を使うと...
-
教えて!全角文字「μ」の半角
-
excel vba でユーザーフォーム...
-
VBAでInputBoxの再入力をさせる...
-
入力フォームの値をQRコードで...
-
Excel-VBAでInputBox+Pulldown...
-
エディットボックスの入力制限...
-
textareaについて
-
HTMLでstyleを指定するフォーム...
-
テキストボックスの番号を使っ...
-
至急です!Excelがわかりません
-
エクセルVBA テキストボックス...
-
チェックボックスのCheckedとCh...
-
数字以外の入力をエラーにする...
-
複数行の入力を受け取る方法
-
C♯初心者で、四則演算の電卓を...
-
VBで電卓の=
-
ExcelVBA No.を自動連番で設定...
-
VBA R1C1形式で変数の入力について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
初歩的な事だと思います。 Sub...
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
数字以外の入力をエラーにする...
-
教えて!全角文字「μ」の半角
-
Excel-VBAでInputBox+Pulldown...
-
DataGridViewの桁数制限に関して
-
VBA R1C1形式で変数の入力について
-
入力フォームの値をQRコードで...
-
VBAでInputBoxの再入力をさせる...
-
エディットボックスの入力制限...
-
EXCEL VBA で指定した範囲に入...
-
accessで該当するレコードがな...
-
DataGridView 列ごとの入力制限
-
c#でTextBoxの入力制限
-
「イ分」・・・フンという文字...
-
アクセスのマクロ
-
TextBoxから数字が文字...
-
excel vba でユーザーフォーム...
-
ExcelVBAのユーザーフォームで...
おすすめ情報
【追記】わかりにくくてすみません…
シートの構成は、
・「登録」(フォームボタンのシート)
・「閲覧フォーマット」(データを日ごとに見るためのシート)
・「入力」(フォームで登録したデータを蓄積していくシート)
の3つです。