• ベストアンサー

既存の表に自動的に新規顧客欄を追加する方法

エクセルで 1)それぞれの顧客の交渉状況などを記載した表があります。 また、 2)毎月の売上げの表(顧客名、売上高など)があります。 (これは毎月、つど自動的に出てきます) で、2の情報(売上げなど)を、1に追加していきたいのですが、単にそれだけであれば、vlookupなどでできるわけです。 しかし時々、2で新規顧客が発生します。そのさいに、1にその新規顧客の行を自動的に追加できるようにしたいのですが、何らかの方法で可能でしょうか。

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

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

Q、既存の表に自動的に新規顧客欄を追加する方法とは? A、私なら・・・ 1、月次売上表の[顧客名]を入力。 2、登録済みの顧客かどうかを判定する。 3、新規顧客であれば顧客データに追加する。 をVBAを組まないで実現するには? ・月次売上表の[顧客名]の隣に"既"Or"新"の判定結果を表示する列を追加。 ・"新"の表示が付いたら新規登録マクロを実行する。 ・新規登録マクロでは、"新"を手掛かりに[顧客名]を取得して追加する。 なお、追加マクロをコマンドボタンに仕込めば、 >"新"が押されたらクリック! するだけだ。よって、入力を監視して自動追加するVBAは書かなくてもいい気がする。

spongetak
質問者

お礼

なるほど! 考え方として、大変勉強になりました。また、次回のためにマクロの中に処理後の「新」を「既」に変えておく部分も入れておくわけですね。 ただ2つめの売上表のデータは、基幹システムのデータベースからとってくる表であるため、すでに新しいところが付け足されており、どれが新でどれが既か、その表からはすぐには分かりません。 そうすると、最初の「判定結果を表示する」部分の前半のマクロを作っておく必要があるわけですね。(そもそもそういうことですね) 前半と後半をつなげて一つにするのであれば、多少条件の分岐を記述したりする必要があるかもしれませんね。 非常に参考になりました

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

No5の追加です。 No5の数式をそのまま実際のシートに記載すると毎回数式を入れなければいけないので面倒な気もします。 新規顧客抽出用シートを作成して A2に(売上げの表がA2から始まっていると仮定してるので) =IFERROR(IF(MATCH(売上げの表!A2,顧客状況!B:B,0),""),ROW()) B2に =INDEX(売上げの表!A:A,SMALL(A:A,ROW(1:1)),1) として下方向に適当にコピーしておき 抽出された新規顧客分を実際のシートの顧客列の末尾にコピー値貼り付けすれば数式はそのまま毎回使いまわせます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

No2の表の状態だと仮定して関数だと 「売り上げの表」の顧客と同じ行の空いているセルに以下の数式を入れてデータのある最下行までコピーします。 顧客名がA2の行の例です。 =IFERROR(IF(MATCH(A2,顧客状況!B:B,0),""),ROW()) 数値が表示されたらその場でコピー値貼り付けをします。 (式のままだと以下の式を入れたときに循環参照になるので) 顧客状況の顧客名を追加したいセルに以下の式を入れて下に適当な行分コピーします。 =INDEX(売上げの表!A:A,SMALL(売上げの表!B:B,ROW(1:1)),1) 顧客名が表示されたら「売り上げの表」が変更される前にその場でコピー値貼り付けをします。

回答No.4

【補足】 >そうすると、最初の「判定結果を表示する」マクロが必要ってことですね。 私が、示した案でよければ・・・。これは、判定表示列に =DLookup("SELECT '既' FROM [シート名$A1:Z10000] WHERE 顧客名=' " & F7 & "'", "新") という式を書いておくだけでも実現できます。(ブログ009参照のこと) 必要であれば、DLookup関数を紹介します。 なお、転記自体も 003 で示している要領で可能です。が、これは、既に回答のVBAコードで事足りると思います。問題は、'既'と "新”を判定する式に書ける関数だと思って、チョイ補足しておきます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

No2一部訂正です。 「売上げの表」のA列に顧客名が  ↓ 「売上げの表」のA2から下方向に顧客名が

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

顧客名だけを追加するVBAです。 顧客の交渉状況などを記載した表(シート)を「顧客状況」 毎月の売上げの表(シート)を「売上げの表」 というシート名だと仮定します。 「顧客状況」のB列に顧客名が 「売上げの表」のA列に顧客名が 入っているものと仮定します。 「売上げの表」にあって「顧客状況」にない顧客名を「顧客状況」の最終行に追加していきます。 Sub Example() Dim i As Long Dim Sh1 As Worksheet, Sh2 As Worksheet Dim mRange As Range, fRange As Range Set Sh1 = Sheets("顧客状況") Set Sh2 = Sheets("売上げの表") Set fRange = Sh1.Range("B:B") With Sh2 For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Set mRange = fRange.Find(.Cells(i, "A"), LookAt:=xlWhole) If mRange Is Nothing Then Sh1.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Value = .Cells(i, "A").Value End If Next End With Set Sh1 = Nothing Set Sh2 = Nothing Set fRange = Nothing End Sub

spongetak
質問者

お礼

ありがとうございます。VBA勉強したいとおもっています。

関連するQ&A