重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

添付のような簡単な顧客管理シートを作成したいと考えてます。
予約→来店にいたった団体のお客様を履歴として残し、次回の利用時に料理が被らないよう・・・といった趣旨で単純に役立てていきたいと考えております。
ダイアログの入力フォームはそれぞれの項目の最終行を取得して写されるものになっていて
マクロはこんな感じです。


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件)

まずは作成したコードを示します。


質問者様が書かれたものを元にしました。
なお、このマクロでは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つの機能の「抽出ボタン」ですが、まとめて表示するとはどのように表示するのでしょうか?

なお、今回のマクロでは電話番号の形式については何もやっていませんので、正確な判別のためには厳密に統一された形式で間違いなく入力する必要があります。
このあたりを工夫するなら、入力から数字のみを抜き出して半角にしてしまうとか、それで目視判別しづらければ目視用の入力そのままの列と判別用の数字だけの列を用意するなどの方法が考えられます。
それでも正確に判別できないことがあるとは思いますが、そういう対策もご希望でしょうか?
    • good
    • 0

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