• 締切済み

Excel VBAで項目ごとに別々のシートに転記したい

excel VBAで項目ごとに別々のシートに転記したい 困り度: すぐに回答を! excelVBA勉強中の初心者です。 初めて質問させていただきます。 初心者には難しく、行き詰ってしまいました。 仕事で以下のことがしたく、基本書、参考書などを調べて勉強し作成していっているのですが、身近に教えていただける方もおらず、つまづいております。 詳しい作成方法など、詳しい方にご教授いただければと思います。 book(1) 一ヶ月分の売上データが入っており、     A列に取引先名     B列に商品名     C列に件数     D列に合計額     があります(1万行前後)。 book(2) シート1に抽出したい取引先名の一覧(50件ほど)、      シート2以降は転記用でA列に商品の一覧(固定)、      例えば4月分であればB列に件数、C列に金額、     5月分であればD列に件数、E列に金額・・と一年間使用するため、件数・金額は12か月分用意してあります。      シート1にある抽出したい取引先ごとに作成しています。 (1)の売上データを、(2)にあるシート1の取引先一覧と一致するものを抽出して、取引先ごとに分けてあるシートに転記したいのです。 ※(1)の売上データには抽出不要の取引先も多数含まれています。 ※(1)の売上データは同じレコードが存在する場合もありますが、すべて別々のものとみなし、転記先シートには件数・金額ともに合計を表示したい 以上です。 よろしくお願いします。

みんなの回答

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

ANo.2です。 4月・5月・・・をどのように判断するのか不明ですし、エラー処理もしてません。 従って4月の位置(B列・C列)に書き込むだけです。 またセルの配置があっているか自信はありません。 Sub try() Dim Dic As Object Dim wb As Workbook Dim r As Range, rr As Range Dim i As Long Dim st As String Dim v, w, n, key Set Dic = CreateObject("Scripting.Dictionary") Set wb = Workbooks("Book2.xls") With wb.Worksheets("Sheet1") Set r = .Range(.[A2], .Cells(Rows.Count, 1).End(xlUp)) End With With Workbooks("Book1.xls").Worksheets("Sheet1") v = .Range(.[A2], .Cells(Rows.Count, 4).End(xlUp)).Value For i = 1 To UBound(v, 1) st = v(i, 1) & "_" & v(i, 2) If Not Dic.Exists(st) Then Dic(st) = Array(v(i, 3), v(i, 4)) Else Dic(st) = Array(Dic(st)(0) + v(i, 3), Dic(st)(1) + v(i, 4)) End If Next End With For Each key In Dic.keys w = Split(key, "_") n = Application.CountIf(r, w(0)) If n > 0 Then With wb.Worksheets(w(0)) Set rr = .Range(.[A3], .Cells(Rows.Count, 1).End(xlUp)) n = Application.Match(w(1), rr, 0) If IsNumeric(n) Then .Range("B" & n + 2).Resize(1, 2).Value = _ Application.Transpose(Application.Transpose(Dic(key))) End If End With End If Next Set Dic = Nothing Set wb = Nothing Set r = Nothing Set rr = Nothing Erase v End Sub ご参考になるかどうか。。。?

ptptpr
質問者

お礼

ご回答ありがとうございます! 詳細のコードまで考えていただき、大変感謝しております。 月の判別は自分にとってはまだまだ次の課題でまずひと月分の集計・転記を理解しなければ、と思っています。 早速教えて頂きましたコードを参考にして頑張ってみたいと思います。 素早い回答とアドバイス、本当にありがとうございました。

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

Ano.1です。 どのような形式のデータから、どのような形式に纏めたいのかよくわかりません。 例えばbook1のどこから、book2の4月分とか5月分とか・・・になるとか。 たぶんですけど、文章よりシート構成を提示された方が良いのかもしれません。 または実務に早急に必要な事であるのなら、勉強とは切り分けて上司に相談されるのが宜しいかと。(外注委託等々) ちなみに同じ項目毎に集計をしていく方法では、私はDictionaryオブジェクトを使用してます。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html ご参考になれば幸いです。

ptptpr
質問者

補足

ご回答ありがとうございます! Dictionaryオブジェクトですが、早速調べてみたいと思います。 なにか理解につながるきっかけでもなんでも欲しい、と思っていましたので大変ありがたいです! シート構成を簡単ですが作ってみました。 ******************************** book(1) 売上実績のデータ       <A> <B> <C> <D> 取引先 商品名 件数  金額 エ会社 色鉛筆  3  1200 ビ商会 色鉛筆  4  1600 エ会社 消ゴム  6  300 シー屋 定規大  8  4000 ビ商会 メモ帳   5  500 エ会社 色鉛筆  5  2000 シー屋 定規小  6  2400 デ会社 消ゴム  10  500  ・     ・     ・    ・  ・     ・     ・    ・  ・     ・     ・    ・ ひとつの取引先でも同じ商品名での売上が複数あります。 例) エ会社→  色鉛筆  3  1200             色鉛筆  5  2000  など この場合、転記先には8件・3200円と転記したい ******************************** book(2)  取引先、商品の一覧、転記用シートを用意       こちらにコードを書いていっています。        ●シート1● <A>       <D> 取引先一覧    商品一覧 エ会社       消ゴム シー屋       定規小 デ会社       定規大  ・           ・   ・           ・  ・           ・   <A>には、抽出したい取引先のみ一覧となっている <D>には、すべての商品一覧で、シート2のA列と同じ ●シート2以降●         ≪4月分≫       ≪5月分≫ ・・・・ <A>   <B>   <C>   <D>   <E>・・・・ 商品一覧  件数    金額    件数    金額 消ゴム   定規小 定規大  ・  ・  ・ シート1のA列にある取引先一覧にあるものをシート別にしたもので、 様式・商品一覧はどのシートもすべて同じものを使用しています。 4月、5月・・と一年分を用意してありますが、1回にくるデータはひと月分なので5月分がきたら5月分の列に転記、6月分なら6月分の列へ・・といった感じです。   

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

出来ている範囲だけでも(例え上手く動かなくても)提示された方がいいかもしれません。 あとbook(2)のシート2以降のA列に商品の一覧があって、シート1に取引先名があると言うのであれば、 取引先毎の商品名には重複はない?のか、或いは結びつけるリスト等は存在しないのか? ちょっと疑問に感じました。

ptptpr
質問者

補足

ご回答ありがとうございました。 説明不足で申し訳ありません。 book(2)の取引先一覧の横に商品名の一覧もあり、 この商品名一覧はどの取引先にも共通で、シート(2)以降すべてのシートのA列に同じものを載せています。 また、シート(2)以降の取引先別シートはシートタブとセルA1のみに取引先一覧からもってきた取引先名を入れおり、他はすべて同じ内容です。 book(1)のデータ内のには一つの取引先にも同じ商品名が複数あり、その件数と金額のそれぞれ合計をbook(2)に転記できれば、と思います。 今の段階では、 ・book(2)の取引先一覧から各シートを作成して、シート名をつける ・データそのものがCSVでくるのでそれをを開いて不要な列などを削除し、book(1)とする とまでしかできておらず、肝心の集計のところでつまづいています。 繰り返し検索・抽出・転記ということでFor~Next、Do~Loopなど使えばよいのか?と思ってやってみてはいるのですが、シートを選択して転記、という条件がよく理解できず、うまくつながらないようで・・。 知識も実践もなくお恥ずかしいのですが、何を使えばよいのかいまいちよくわかりません。 アドバイスでも良いので是非お願いします!

関連するQ&A

  • VBA 別BOOKへのデータ転記について

    VBA初心者です。 以下のことがしたいのですが、 コードをご教示いただきたくお願いいたします。 BOOKが5つあります。 BOOK1:抽出用(Sheet2に日々の受注データを入れています)        BOOK2:転記100用 BOOK3:転記200用 BOOK4:転記300_400_500用 BOOK5:工事番号用 BOOK1:抽出用はA列からQ列まで工事番号ごとに2行目から受注データが入っています。 抽出用のsheet2のA列に「1」と入力することで転記したいデータだというフラグにし、 抽出用O列のコード100,200,300,400,500(工事の種類のようなものです)を見て、 該当のBOOK2から4にその工事番号が転記がされているか? (されていれば登録済みのメッセージ表示) 転記がされていなければ新規に登録、 新規登録の際に、抽出用Sheet2のD列の工事番号、I列の件名、K列の数量を表示して、 このデータを新規登録しますか?のようなメッセージを出し、Yesなら新規登録。 さらに、新規に登録した際にはその工事番号を名前とするBOOK5を新規作成、 BOOK5にも抽出用の受注内容を転記。 BOOK2から4に転記された工事番号をクリックすると その工事番号のBOOK5にジャンプするようにしたいのです。 抽出用A2とA4に「1」と入力された場合(O列は共に200) BOOK1抽出用データの転記したいセル番地  →  BOOK3転記200用のセル番地 A2のデータ D2 → A7 K2 → A8 C2 → A9 H2 → A10 I2 → A11 F2 → D7 L2 → D8 M2 → D9 J2 → D10 C2 → I5 Q2 → J5 A4のデータ D4 → A12 K4 → A13 C4 → A14 H4 → A15 I4 → A16 F4 → D12 L4 → D13 M4 → D14 J4 → D15 C4 → I10 Q4 → J10 BOOK2から4は1つの工事番号を5行使用して表わしています。 ですので、1つの工事番号が7から11の行、 2つ目の工事番号が12から16行目となり、それぞれ100件分の工事番号を入れられるように 作成してあります。 またBOOK5については、(A2のデータの場合)以下のように転記し、ファイル名を抽出用D2の工事番号にしたいです。 A2のデータ D2 → A3 K2 → A4 C2 → A5 H2 → A6 I2 → A7 F2 → F3 L2 → E4 M2 → E5 J2 → E6 大変長くなってしまいましたが、以上のようなことをしたいと考えておりますが、 当方、VBA初心者でして参考書とネットを駆使して抽出用のVBA(CSVデータをコピーして加工する)ことにすら大苦戦しております。 なんとかお力を貸していただけないでしょうか? ご教示よろしくお願いいたします。

  • エクセルVBA シート1からシート2へ転記したい

    シート1のデータはそのままで、 シート2に編集して転記したいです。 シート1にはA列からI列までデータが入っています。 行数は都度変わりますがデータは3行目から始まり 大体500行くらいです。 転記方法は シート1のD列→シート2のA列 シート1のE列→シート2のB列 シート1のF列→シート2のC列 シート1のC列→シート2のD列 でシート1のD列の値が同じ場合は 転記先のシート2の行数は増やさずにシート1のC列の値を 同じ値のF列内にカンマでつないで転記したいです。 でそのつないだ合計数をシート2のE列に表示したいです。 イメージ C  D    E     F ------------------------ A1 みかん 国内 Sサイズ A3 みかん 国内 Sサイズ D6 みかん 国内 Sサイズ D9 りんご 国内 Mサイズ G7 りんご 国内 Mサイズ F5 バナナ 海外 Lサイズ G1 バナナ 海外 Lサイズ A2 いちご 国内 Sサイズ D8 いちご 国内 Sサイズ F3 いちご 国内 Sサイズ H2 いちご 国内 Sサイズ   ↓ A    B    C      D     E ------------------------------------------- みかん 国内 Sサイズ A1,A3,D6   3←3個 りんご 国内 Mサイズ D9,G7     2←2個 バナナ 海外 Lサイズ F5,G1     2←2個 いちご 国内 Sサイズ A2,D8,F3,H2  4←4個 上記例の場合は元データは11行ですが編集後は4行です。 配列は自力で作成できないので考え方を教えていただきたいです。 構文をそのまま書いていただいても大変助かります。 Do~LoopかFor~Nextで上から順最終行まで処理で シート1からシート2へ転記する構文をかいて D列の値が直前に処理した値と同じ場合は 転記はしないでC列の値を変数1に代入し シート2の該当行のD列も変数2に代入し 変数1&","&変数2で対象行のD列に転記と考えましたが うまくできませんでした。 またシート2のE列の求め方ですが、上記変数1,2に代入した後に 変数3=変数3+1とかの文でカウントし、 その値を転記すればいいのでしょうか? すいません。今日1日頑張ってうまくできず 上手く説明できません。 よろしくお願いします。

  • データ転記。うまく転記できないシートがあります。

    エクセルのデータ転記について助けてください。 現在 エクセルで職場で使用する現金出納帳を作成中です。完成間近なのにつまずいてしまいました。 作成にもう長い時間かかっるので今週中になんとか仕上げたいのです。 (職場での周りの目がこわくって・・・) どうかどうかよろしくおねがいします。 *各シートの説明 【シート1(元帳)】は記入用シート(1年間の経費等の入力をします) A1は表題 2行目はタイトル行で B列:月日、C列:曜日、:D列:経費部門コード(以下部C)、E列:経費部門名(D列の部C入力時に他シートにあるデータベースからLOOKUPで抽出して表示するようにしてます) F、G列は手入力用の内訳や備考の列、H列:収入金額、I列:支払金額、J列:差引残高。(I・J列は転記必要なしです) データはB3(日付)から入力します。 データ表の範囲はとりあえず100行目まで(A1からJ100) 【シート2~シート16(シート名はD列の経費部門コード番号です)】 こちらが転記先シートです。 A1に部門コード、B2に部門コード名(A1のコードでデータベースより抽出)2行目はB列:月日、C列:曜日、D、E列:内訳、備考、F:支払金額 【シート17(経費部門コードのデータベース)】 部門番号と部門名を表にして 元帳で入力の際 ここからひっぱってくるようになっています。 番号は15種類(経理上不規則な番号):1・2・4・5・6・7・8・9・10・12・20・21・22・仕・給(これをシート名にしてます) *希望する完成仕様 元帳(シート1)に入力したデータが同時に部門C別シート(15種類)に必要な項目だけ転記される。必要な項目は上記のシート説明参照。 *現在の作成状況 ・元帳のシート A3に'=COUNTIF($D$3:D3,D3)&D3 以下 A列はA3をコピー ・15枚の部門番号のシート B3(転記初期行)に'=IF(ISERROR(VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)),"",VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)) C3,D3,E3,F3列はB3をコピーしLOOKUPの列番号を変更 *現在の状況と問題点 シート4・5・6・7・8・9・10・12・20・21・22はきちんと転記する。 シート1(部門C:1)は部門C:1と部門C:21のデータが転記されてしまう シート2 (部門C:2)は部門C:2と部門C:12と部門C:22のデータが転記されてしまう。 この2つのシートは 下1桁でひっぱってきてしまってるのは分かるのですが改善方法が分かりません。 どうかこの2シートがきちんと動く数式を教えていただけるでしょうか? 文章力不足のため 質問の理解にさぞ悩まれるでしょうがどうぞよろしくお願いします。 補足:01 02 04と 二桁でもしてみましたが反応は同じ。 よく分からなくて セルの表示変えても値は1・2・4になってしまうんです・・。 結局よく分かりませんでした。

  • エクセルVBAでのコード番号抽出について

    エクセルの売上一覧から会員番号ごとにデータを抽出して、合計金額を算出し、新しくデータを作りたいのですが、コード番号は顧客の購入分存在しますので、コード番号は人によって 5個あったり20個あったりします 当初、forの中にIF分を記載するなど考えましたが、どうしても同じ会員番号のデータだけを取り出すということが出来ていません。 同じ会員番号のデータだけを抽出し、他のシートへそれらの合計件数、合計金額を書き出したら 抽出したデータは削除し、また次の重複データを抽出し、合計件数、合計金額を書き出し・・・ ということが実行できるコードがありましたらお教えください。

  • エクセルVBAでVLookupを使って値を転記する

    エクセル2003で商品の一覧表を作成しています。 Sheet1は商品一覧(左図) Sheet2は価格表(右図)となっています。 マクロを使用して、Sheet1のB列に価格表のデータを転記させたいと考えています。 VLookupになるのかと思い、自分でいろいろとやってみたのですが、 どうしても動作せず、挫折してしまいました。 商品一覧の最後の行までいって、空白セルがくると止まるというのが、 難しくてできませんでした。 どうかお願いいたします。

  • エクセルで複数のシートのデータをまとめるには

    エクセルで、book内にsheetが同じフォーム(検査成績書のように)で複数存在している 状態で、データが書かれているものを、同じbook内に新にsheetを作成して、 一覧表のようにして転記したいのですが、簡単にする方法はないでしょうか? 1個1個セルに転記するように番地を入力するのはわかるのですが、すごい手間が かかるので、もっと簡単に転記する方法はないでしょうか?

  • エクセル2007 VBA シート1に入力されている項目をシート2の中で

    エクセル2007 VBA シート1に入力されている項目をシート2の中で検索し、新規シートにコピーする方法についてです。 例) シート1 A        B  C 取引先名 品目C 数量 A      1-1 25 B      あ12  5 C      T-8 10 :       :    : シート2 A       B    C      D    E 得意先C 取引先名 製品名  品目C  数量 001    (株)B    ケーブル あ12  10 002    (株)A    箱     1-1  20 002    (株)A    箱     1-1   7 002    (株)A    箱     1-1   5 :       :     :      :     : 上記の状態で、シート1の項目をシート2から検索します。 ・取引先名は一部分でも一致するあいまい検索で、品目Cは完全一致で検索したいです。 ・シート2には検索項目のデータが複数あるのですが、結果が一致する行を選択し新規シートにコピーペーストしたいです。 出来れば下記の処理も実行したいです。 *シート1の数量を、シート2の1行目から順に検索したデータから計算して、シート1の数量に満たした分だけをコピーペーストしたいです。  シート1の数量に満たさない場合も取り敢えずシート2にある分のデータをコピーペーストして、処理が終わったら不足している項目データに印をつける。  取引先Aの場合→数量が20個と7個の行をコピーペーストする感じです。 グーグルで調べたのですが、調べ方が悪いのか最初から躓いてしまいました。 今回はコードを記入していなくてすみません。 サンプルコードありで教えていただけるととても助かります。よろしくお願いします。

  • エクセルでの転記について

    関数を使って転記をしています。 Sheet1 が 売上げ全体 Sheet2 が 担当者別 という形で、 Sheet2のB1に、「Sheet1 のA1(担当) が 田中 ならば、Sheet1のB1を入れなさい。そうでなければ空白にしなさい。」という関数を使用し、売上げ金額、経費、利益・・・・等C1,D1,E1・・・と転記するようにしています。 転記自体はうまく行くのですが、担当が「田中」でない場合、空白になるため、10件の売上げの内、田中の売上げが4件しかなかった場合に残りの6件は空白行になってしまい、一覧としてみた場合見栄えが悪くなってしまいます。 原因は、Sheet1のA1が田中なら・・・,A2が田中なら・・・,A3が田中なら・・・と1行ずつ固定して式を入れているからだということは何となく解るのですが、10件の売上げの中の田中だけをSheet2を転記しなさいという関数が色々調べているのですが答えにたどり着けません。 どういった関数にすれば、可能なのでしょうか? どうぞよろしくお願いします。

  • Excel VBA 売上管理の作り方

    以前にQNo.3944241で質問させていただいた者です。 その節は大変お世話になりました。 社内で相談した結果、データ数も少ないので、Excel VBAのみでやってみる事になりました。 Excel VBAに関する本を何冊か購入しました。 初心者用の基本機能を紹介した本でコードを入力しながら実際に動かしてみて勉強して、その1冊は終了しました。 これから、実際に使用する売上管理を作成していこうと思います。 そこで、わからない事が出てきたので、とても初歩的な事なのですが質問させてください。 作成するシートとして、初期段階では下記を考えています。 (データ件数は将来増える事を考えて多めに書いています) ・取引先入力フォーム ・取引先マスタ ------------------ データ数 500件程度 ・当社担当者入力フォーム ・当社担当者マスタ -------------- データ数 100件程度 ・売上(請求書)の入力フォーム ・売上マスタ -------------------- データ数 1000件程度 ・月別取引先毎集計売上一覧出力フォーム ・担当者別月毎売上推移出力フォーム 期(1年)ごとにブックを分けるつもりなので、上記のシート全てをひとつのブック内に収めてしまおうかと思っているのですが、ひとつのブックで良いのでしょうか? 管理者以外はマスタの中身は入力フォームからしかいじれないようにするつもりでいますが、例えばセキュリティの問題上、マスタは入出力フォームとは別ブックにするべきでは?とか、そのデータ件数だとひとつのブック上ではフリーズしてしまうのでは?(私の想像です・・・)と言ったような、実際に使用している方から見たら常識的な事を全く知らないので、教えていただきたいのです。 どうぞよろしくお願い致します。

  • VBAとデータの転記について

    今エクセル2003で、以下の上段画像のようなエクセルデータを作成しました。 上段(シート1)が、各商品に対する評価表なのですが、 そこに評価のあった件数が入力されています。 今、シート1の商品名から評価の不可までを、 VBAでシート2に以下のように転記をしたいのです。 先月はたまたま26件だったのですが、 毎月の商品の件数が、決まっていないので、連番記載とセルごとの処理 ループの使い方がよくわかりません。 評価欄は1件でも件数があれば、○印を転記して、空白はそのままで 転記したいのです。 データが多くなるにつれ手作業が大変になってきました。 VBAがまったくわからず、申し訳ありませんが よろしくお願いします。

専門家に質問してみよう