プロが教える店舗&オフィスのセキュリティ対策術

今回初めてマクロを使って入力フォームを作った初心者です。
教えてください。

TextBox1 お客様番号
TextBox2 お客様氏名
TextBox3 住所

TextBox1にお客様番号を入れると別シートのデータから ”TextBox2 お客様氏名”と
”TextBox3 住所”が反映されるような設定にしたいです。

また、お客様番号を入れて修正ボタンを押すと入力された内容が表示され修正が出来る設定にしたいです。


登録ボタンへのコードは下記の内容になります。

Private Sub CommandButton1_Click()
'登録ボタンをクリックしたときの処理

Dim LastRow As Long
Dim MyOpt As String
Dim i As Long


'ユーザーフォームの内容をExcelに転記
With Worksheets("接点記録")
'最終行にプラス1
LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1

.Cells(LastRow, 2).Value = Me.TextBox1.Text  
.Cells(LastRow, 3).Value = Me.TextBox2.Text
.Cells(LastRow, 4).Value = Me.TextBox3.Text
.Cells(LastRow, 5).Value = Me.TextBox4.Text
.Cells(LastRow, 6).Value = Me.ComboBox1.Text
.Cells(LastRow, 7).Value = Me.TextBox6.Text
.Cells(LastRow, 8).Value = Me.TextBox7.Text
.Cells(LastRow, 9).Value = Me.TextBox8.Text
.Cells(LastRow, 10).Value = Me.TextBox9.Text


TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
ComboBox1.Value = ""
TextBox6.Value = ""
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""

End With

End Sub


ご教示よろしくお願いいたします。

質問者からの補足コメント

  • コメントいただきありがとうございます。

    ユーザーフォームを開いて
    TextBox1にお客様番号を入れると氏名と住所が反映されて

    その他のTextBoxにはお客様の訪問日等の接点情報を入力し登録ボタンで
    セルに反映という感じをイメージしております。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/11/03 16:00
  • コメントありがとうございます。

    イメージとしてはユーザーフォームを開いてお客様番号を入力したら
    別シートの住所と氏名が反映されて、その他の項目は訪問日などの接点情報を入力して登録したいです。

    修正登録ボタン‼そうですね…全くの初心者そこまで知恵が回りませんでした。

    顧客番号は8桁の数字になります。

    登録内容の削除ボタンも要りますね・・・・ますますハードルがあがってしまいます。

    「ユーザーフォームに別シートからデータを反」の補足画像2
    No.2の回答に寄せられた補足コメントです。 補足日時:2023/11/03 16:15
  • 私の質問が言葉足らずで…
    はい!それが理想ですが何か他によい方法があればアドバイスお願いいたします‼

    あれやこれやと出来ないくせに考えてるうちに分からなくなってきてしまって…

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/11/03 18:25
  • ありがとうございます!!
    これでわかりますでしょうか?

    「ユーザーフォームに別シートからデータを反」の補足画像4
    No.4の回答に寄せられた補足コメントです。 補足日時:2023/11/03 18:27
  • コメントいただいていたのに返信が遅くなり大変失礼いたしました。

    1、お客様番号が正しいです
    2、3000件近くになります
    3.0から始まる番号もございます

    よろしくお願いいたします。

    No.7の回答に寄せられた補足コメントです。 補足日時:2023/11/05 07:05
  • 1.使用場所番号の入力
    2.検索ボタンのクリック
    3.検索結果の表示

    これであってます。

    担当者欄を追加しなきゃいけない1と!と気が付きました!

    接点記録情報に登録時は接点記録シートから情報を反映させたいです。
    修正時は接点記録シートから検索し修正を希望しています。

    ボタンの番号の確認です。
    登録ボタン:CommandButton1
    検索ボタン:CommandButton3
    変更ボタン:CommandButton4
    閉じるボタン:CommandButton2


    ①通常の運用で、接点記録シートを直接更新することは、ありますか。
     
    できれば直接入力はNGにしたいです。

    ②・XXXをコンボボックスに登録し、XXXを登録する。
      
      
    ③ 削除ボタンの登録も考えてますか?
      これも必要です!!


    ※コメントの文字制限があって言いたい事だけ伝えてしまってごめんなさい!

    No.6の回答に寄せられた補足コメントです。 補足日時:2023/11/05 07:17
  • コメントいただいていたのに返信が遅くなり申し訳ございません

    同一顧客での複数契約の場合…
    1顧客につき1契約なので重複はほとんどない想定です

    顧客情報と契約者情報をまとめての管理が希望なんですが、顧客情報は私が入力するのではなく他の者が入力するのでデータ管理を消してしまったりが心配なので別シートで考えております。

    契約番号も入力したい所ですが、こちらも各担当者での入力になり契約番号は何万もの種類があるので悩んではいます。

    No.5の回答に寄せられた補足コメントです。 補足日時:2023/11/05 07:25
  • ご連絡ありがとうございます。
    お客様番号に変更し担当者をTextBox5のG列に追加いたしました。

    お客様番号 、TextBox1      B列
    使用者氏名 、TextBox2      C列
    住所    、TextBox3      D列
    訪問日   、TextBox4      E列
    見積    、ComboBox1     F列
    担当者   、TextBox5      G列
    内容    、TextBox6      H列
    成約日   、TextBox7      I列
    金額    、TextBox8      J列
    備考    、TextBox9      K列

    に変更いたいしました。
    よろしくお願いいたします。

    本当に何度も何度もお付き合いいただきありがとうございます!!!

    「ユーザーフォームに別シートからデータを反」の補足画像8
    No.8の回答に寄せられた補足コメントです。 補足日時:2023/11/05 16:52
  • 返信がおそくなり大変失礼いたしました。

    ありがとうございます!上記の内容が理想形です!!
    まずユーザーフォーム作り直します!!

    本当にありがとうございます!!

    No.9の回答に寄せられた補足コメントです。 補足日時:2023/11/09 13:47

A 回答 (10件)

下記URLにアップしました。


https://ideone.com/9qF2Ze

使用上の注意
1.見積の項目ですが、こちらで暫定的に登録しておきました。
Me.ComboBox1.AddItem ("comb1")等
UserForm_Initializeのコンボボックスの登録内容をあなたの環境に合わせて、適切に設定してください。

2.お客様番号が0始まりがあるので、
フォーム上で01234567を登録すると、シート上には1234567と登録され、前0がなくなってしまします。
これを防止するために、シートのB列全体を選択し、セルの書式設定で文字列を選択してください。
そうすると、前0が保持されます。

今後の課題
1.入力項目のチェックは、お客様番号のみ行っています。
他の項目は、行っていません。もし、必要であれば、あなたが追加してください。
もし、追加の方法が判らない場合は、その旨補足してください。

2.検索について
現在は、お客様番号に一致するデータのみの検索だけですが、
①お客様番号にワイルドカードを指定しての検索
例 123456** (先頭の6文字が123456の番号)
例 ****1234 (最後の4字が1234の番号)
②お客様氏名を指定の検索(ワイルドカードも含む)
などが必要になるかもしれません。
もし、そのような要望があれば、その旨補足してください。
    • good
    • 0
この回答へのお礼

本当にご丁寧に教えていただきありがとうございました。
心から感謝いたします!!
今からお伝えいただいた事に沿ってやってみます!!
貴重なお時間を本当にありがとうございました!!

またお世話になるかもしれません…その際はよろしくお願いいたします。

お礼日時:2023/11/09 14:16

補足ありがとうございました。



あなたのほうで処理の流れが、まだ決まってないということなので、こちらで考えてみました。
添付図のようにしては、いかがでしょうか。、

ボタンは、
上部に
登録、変更、削除、検索 ボタンを配置します。
下部に
保存、削除実行、中止、閉じる ボタンを配置します。

処理の流れです。
1.使用場所番号の入力

2.下記のいずれかのボタンのクリック
2.1.登録ボタンのクリック時
  ①該当番号が接点記録シートに存在すれば、エラー表示し、1へ戻る。
  ②該当番号が接点記録シートに存在しなければ、フォームのデータをクリアして、3へ遷移する。
2.2.変更ボタンのクリック時
  ①該当番号が接点記録シートに存在しなければ、エラー表示し、1へ戻る。
  ②該当番号が接点記録シートに存在すれば、接点記録シートのデータをフォームのデータへ転記し、3へ遷移する。
2.3.削除ボタンのクリック時
  ①該当番号が接点記録シートに存在しなければ、エラー表示し、1へ戻る。
  ②該当番号が接点記録シートに存在すれば、接点記録シートのデータをフォームのデータへ転記し、3へ遷移する。
2.4.検索ボタンのクリック時
  ①該当番号が接点記録シートに存在しなければ、エラー表示し、1へ戻る。
  ②該当番号が接点記録シートに存在すれば、接点記録シートのデータをフォームのデータへ転記し、1へ戻る。

3.データの入力
  フォーム上の使用者氏名~備考を入力、又は、変更する。

4.下記のいずれかのボタンのクリック
4.1.保存ボタンのクリック時(登録、変更の場合)
  ①入力されたデータを接点記録シートへ保存する。
  ②1へ戻る。
4.2.削除実行ボタンのクリック時(削除の場合)
  ①接点記録シートから該当の番号の行を削除する。
  ②1へ戻る。
4.3.中止ボタンのクリック時
  ①1へ戻る。



各ボタンのオブジェクト名は、以下のようにしてください。

登録ボタン:CommandButton登録
変更ボタン:CommandButton変更
削除ボタン:CommandButton削除
保存ボタン:CommandButton保存
削除実行ボタン:CommandButton削除実行
中止ボタン:CommandButton中止
閉じるボタン:CommandButton閉じる

もし、表示を変えたい場合は、Capitionを変えてください。
上記のオブジェクト名でマクロを作成しますので、オブジェクト名は変えないでください。

上記の仕様でいかがでしょうか。
「ユーザーフォームに別シートからデータを反」の回答画像9
この回答への補足あり
    • good
    • 1
この回答へのお礼

エラー70の表示になってしまって3時間ほど悪戦苦闘しております。
どこから補足質問するのが良いのかも分からず…
何が原因なのか教えて頂きたいです。

お礼日時:2023/11/09 18:02

補足ありがとうございました。


1.お客様番号が正しいということですが、フォーム上では
使用場所番号になっています。
これは、このままでしょうか。それとも、お客様番号に変えるのでしょうか。
使用者氏名も同様です。お客様氏名にするのでしょうか。それとも、このままでしょうか。

2.担当者欄を追加ということですが、
それを追加したフォームを提示していただけませんでしょうか。
(項番1でお客様番号に修正するなら、それも含めて修正したものを提示してください)


3.現在のフォーム上の項目と接点記録シートの項目の対応は以下になっていると把握しています。
もし、間違いがあれば、指摘してください。また、担当者欄が追加になりますので、
それ追加した場合にどうなるかも、提示してください。

項目     オブジェクト名   シートの列
お客様番号 、TextBox1      B列
お客様氏名 、TextBox2      C列
住所    、TextBox3      D列
訪問日   、TextBox4      E列
見積    、ComboBox1      F列
内容    、TextBox7      G列
成約日   、TextBox8      H列
金額    、TextBox9      I列
備考    、TextBox10      J列

担当者    TextBox?      ?列
この回答への補足あり
    • good
    • 1

追加の不明点です。


1.お客様番号と使用場所番号は同じ意味かと思いますが、どちらが正しい用語でしょうか。
2.データの件数は、最大で何件程度になる予定でしょうか。
3.お客様番号は8桁の数字ですが、0から始まる番号もありますか。
例 01234567 等
この回答への補足あり
    • good
    • 1

処理の流れの確認です。

以下の流れであってますか。
1.使用場所番号の入力
2.検索ボタンのクリック
3.検索結果の表示

3.1.番号が接点記録シートに存在しない場合
 ①使用者氏名~備考を全てクリア
 ②使用者氏名~備考を担当者が入力
 ③登録ボタンをクリックし、接点記録シートへ登録する。

3.2.番号が接点記録シートに存在する場合
 ①使用者氏名~備考を接点記録シートから読み出し、フォーム上に表示する。
 ②使用者氏名~備考の変更箇所を担当者が変更
 ③XXボタンをクリックし、接点記録シートへ登録する。
 不明点:このXXボタンは、登録ボタンでしょうか。それとも変更ボタンでしょうか。
 登録ボタンだとすると、検索ボタンはどのような用途を想定していますか。
 変更ボタンだとすると、ボタンの位置は、登録ボタンの横の方が判りやすいかと。

ボタンの番号の確認です。
登録ボタン:CommandButton1
検索ボタン:
変更ボタン:
閉じるボタン:
上記のボタンのオブジェクト名が不明です。提示をお願いします。

その他の確認
①通常の運用で、接点記録シートを直接更新することは、ありますか。
(フォームを経由しないでデータを更新するケース。非常時を除きます。)

② ①と関係しますが、見積は、コンボボックスになっています。
 検索時、使用者番号が接点記録シートに存在し、見積の内容がXXXの時、
 コンボボックスにXXXがあれば、XXXを表示できますが、ない場合は、どうしますか。
 ・ない旨のエラー表示をする。表示される内容は、XXX以外のものになる。
 ・XXXをコンボボックスに登録し、XXXを登録する。
  等が考えられます。
  見積もりの内容を直接書き換えられるとこのケースが発生します。

③ 削除ボタンの登録も考えてますか?
この回答への補足あり
    • good
    • 0

No2です。



直接の回答ではありませんけれど・・・

補足で示されたフォームを見てみると、顧客情報の管理と言うよりも契約情報(?)もセットになっているようですが、これらがデータの1セットになっているのでしょうか?

もしそうなら、同一顧客で複数契約とかもありそうですが、どのようにデータを管理するおつもりなのでしょうか?
それとも、「一顧客、一契約」しかありえないので、重複する可能性は絶対にないような内容になっているということなのでしょうか?

全体像をよくわかっていないので、勝手な想像ですけれど・・
・顧客の基本情報は、「顧客情報」として管理し
・契約情報は「契約情報」として管理する
ような内容のような気もしますけれど・・
そうすると、「契約番号」のようなIDが別に必要になりそうな可能性も・・

※ 上記は内容を把握していない者の勝手なつぶやきですので、読み流してくださって構いません。
この回答への補足あり
    • good
    • 2

補足の画像ですが、画像が不鮮明なので、雰囲気はわかりますが、詳細が判りません。


フォームの部分だけを再度アップしてしただけませんでしょうか。
そうすれば、鮮明になるかと。
この回答への補足あり
    • good
    • 0

>ユーザーフォームを開いて


>TextBox1にお客様番号を入れると氏名と住所が反映されて

TextBox1にお客様番号を入れると、自動的に、お客様番号で
接点記録シートを検索して、氏名と住所を取得し、
それらをTextBox2,TextBox3に設定する、ということですか?
(お客様番号の入力後、どのボタンもクリックしない前提ですか)
この回答への補足あり
    • good
    • 0

こんにちは



>TextBox1にお客様番号を入れると別シートのデータから
>”TextBox2 お客様氏名”と”TextBox3 住所”が
>反映されるような設定にしたいです
新規の登録にも使うボックスなのでしょうから、入力されたら常に「検索-表示」というわけでもないように思われます。
(入力すれば常にそのような処理をするのなら、コントロールのUpdate関連のイベントを利用すれば可能です)

例えば「修正」ボタンを押せば、既存データから検索して反映するようにしておいて・・
>また、お客様番号を入れて修正ボタンを押すと入力された内容が
>表示され修正が出来る設定にしたいです。
「登録」ボタンを押せば、新規、修正共に登録されるようにしておけば良いのではないでしょうか?

テキストボックス等にデータを反映するには、既存データのB列(?)から同じ番号の行を検索して、その行の内容をフォームに表示すれば良いだけです。
(ご提示のコードと、ほぼ逆の処理のような感じ)


新規登録の際に、既存データに上書きしてしまう間違えを防止するのなら、「登録」ボタンを兼用せずに、「新規登録」と「修正登録」のように分けておく方が安全かも知れません。
顧客番号はIDなのでしょうから、(自動付加ではないようですので)新規登録の際には番号が重複していないこと等のチェックも必要なのではないかと推測します。
(新規登録なら、番号は自動付加されるという案もありそうな気がしますが・・)

処理がやや複雑になりますけれど、「修正」で既存データを呼び出した際は、「修正登録」が有効で、「新規登録」ボタンは無効になるようにしておき、更には顧客番号の欄も修正(=入力)不可にしておくとか・・
更には、登録内容の「削除」ボタンも必要なのかもなどと邪推してしまいますが、実際の利用方法の想定がよくわからないので、妄想するのはこのへんで・・
この回答への補足あり
    • good
    • 1

>TextBox1にお客様番号を入れると別シートのデータから ”TextBox2 お客様氏名”と”TextBox3 住所”が反映されるような設定にしたいです。



これは、検索ボタンをクリックした時の、動作でしょうか。
表示するのは、
TextBox2
TextBox3
のみで良いのでしょうか。
TextBox4
CommboBox1
TextBox6~TextBox9は表示しなくて良いのでしょうか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A