• ベストアンサー

エクセルVBAで売上帳作成

エクセルVBAで売上帳を作成しているのですが、毎日の売上・入金を記載しているシートから、顧客別に売上シートを作りたいのです。 作成しているシートは    A    B     C    D   E   F    G      H 1 日付 顧客NO. 顧客名 品名 数量 単価 売上金額 入金金額 2 3 というように作っていて、これを元に顧客NO.を指定すると、該当する行のみを抜き出して、別のシートに転記されるというようにしたいのです。 どのような命令文を作ればよいのでしょうか?

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

  • ベストアンサー
  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.4

簡単ですよ。 抽出元データシート:"A" 抽出先データシート:"B" "A"に貼り付ける行を格納する変数:lSrcRow "B"に貼り付ける行を格納する変数:lDstRow "A"→"B"に貼り付ける列を格納する変数:lCol ※変数名の1文字目"l"はLong型の変数ですよという意味です。 1.初期設定 ・lSrcRow = 2 ・lDstRow = 2 2.顧客番号抽出処理 2-1.lSrcRow行のA列にデータ入力がない場合→END 2-2.lSrcRow行の顧客番号チェック。     OK?→4.へ。     NG?→2-3へ。 2-3.lSrcRow = lSrcRow + 1 2-4.2-1に戻る 3.END 処理終了 4.顧客別データ転記処理 ・lCol = 1(A列) 4-1.lCol = 1(A列)~ 8(H列)までループ。下記処理を実施。 "B".Cells(lDstRow, lCol) = "A".Cells(lsrcRow, lCol) 4-2.lDstRow = lDstRow + 1 4-3.2-3に戻る。 ※4.データ転記処理を別関数にする必要はないと思います。 基本的な処理はこんな感じで、あとはこれに色々アレンジすればできると思いますが。 それにしてもこの表だと、顧客No.と顧客名の入力ミスが懸念されますね。その辺が多少気になりますが。

yunako0517
質問者

お礼

ありがとうございます。 教えていただいた方法でやってみようと頑張ったのですが、私の知識不足のため、よく理解することができませんでした。 いろいろ調べながらもうちょっと頑張ってみたいと思います。 ちなみに顧客NO.を入力すると顧客名が出てくるようにVLOOLUPを使っています。 一応両方表示されると便利だったので。

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

先ずは、マクロの記録でサンプル作成してみてください。 マクロの記録の開始 1、オートフィルター、抽出したい顧客Noで絞込み 2、1行目からたっぷりと行を選択、コピィ 3、ほかのシートを選択、貼り付け 4、データのシートへ戻って、オートフィルター解除 マクロの記録の終了 少し手直しすればよいと思います。 一例ですが、オートフィルター実行部分を Selection.AutoFilter Field:=2, Criteria1:=InputBox("ID") とかINPUTBOXにしてしまえば如何でしょうか。

yunako0517
質問者

お礼

回答ありがとうございます。 INPUTBOXの代わりに、指定したセル内に入力したIDで抽出したいのですが、なかなかうまくいきません。 もうちょっと頑張ってみたいと思います。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>これを元に顧客NO.を指定すると、該当する行のみを抜き出して、別のシートに転記されるというようにしたいのです。 >どのような命令文を作ればよいのでしょうか? どのように条件を与えるのでしょう。 あとコピぺ自体はA~H列の範囲で選択するか、A~I列で貼付けた後I列を削除すれば 手作業でもできますが・・・? それとも顧客別シートへの振り分けを考えているのでしょうか? だとすると、 >顧客NO.を指定すると がかみ合わないから違うかな。

yunako0517
質問者

補足

>どのように条件を与えるのでしょう。 指定したセルに顧客NO.を入力すると、別シートにその顧客のみの行を抜き出して転記するようにしたいのです。 全体の売上帳と、顧客ごとの売上帳を作りたかったのですが、毎年稼働する顧客数が何十件にもなるため、必要な時に必要な顧客の売上のみ表示させるようにしたいのです。 手作業でも出来ますが、抜き出しミスなどがあれば困るので、できれば自動で抽出される方法をとりたいのです。

  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.1

VBAにこだわっていますか? これくらいなら、オートフィルタで十分に対応できると思いますが (コピー処理は手動ですが。。。)。 1.オートフィルタで「顧客NO.」を絞り込み 2.結果をコピー 3.別シートに貼り付け これで簡単に出来ると思います。 VBAだと、余計手間隙かかりますよ。

yunako0517
質問者

補足

すみません!ひとつ書き忘れました。 I列に差額(売上-入金)が入っているのです。 転記する部分はH列までで、顧客別のシートでは、顧客ごとの差額を 計算させたかったので。 オートフィルタだと差額部分もそのまま抜き出してしまうので、VBAにこだわっていたのです。 説明不足ですみませんでした。 宜しくお願いします。

関連するQ&A

専門家に質問してみよう