• 締切済み

簡単な居酒屋の顧客管理シートをエクセルで作成したい

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

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答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つの機能の「抽出ボタン」ですが、まとめて表示するとはどのように表示するのでしょうか? なお、今回のマクロでは電話番号の形式については何もやっていませんので、正確な判別のためには厳密に統一された形式で間違いなく入力する必要があります。 このあたりを工夫するなら、入力から数字のみを抜き出して半角にしてしまうとか、それで目視判別しづらければ目視用の入力そのままの列と判別用の数字だけの列を用意するなどの方法が考えられます。 それでも正確に判別できないことがあるとは思いますが、そういう対策もご希望でしょうか?