• 締切済み

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

添付のような簡単な顧客管理シートを作成したいと考えてます。 予約→来店にいたった団体のお客様を履歴として残し、次回の利用時に料理が被らないよう・・・といった趣旨で単純に役立てていきたいと考えております。 ダイアログの入力フォームはそれぞれの項目の最終行を取得して写されるものになっていて マクロはこんな感じです。 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つの機能の「抽出ボタン」ですが、まとめて表示するとはどのように表示するのでしょうか? なお、今回のマクロでは電話番号の形式については何もやっていませんので、正確な判別のためには厳密に統一された形式で間違いなく入力する必要があります。 このあたりを工夫するなら、入力から数字のみを抜き出して半角にしてしまうとか、それで目視判別しづらければ目視用の入力そのままの列と判別用の数字だけの列を用意するなどの方法が考えられます。 それでも正確に判別できないことがあるとは思いますが、そういう対策もご希望でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel オーダーフォームのテキストボックス入力について

    オーダーフォームを作成し、テキストボックスを2つ以上作成し、コマンドボタンを1つ作りました。 同じ行ですべてを入力できるようにしたいのですが、どうしたらよいでしょうか? テキストボックス1の値を入力するためのコマンドは、最下位の行を探してそこに入力するようなコマンドを作っているはずです…その横の列にテキストボックス2の値を入力し、その横の列にテキストボックス3の値を入力し…というようにしていきたいのです。 Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("sheet1") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = TextBox1.Value End With TextBox1.Value = "" TextBox1.SetFocus End Sub

  • 連続プルダウンについて

    VBAで初心者でリストを作るのがやっとで連続プルダウンができません 各月のシートに登録ボタン作成あります。登録ボタンを押して商品を登録する際に、大分類を選んだら、選んだ大分類の中分類を選べ、中分類を選んだら小分類を選べるようにしたいです。 そのために、Sheet1に分類の表を作成しました。 例えば、大分類で梱包作業用品を選んだら、     中分類には梱包/結束用品かテープ製品が選べて、中分類で梱包/結束用品を選んだら     小分類で緩衝材か養生用テープが選べる様にしたいです。 どうか教えて下さい。 ----------------------------------------------------------- Private Sub CommandButton1_Click() Dim lRow As Long Dim ws As Worksheet Set ws = ThisWorkbook.ActiveSheet With ws lRow = .Range("B" & Rows.Count).End(xlUp).Row .Range("B" & lRow + 1).Value = TextBox1.Value lRow = Range("C" & Rows.Count).End(xlUp).Row .Range("C" & lRow + 1).Value = ListBox1.Value lRow = .Range("D" & Rows.Count).End(xlUp).Row .Range("D" & lRow + 1).Value = TextBox2.Value lRow = .Range("E" & Rows.Count).End(xlUp).Row .Range("E" & lRow + 1).Value = TextBox3.Value lRow = .Range("F" & Rows.Count).End(xlUp).Row .Range("F" & lRow + 1).Value = TextBox4.Value lRow = .Range("G" & Rows.Count).End(xlUp).Row .Range("G" & lRow + 1).Value = TextBox5.Value 'lRow = .Range("I" & Rows.Count).End(xlUp).Row '.Range("I" & lRow + 1).Value = TextBox6.Value lRow = Range("I" & Rows.Count).End(xlUp).Row .Range("I" & lRow + 1).Value = ListBox3.Value lRow = .Range("J" & Rows.Count).End(xlUp).Row .Range("J" & lRow + 1).Value = TextBox7.Value lRow = .Range("K" & Rows.Count).End(xlUp).Row .Range("K" & lRow + 1).Value = TextBox8.Value lRow = Range("L" & Rows.Count).End(xlUp).Row Range("L" & lRow + 1).Value = ListBox2.Value lRow = .Range("H" & Rows.Count).End(xlUp).Row .Range("H" & lRow + 1).Value = TextBox9.Value End With TextBox1.Value = "" TextBox1.SetFocus TextBox2.Value = "" TextBox2.SetFocus TextBox3.Value = "" TextBox3.SetFocus TextBox4.Value = "" TextBox4.SetFocus TextBox5.Value = "" TextBox5.SetFocus 'TextBox6.Value = "" 'TextBox6.SetFocus TextBox7.Value = "" TextBox7.SetFocus TextBox8.Value = "" TextBox8.SetFocus TextBox9.Value = "" TextBox9.SetFocus End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "たのめーる" .AddItem "AMAZON" .AddItem "楽天" .AddItem "yahooショッピング" .AddItem "国峰印房" .AddItem "脇製茶" .AddItem "ヤマト運輸" .AddItem "ゼネラル" .AddItem "家電量販店" End With With ListBox2 .AddItem "総務課" .AddItem "用度" .AddItem "営業" .AddItem "介護" .AddItem "倉庫" .AddItem "人事" .AddItem "経理" End With With ListBox3 .AddItem "梱包作業用品" .AddItem "事務用品消耗品" .AddItem "パソコン用品消耗品" .AddItem "プリンター用品消耗品" .AddItem "掃除用品消耗品" .AddItem "衛生用品消耗品" .AddItem "消臭用品消耗品" .AddItem "洗剤用品消耗品" .AddItem "事務用品" .AddItem "掃除用品" .AddItem "生活雑貨用品" .AddItem "飲食用品" .AddItem "パソコン周辺機器" .AddItem "生活雑貨" .AddItem "医療機器" .AddItem "電化製品" .AddItem "衛生用品" .AddItem "日用品" .AddItem "出版物" .AddItem "家具" End With End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセルVBA テキストボックス

    いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • エクセルマクロ_テキストボックスをシートに反映(その2)

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム) 先ほどは大変お世話になりました。 複数行に応用させようとしたのですが、管理番号が余計に記載(テキストボックス(出荷日など)が空欄であっても、管理番号だけはとられてしまいます)されてしまいます。すみませんが、ご教授よろしくお願いいたします。 リストボックス1のデータは、Sheet1を表示しています。→管理番号はSheet2のA最終行に記載されます。 テキストボックス1(回答日)は、上記の管理番号記載のとなりに、 テキストボックス2(出荷日)は、テキストボックス1記載のとなりに、 ・・・とテキストボックス4(コメント)(これはK列)に1行で記載されます。 ↑ここまでは、教えていただいたので、完璧なのですが、 テキストボックス2~4までの内容を、あと複数行(4件)追加できるように試してみたのですが、空欄であっても管理番号だけは常に記載されてしまいます。 テキストボックス2と5に記載されている場合は、Sheet2に値を反映させるが、空欄の場合は、値を反映させないようにしたいのです。 (Sheet1=データベース) C5   D5 管理番号 品名 アカ12 りんご アオ56 みかん クロ34 なし クロ89 すいか アオ12 もも (Sheet2=入力シート) A(管理番号)    B(回答日)    C(出荷日)   D(数量)     K(コメント) アオ56        8月9日        8月10日      75     送り先の確認 アオ56                    8月11日      80 クロ34        9月4日        9月5日      80 (今回は、2行で作成した場合のマクロを記載しました) Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "0;0;50;50" .ColumnCount = 4 .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row End With End Sub Private Sub CommandButton1_Click() If TextBox2.Value Then Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox1.Value) Then .Range("B" & lRow + 1).Value = TextBox1.Value End If If IsDate(TextBox2.Value) Then .Range("C" & lRow + 1).Value = TextBox2.Value End If If IsNumeric(TextBox3.Value) Then .Range("D" & lRow + 1).Value = TextBox3.Value End If .Range("K" & lRow + 1).Value = TextBox4.Value End With End If If TextBox5.Value Then Dim llRow As Long With Worksheets("Sheet2") llRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & llRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox5.Value) Then .Range("C" & llRow + 1).Value = TextBox5.Value End If If IsNumeric(TextBox6.Value) Then .Range("D" & llRow + 1).Value = TextBox6.Value End If .Range("K" & llRow + 1).Value = TextBox7.Value End With End If Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then myCtrl.Value = vbNullString End If Next End Sub (ユーザーフォーム) リストボックス1=Sheet1のデータを反映 テキストボックス1(回答日) テキストボックス2(出荷日),テキストボックス3(数量),テキストボックス4(コメント)←1件目 テキストボックス5(出荷日),テキストボックス6(数量),テキストボックス7(コメント)←2件目 ↑1件目のみでコマンドボタンを押した場合は、1件目のみの管理番号取得をしたいのです。が今は、2件目が空欄でも管理番号はとられてしまいます。 長くなってしまいすみません。 どなたかご回答いただければ幸いです。よろしくお願いいたします。

  • excel VBA コンボボックスでシート選択後エラー

    どなたかご教授願います。 ユーザーフォームにコンボボックスを配置し、ブック内のシートすべて選択できるようにしてます。選択後シートに移動するのですが、同じユーザーフォームのテキストボックス等に入力した後、コマンドボタンをクリックするとエラーとなります。しかしテキストボックス等の値は間違いなく入力されています。よろしくお願いします。 Private Sub ComboBox1_Change() → Sheets(Me.ComboBox1.Value).Select       この部分が黄色になってしまいます End Sub Private Sub CommandButton1_Click() Dim myRow As Long ActiveSheet.Select myRow = Range("B65536").End(xlUp).Offset(1, 0).Row '各テキストボックの値をセルに入力 Cells(myRow, 2).Value = TextBox1.Value Cells(myRow, 3).Value = TextBox1.Value Cells(myRow, 4).Value = ComboBox2.Value Cells(myRow, 6).Value = TextBox2.Value Cells(myRow, 7).Value = TextBox3.Value Cells(myRow, 8).Value = TextBox4.Value 'Cells(myRow, 9).Value = TextBox5.Value '書式設定 Cells(myRow, 2).NumberFormatLocal = "m" Cells(myRow, 3).NumberFormatLocal = "dd" Cells(myRow, 6).NumberFormatLocal = "#,###" 'セルに入力が各テキストボックの値をクリア ComboBox1.Value = "" ComboBox2.Value = "" TextBox2.Value = "" TextBox3.Value = "" TextBox4.Value = "" 'フォーカス移動 ComboBox2.SetFocus End Sub

  • テキスト値をExcel反映空欄を無視し連続入力

    テキストボックス1~30に入力した際、テキストの3行目をクリアーした後、実行ボタンを押したらExcelsheet1のABC列に入力できるがテキストに空欄が生じた場合、以下のコードでは空欄以降の値が入力できません。空欄は無視し続けてセルに入力するコード表示はあるのでしょうか、お解りになる方宜しくお願いします。 できればコード追加入力で行いたいのですが。 Private Sub 実行_Click() Dim i As Integer Dim LRow As Long LRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To 10 If Me.Controls("TextBox" & i).Text = "" Then Exit For Range("A" & LRow + i).Value = Me.Controls("TextBox" & i).Text Range("B" & LRow + i).Value = Me.Controls("TextBox" & i + 10).Text Range("C" & LRow + i).Value = Me.Controls("TextBox" & i + 20).Text Next End Sub

  • EXCEL2003 VBA リストボックス

    お世話になります。 質問の内容についてですが、 現在VBAの勉強をしながらデータベースを組んでいます。 そこで、次のようなものを作っています。 Sheet1に於いて、     A    B     C 1  追番  名称   個数 2   1   りんご   1個 3   2   みかん  2個 4   3   なし    3個 5   4   なす    5個 というような表があるとします。 そして、VBAでフォームをつくり、TextBox1(名称入力用)、TextBox2(個数入力用)、ListBox1(すでに入力されているもの及び追加分のリスト用)、CommandButton1(入力された「名称」と「個数」をSheet1の表の一番下に追加)、CommandButton2(フォームを閉じる)という構成にしています。 また、Sheet1上にコマンドボタンを作っており、そのボタンを押すとフォームを呼出すようにしています。 流れとしては、既存の表に追加する場合、コマンドボタンを押してフォームを呼出し、テキストボックスに入力した内容をSheet1の一番下に追加する。また、フォーム上のリストボックスでも現在の表の内容を見る事ができる、というものです。 フォームでのコードは以下のようにしています。 Private Sub CommandButton1_Click() If TextBox1.Value = "" Then MsgBox "「名称」は必須項目です。" End If If TextBox2.Value = "" Then MsgBox "「個数」は必須項目です。" End If If TextBox2.Value = "0" Then MsgBox "「個数」に0は登録できません。" End If Lrow = Range("B2").CurrentRegion.Rows.Count Range("B" & Lrow + 1).Value = TextBox1.Value Range("C" & Lrow + 1).Value = TextBox2.Value End Sub Private Sub CommandButton2_Click() Unload UserForm1 End Sub Private Sub UserForm_Initialize() Dim b As Long Dim a() As String ReDim a(1 To 100) UserForm1.ListBox1.ColumnCount = 2 UserForm1.ListBox1.List = Worksheets(Sheet1).Range("B2:C").Value For i = 2 To 104 If Range("B" & i) = "" Then ListBox1.AddItem Range("B" & i).Value ListBox1.AddItem Range("c" & i).Value b = b + 1 a(b) = Range("C" & i).Value End If Next i End Sub このコードでSheet1上のコマンドボタンを押して実行しようとするとエラーが出てしまいます。 エラーの原因は何なのでしょうか? (なお、コマンドボタンのコードは「UserForm1.Show」のみです。 コード自体は本などを読みながら似たようなVBAを使った物を参考にしています。

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • Excelのユーザーフォームで別のファイルに転記

    Excel2007です。 マクロを含んだデータファイルがあるのですが、マクロブックとデータブックは分割した方がよいと言われて今分割の方法を試しています。 「マクロブック.xlsm」にマクロを記述し、「商品在庫Data.xlsm」にデータが格納されています。 (まだ試験中で完全に分割できていないのでデータブックもxlsm形式ですが) マクロブックのユーザーフォームから「商品在庫Data.xlsm」ファイルの「商品マスタ」というシートに転記したいのですが、どうやっても「商品在庫Data.xlsm」で「商品マスタ」シートを指定して転記できません。 ユーザーフォームのコードは下記のような内容です。 「HinTouroku」コマンドボタンを押した時に商品マスタシートに内容が転記されるようになっています。 Option Explicit Private Sub HinTouroku_Click() '商品登録 Dim lRow As Long Dim s1 As String, s2 As String Dim Ctrl As Control With Workbooks("商品在庫Data.xlsm") Worksheets ("商品マスタ") lRow = .Range("A" & Rows.Count).End(xlUp).Row s1 = .Cells(lRow, "A").Value s2 = txtHinId.Text If s1 = s2 Then MsgBox "商品IDが重複しています" Exit Sub End If lRow = lRow + 1 .Cells(lRow, "a").Value = txtHinId.Text .Cells(lRow, "b").Value = txtSyohinmei.Text .Cells(lRow, "c").Value = txtHinRyaku.Text End With For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" End If Next End Sub Private Sub TourokuClr_Click() '入力フォームのクリア Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then _ myCtrl.Value = vbNullString Next End Sub Private Sub TourokuCls_Click() 'フォームを閉じる Unload Me End Sub http://vbaexcel.seesaa.net/category/7604114-2.html このサイトを参考にしながら書いてみたのですがどうしてもシートの指定ができず… どのように記述すればよいのでしょうか?

専門家に質問してみよう