
添付のような簡単な顧客管理シートを作成したいと考えてます。
予約→来店にいたった団体のお客様を履歴として残し、次回の利用時に料理が被らないよう・・・といった趣旨で単純に役立てていきたいと考えております。
ダイアログの入力フォームはそれぞれの項目の最終行を取得して写されるものになっていて
マクロはこんな感じです。
Option Explicit
Private Sub CommandButton1_Click()
Dim lRow As Long
With ActiveSheet
lRow = .Range("B" & Rows.Count).End(xlUp).Row
.Range("B" & lRow + 1).Value = TextBox1.Value
.Range("C" & lRow + 1).Value = TextBox2.Value
.Range("D" & lRow + 1).Value = TextBox3.Value
End With
TextBox1.Value = ""
TextBox1.SetFocus
TextBox2.Value = ""
TextBox2.SetFocus
TextBox3.Value = ""
TextBox3.SetFocus
End Sub
Private Sub UserForm_Click()
End Sub
とここまでの入力は出来るのですが、オートフィルタなどを使わずダイアログボックスの入力フォームで電話番号がリスト中のデータとヒットした場合(=リピーター)は「この方は既に登録済みです。来歴・コメントのみ更新します。」という表示が出るとともに、添付画像下部にあるように「井上」と「田中」の間に新たな行を挿入、来店日のみ書き足される、、、つまり一目で分かるよう、余計な入力の無いように紐付けしたいと考えております。
さらに「抽出ボタン」を作成して電話番号入力で添付のピンクの部分の情報をまとめて表示させることも可能であればしたいと考えております。
使用用途はここまでで単純なのですが、マクロもほぼ分からず、考えるにあたっては複雑そうで自分ではハードルが高いです。
これ以上の機能は求めませんので、シンプルな形で分かり易く教えて頂けると大変助かります。
恐縮ですが、どうぞよろしくお願いいたします。

A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
まずは作成したコードを示します。
質問者様が書かれたものを元にしました。
なお、このマクロではActiveSheetを操作しているので、使用時は必ずデータのあるシートをアクティブにしておいてください。
(これを変更する場合はWith ActiveSheetの行を書き換えます。
たとえばマクロのあるワークブックのSheet1であれば、
With ThisWorkbook.Sheets("Sheet1")とします。)
Option Explicit
Const DRStart As Long = 2
Private Sub CommandButton1_Click()
Dim lRow As Long
Dim RowPos As Long
Dim RecNo As Long
Dim i As Long
Dim FoundFlag As Boolean
With ActiveSheet
lRow = .Range("C" & Rows.Count).End(xlUp).Row
RowPos = lRow + 1
RecNo = 1 + WorksheetFunction.Max(.Range(.Cells(DRStart, 1), .Cells(lRow, 1)))
For i = lRow To DRStart Step -1
If TextBox2.Value = CStr(.Range("C" & i)) Then
MsgBox "この方はすでに登録済みです"
FoundFlag = True
RowPos = i + 1
.Rows(RowPos).EntireRow.Insert
RecNo = 0
Exit For
End If
Next
If RecNo > 0 Then
.Range("A" & RowPos).Value = RecNo
End If
.Range("B" & RowPos).Value = TextBox1.Value
.Range("C" & RowPos).Value = TextBox2.Value
.Range("D" & RowPos).Value = TextBox3.Value
End With
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
End Sub
さて、これでは「余計な入力」があって質問者様のご希望のような「一目で分かる」とは言えない状態です。
でも、1つの表で作るデータベースとしてはやっぱり入力があった方が応用が利くと考えたため、上記のようなマクロにしました。
「一目で分かる」ためには表示だけを工夫すればよいと思いますので、以下のように条件付き書式を利用してはいかがでしょう。
(1) B列とC列をを選択
(2) 条件付き書式のダイアログを出す
Excel2003なら「書式」→「条件付き書式」
Excel2007なら「ホーム」の「スタイル」の「条件付き書式」→「セルの強調表示ルール」→「その他のルール」
(3) 左にある「セルの値が」を「数式が」に変更
(4) 数式を以下の通り入力
=$C1=OFFSET($C1,-1,0)
(5)書式設定
「書式」ボタンクリックで書式設定ダイアログが出るので、「フォント」タブをクリックし、文字の色を薄い灰色や白などに設定し、「OK」をクリック。
条件付き書式ダイアログに戻るので、ここでも「OK」をクリック
これで同一電話番号のデータが隣接していれば、最上行のみで幹事と電話番号が黒字ではっきり表示されます。
もう1つの機能の「抽出ボタン」ですが、まとめて表示するとはどのように表示するのでしょうか?
なお、今回のマクロでは電話番号の形式については何もやっていませんので、正確な判別のためには厳密に統一された形式で間違いなく入力する必要があります。
このあたりを工夫するなら、入力から数字のみを抜き出して半角にしてしまうとか、それで目視判別しづらければ目視用の入力そのままの列と判別用の数字だけの列を用意するなどの方法が考えられます。
それでも正確に判別できないことがあるとは思いますが、そういう対策もご希望でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、時間 0:00を表示...
-
エクセルで文字が白くなる
-
アクセスで#エラーを表示させ...
-
today関数で日付を全角文字で表...
-
Googleスプレッドシートで特定...
-
アルファベットにフリガナ
-
EXCELの散布図で日付が1900年に...
-
エクセル条件付書式で指定の時...
-
エクセルで「0(ゼロ)」を印...
-
エクセルの書式設定が解除でき...
-
エクセル(2003) 「1900/1/0...
-
Accessでユーザー定義書式は可能?
-
強調の・
-
エクセルで文字を含む式に、カ...
-
「countif」関数の結果の後に文字
-
エクセルで上付き,下付き文字...
-
gooブログ 投稿できません。
-
C#でfloatを整数部、小数部とも...
-
Excelで、空白を表示したい
-
エクセルでプルダウンから項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで文字が白くなる
-
エクセルで文字を含む式に、カ...
-
エクセル条件付書式で指定の時...
-
Excelで、空白を表示したい
-
EXCELの散布図で日付が1900年に...
-
アクセスで#エラーを表示させ...
-
エクセルで、時間 0:00を表示...
-
Excelのテーブルでセルの書式設...
-
小数点以下の数字だけ小さいフ...
-
today関数で日付を全角文字で表...
-
エクセルで上付き,下付き文字...
-
Excelのセルでの配置です。
-
Access ¥マークを表示しない
-
Excel 書式の一致を調べる関数...
-
excelの軸
-
TO_CHARでのゼロ非表示について
-
INDESIGNで空改行などのマーク...
-
エクセル書式設定。数値桁の先...
-
「countif」関数の結果の後に文字
-
エクセルの書式設定が解除でき...
おすすめ情報