EXCELで顧客管理

このQ&Aのポイント
  • EXCELを使用して顧客情報を管理する方法について教えてください。
  • フリガナを入力すると該当する顧客が一覧表示されるシステムを作成したいです。
  • 顧客情報を入力するフォームと一覧表示機能を実現する方法について教えてください。
回答を見る
  • ベストアンサー

EXCELで顧客管理

EXCELで顧客管理をしたいと思います。 一行に・・・  名前、フリガナ、郵便番号、住所、生年月日・・・・・・ と一つずつのセルに入力してあります。 500名分を7シートに分けて打ち込んであります。 (1)「フリガナ」の2文字を入力すると適合する顧客が別シートに一覧として表示されるようにしたい。 (2)「フリガナ」を入力して・・・という作業をする入力フォームを作りたい。 (フリガナを入力する→検索ボタンをクリック→表に一覧が表示されるといった形式のもの) 以上、2点について教えていただければ幸いです。 これは可能なことなのかもよくわかりませんがよろしくお願いします。  

  • fs-30
  • お礼率100% (8/8)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

次の参考マクロは、顧客リストのシートを "Sheet1"、抽出用シート名を "Sheet9" とした場合です。 不得意分野ですので、スマートではありませんが、参考にしてください。 まず、住所録データの入ったブックを呼び出して、VB Editor の標準モジュールに下記のコマンドをコピペしてください。 ここでは、Sheet1は、A列から「名前」「よみ」「郵便番号」「住所」の順に並んでいて、見出し行なしでデータは1行目から入っていると仮定していますので、実験用として、データをそのように加工してください。 また、Sheet9 を作成してください。 '---- コピーは次行から ------- Sub LstMk() OPL = 0 Application.ScreenUpdating = False Yomi = InputBox("名前の読み二文字を入力して下さい") ' ※ Worksheets("Sheet1").Select LL = ActiveSheet.Range("A1").CurrentRegion.Rows.Count For DTL = 1 To LL Worksheets("Sheet1").Select Cells(DTL, 2).Select DT8 = ActiveCell If Left(DT8, 2) = Yomi Then OPL = OPL + 1 Cells(DTL, 1).Select 名前 = ActiveCell Cells(DTL, 3).Select 郵便 = ActiveCell Cells(DTL, 4).Select 住所 = ActiveCell Worksheets("Sheet9").Select Cells(OPL, 1).Select ActiveCell.FormulaR1C1 = 名前 Cells(OPL, 2).Select ActiveCell.FormulaR1C1 = DT8 Cells(OPL, 3).Select ActiveCell.FormulaR1C1 = 郵便 Cells(OPL, 4).Select ActiveCell.FormulaR1C1 = 住所 End If Next DTL ' ※ ' # Worksheets("Sheet1").Select Application.ScreenUpdating = True End Sub '---- コピーは前行まで ------- コピー後 VB Editor を閉じ、[ツール]-[マクロ]-[マクロ] から、LstMk を実行し、処理終了後に Sheet2 を開いてみてください。 ++++++++++++++++ データシートは1枚を仮定しています。お手持ちのようにデータが複数シート(同様式)の場合は、上コマンドの "※"~"※" を シート名を変えて繰り返せばよいでしょう。

fs-30
質問者

お礼

ありがとうございます!!只今作業途中ですが御礼だけ先にいたしますね。 コピーができましたので加工中です。 自分で必死に調べてもどうつなぎ合わせてどうやれば・・・と頭が混乱していました。一つの理屈にまとめて教えていただいたので脳みそがスッキリしました。 初心者の私には神様の様です!! がんばって作ります。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

既に出ているご回答が長いので、短くならないかやって見ました。 25行程度になりました。ただ下記は至らぬ点があります。 (1)Sheet1からSheet7までの範囲を続けて検索する技術が   判らず、対応が出来ていない。致命的か?ご存知の方は   教えて頂ければと思います。Sheets(Array(”Sheet1","Sheet2"))  ・・・・が上手く行かなかった。 (2)カナ名索引の例でない。これは下記を少し変えて、直すことがで  きる。漢字名検索の方を勧めますが。  なお漢字名の一部でも検索してくることは確認済。(「大木 武」   で検索すると「大木 武雄」だけ出る。) (3)結果をフォームに表示していない。検索氏名をフォームで   聞いていない。これに対しては使っていないシートをフォームのよ  うに使うとかで切りぬけられる(VBと違いユーザーフォームがエク  セルVBAでは許されていない(?)ようなので)。売り物でなけれ  ばInputboxで我慢できるのでは。 ----- テストデータとしてA1:C13に下記のデータを入力。 氏名録 黒石 明       北区 24歳 山田 治夫 大阪市 35歳 金田 俊夫 大阪市 23歳 上野 義男 金沢市 20歳 大田 信夫 新潟市 22歳 安田 寛        丹後市 56歳 澤田 建次 岡山市 33歳 大木 茂        笠岡市 26歳 大木 武雄 下関市 43歳 山田 謙        北上市 22歳 栗本 裕二 甲府市 56歳 VBEのModule1に Sub Testo1() Sheets("sheet1").Select Range("e2:g13").ClearContents l = Range("a2").CurrentRegion.Rows.Count i = 2 x = InputBox("名前=") Set c = Range(Cells(2, 1), Cells(l, 1)).Find(What:=x, LookIn:=xlValues, _ SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False) If Not c Is Nothing Then fadr = c.Address Do Worksheets("sheet1").Cells(i, 5) = c.Offset(0, 0) 'a Worksheets("sheet1").Cells(i, 6) = c.Offset(0, 1) 'b Worksheets("sheet1").Cells(i, 7) = c.Offset(0, 2) 'c i = i + 1 Set c = Range(Cells(2, 1), Cells(l, 1)).FindNext(c) If c.Address = fadr Then Exit Do Loop End If End Sub 実行して「氏名=」と聞いてくるので、「大木」と入力。 E2:G4に 大木 茂        笠岡市 26歳 大木 武雄 下関市 43歳 大木 広        長野市 33歳 と検索結果が出ます。(以上テスト済。エクセル2000で。)

fs-30
質問者

お礼

出掛けておりまして御礼が遅くなってすみません。 ありがとうございました。 このくらいの長さだと、コピー貼り付けではなく自分で一つ一つ入力できるのでとても勉強になりました。かなり満足のいくものができました。感謝!!!です。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

シートでの処理-1 1.データは500名くらいで、シートは複数枚あるとします。(同じ形式なら何枚でもいいですが) 2.各シートは同一形式で1行目は表題、2行目からデータが入っているとします。 3.一覧表示させるシートを挿入してシート名『抽出』を付けます。 VBE画面での処理(ユーザーフォームを作ります) 1.ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→ユーザーフォーム(UserForm1) 2.表示→ツールボックスでツールボックスを出して、このユーザーフォームに    テキストボックス(TextBox1)とコマンドボタン(CommandButton1)を作ります。     TextBox1を右クリックして、プロパティを選択      IMEMode を 5 - fmIMEModekatakana に     CommandButton1を右クリックして、プロパティを選択      Caption を『抽出』に      Default を True にする。 3.CommandButton1をダブルクリックすると、ユーザーフォームのコードウインドウに    Private Sub CommandButton1_Click()    End Sub   ができるので、下のコード(※)をコピーして貼り付ける。      startCol = "C" にデータ登録の開始列をセットします。今はC列からデータがある事にしています。   Koumoku = 7  にデータの項目数をセットします。今は1行に7項目あるとしています。   FuriCol = 2  にフリガナが左から何番目にあるかセットします。今はD列にあり2番目です。 シートでの処理-2 1.シート『抽出』に戻ります。 2.表示→ツールバー→Visual Basic で Visual Basicのツールバーを表示。 3.コントロールツールボックスをクリック 4.コントロールツールボックスのコマンドボタンをクリックして、シート上にボタンを1つ作成。 5.ボタンの見た目は右クリックしてプロパティを選択して設定します。 6.ボタンは小さくして、1行目の左辺りに置いていたほうがいいでしょう。 7.ボタンをダブルクリック。(またVBE画面になる) 8.シート『抽出』のコードウインドウが   Private Sub CommandButton1_Click()   End Sub   なっているので、下のように書く。   Private Sub CommandButton1_Click()     UserForm1.Show   End Sub 9.シート『抽出』に戻ります。 10.コントロールツールボックスを閉じる。   デザインモードになっていたら解除する。 これでできているはず・・・・です。一応、別名で保存してボタンを押します。 何よりも説明が一番難しいですね。(当方Excel97です)   『フリガナの2文字と適合』については、入力した文字がフリガナの中にあれば抽出しています。   これを先頭からのみの照合に限定するなら下記のようにします。     If InStr(.Cells(rw, fCol), inpFuri) >= 1 Then      ↓     If InStr(.Cells(rw, fCol), inpFuri) = 1 Then (※)ユーザーフォームのコードウインドウに貼り付け  ↓ Private Sub CommandButton1_Click()   Const startCol = "C" 'データ登録の開始列   Const Koumoku = 7 '項目数   Const FuriCol = 2 'フリガナは左から何番目?   Dim sCol As Integer '開始列   Dim fCol As Integer 'フリガナがある列     sCol = Range(startCol & "2").Column     fCol = Range(startCol & "2").Column + FuriCol - 1     Range(Cells(2, sCol), Cells(500, sCol + Koumoku - 1)).ClearContents   Dim rw As Long, rwOut As Long '検索行と出力行   Dim inpFuri As String '指定したフリガナ2文字(3文字でもいい)   Dim ws As Worksheet 'データ入力されたシート   Dim wsOut As Worksheet '抽出結果の出力シート     Set wsOut = Worksheets("抽出")     inpFuri = TextBox1.Text   Application.ScreenUpdating = False   ActiveCell.Activate   rwOut = 1   For Each ws In Worksheets     If ws.Name <> "抽出" Then       rw = 2       With ws         While .Cells(rw, fCol) <> "" 'セルを調べる           If InStr(.Cells(rw, fCol), inpFuri) >= 1 Then             rwOut = rwOut + 1             .Range(.Cells(rw, sCol), .Cells(rw, sCol + Koumoku - 1)).Copy _                               Destination:=wsOut.Cells(rwOut, sCol)           End If           rw = rw + 1         Wend       End With     End If   Next   Application.ScreenUpdating = True   Me.Hide End Sub

fs-30
質問者

お礼

ありがとうございます!! これまた親切な御指導で感激してます。 わかりやすいですね。 これから必死にやってみます。 とりあえず御礼だけさせていただきます。 感謝です。

関連するQ&A

  • エクセルについて

    sheet1には個人情報(名前、住所、電話番号、生年月日)を入力した一覧表を作成し、sheet2には履歴書のような形式で雛形を作ります。sheet1に入力したものが、sheet2のそれぞれの項目のセルに飛ぶにはどうすればよいでしょうか?教えてください。

  • エクセル顧客管理のため参考媒体を教えてください

    下記の条件で顧客管理を考えています。 1)入力画面で情報入力することで、顧客一覧表へ自動入力したい。 2)顧客一覧表と同時に、カルテ的な顧客シートも作りたい。 3)顧客シートには顧客の写真を入れたい 4)エクセルで行いたい(アクセスは使用したことがないので) 参考になる書籍やサイトなどを教えてください。

  • Excelによる顧客名簿管理に関して

    3千名ほどの顧客名簿管理を、Excelで行おうと思っています。来店客に名前を尋ねた際、それにより住所や生年月日、顧客番号等を照合するだけが目的で、ダイレクトメールの住所印刷などをする予定はありません。従いまして、Excelに顧客一覧表を作り、その都度”検索”や”フォーム”の機能を用いれば十分かと考えております。 気になるのは、データ数の多さです。Excelで作る名簿は、列数は数列、多くてもせいぜい一桁ですが、行数は現在でも3千、将来的には1万を超えると予想されます。そのような表において、実用上問題が生じる可能性はないでしょうか? 例えば検索に相当時間がかかったりしないかどうか、心配です。 初歩的な質問で恐縮ですが、よろしくお願いします。

  • EXCELで顧客情報抽出したい

    こんばんわ。 EXCELで顧客の抽出をしたいのです。 具体的にいうと名前、住所、生年月日の一覧をつくり 一番上の業に検索したい顧客の名前を入力すると 住所と生年月日を表示させたいのです。 INDEXかVLOOKUPと思っておりますが、簡単な 方を教えてください。

  • EXCELを使って顧客管理

    マクロ・VBA初心者です。 EXCELで顧客管理をしたいと思います。 顧客台帳として 一行に 新規登録日、会員番号、氏名、フリガナ、郵便番号、住所、電話番号、メールアドレス と あ行  か行 ・・・・といったように入力してあります。 会員番号については、あ行から1001 か行2001から番号がふってあります。また、他支店分にかんしては、頭にSやTをつけた形で同じように会員番号を振り分けてあります。 また、別ファイルに売上台帳があり、現在は 売上日、会員番号、氏名、年齢、担当者、新規OR旧、売上金額、チケット使用の有無 を入力しています。 このファイルは縦台帳で売上日をどんどん縦に入力している状態です。 また、VLOOKUP等を使用して、会員番号を入力すると 氏名、年齢が表示されるようにしてあります。 これらを使用してやりたいことが (1)売上台帳に入力されたら、自動的に会員番号の隣の欄に来店回数を表示したい。 (2)会員台帳に前回来店日を表示したい。 (3)年代別・年齢別の売上集計を出したい。 (4)会員台帳・売上台帳の入力フォームを作りたい。 これが、EXCELで可能なのかわかりませんが、よろしくお願いします。

  • 顧客コードとは?

    以前使っていた住所録の一覧表に「顧客データ」という欄があり、顧客の通し番号のようなものが入力されていたのですが、同じ形式で新しい住所録を作ろうとした場合、カード形式の方に「顧客データ」に該当する入力場所が見当たりません。一覧表に直接入力するしかないのでしょうか。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • エクセルで簡単な顧客管理

    エクセル2000で簡単な顧客管理表をつくりたく一応、表は作ったのですがそこから先がわかりません。つくりたいことが、 ・フォームのつくり方 ・フォーム入力したものが表に記入される。 ・番号等を入力すると検索して表上のデータまでとんでくれる このようなことがしたいのですが、簡単なものでいいので作成方法教えていただけたらとても助かります。宜しくお願いいたします。

  • エクセルを使用して顧客管理を考えています。

    (1)顧客を地域ごとに分けたいと考えています。シート1に全顧客データを入力し シート2…名古屋市内 シート3…愛知県 シート4…岐阜県 シート5…静岡県 の項目とします。 シート1のセルに入力した住所から、それぞれ自動で振り分けることは出来ますか?出来るなら、シート1の全顧客データは、そのままの形で残り、コピーされる形で振り分けられるのがベストです。 (2)上記(1)の自動振り分けが出来ると仮定として、入力順ではなく日付順に並べることができるでしょうか?(セルのデータに、機器の納入日付を入力する欄は作ります) これまで、複数のシートを使う内容にチャレンジしたことがないので、分かりやすく説明して頂けると助かります。よろしくお願いします。

  • アクセスの顧客管理情報・リレーションが使えますか?

    アクセスデーターベースについて教えてください。 VBA等は、使用した事がありません。 どうぞ、分かりやすくお願い致します。 (ACCESS97を使用しています。) 会社で顧客管理情報を作成しています。 問い合わせのあった会社の 「会社名」、「カイシャメイ(フリガナコントロールで入力)」、「担当者名」、「電話番号」、「FAX番号」、「住所」、「問い合わせの内容」等 をテーブルに作成しています。 入力は、入力フォームで行っています。 また、会社には代理店が存在し、その代理店の「カイシャメイ」、「住所」、「電話番号」、「FAX番号」のデーターが入っている一覧表がテーブルにあります。 ここで、顧客管理情報と代理店一覧の 「カイシャメイ」にリレーションを張って、顧客管理情報をフォームで入力している時に、代理店からの問い合わせの時は、会社名(カイシャメイ)を入力すると自動的に代理店名簿の住所や電話番号等のデーターが入るようにすることは出来ますか? ちなみに、代理店ではなかった時は、自分で手入力してデーターを作りたいのです。 宜しくお願い致します。 m(__)m

  • エクセルのvbaでのふりがなについて…

    年賀状のために住所録を作成しているのですが、 住所から簡単に郵便番号を表示できるようにしたいと考えています。 いろいろ調べた結果、アドインのウィザードを使えばできるのは わかっているのですが…それとは別の方法で 住所を7桁の郵便番号で打ち込み、それを辞書ツールで変換して住所を作り、 その部分の振り仮名をphonetic関数で表示すれば郵便番号が 出力できることがわかりました。 しかし、これを今度vbaのユーザーフォームで入力した場合… 住所の部分をユーザーフォームのテキストボックスで入力し、 その住所の振り仮名を隣のセルに出力させようと思ったのですが、 textbox1 = cell(1,2).value の形で持ってくるきた上でエクセルのA1セルに =phonetic(A2) という表示をつけても振り仮名情報までは維持されないようで 振り仮名が表示できなくなってしまいました。 VBAのテキストボックスの中の文字の振り仮名情報などを エクセルのセルなどに転用できるような方法などあるのでしょうか? 説明下手ですみません…わかりにくいと書いていただければ また補足を付け足していこうと思うので… なにとぞ回答のほどよろしくお願いします。

専門家に質問してみよう