対象月の抽出と必要項目の表示方法

このQ&Aのポイント
  • 対象月をリストから抽出し、必要な項目を表示する方法について教えてください。
  • ワークシート2に印刷可能な形式で対象月を表示させるために、マクロを使って必要な項目を抜き取りリスト化したいです。
  • 具体的な例として、ワークシート1での2月分の抽出方法について教えてください。
回答を見る
  • ベストアンサー

対象月を抽出して必要項目だけを表示させるには

 下図【ワークシート1】のようなリストから、対象月をワークシート2に抽出させたいのですが、ワークシート2は即印刷可能な形式とするため、対象月を単純に抽出するのではなく、必要な項目だけを抜き取りリスト化させるマクロを実現させたいと考えています。  高度なマクロはまるっきり分からないので、ご教示願います。  なお、対象月は下図例では2月分を抽出させるため「2009/2/?」と記載してありますが、抽出させるために入力する形式は拘りません。 (例えば「<2009/2/1,>2009/2/28」と言った表現でも結構です) 【ワークシート1】  A列  B列   C列   D列  E列  F列   ・・  X列 1 A店 商品a 2009/1/10 承認 山田 2009/1/11 ・・ 鈴木 2 B店 商品b 2009/2/5  否認 田中        ・・ 松田 3 C店 商品c 2009/2/20 否認 鈴木        ・・ 本田 4 B店 商品a 2009/2/25 承認 田中 2009/2/27 ・・ 山本 5 A店 商品c 2009/3/1  承認 加藤 2009/3/2  ・・ 大石 【ワークシート2】上の任意の場所  (例えばA1) 2009/2/? 【ワークシート2】出力例   A列  B列  C列  D列    E列 10 B店 商品b 否認       松田 11 C店 商品c 否認       本田 12 B店 商品a 承認 2009/2/27 山本

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.4

No2の処理をそのままマクロ化したものです Sub test() dd = Worksheets("Sheet2").Range("A1") '抽出月データを変数ddに収納(月データはその月に該当するシリアル値で指定してくださ) d = Year(dd) & Month(dd) '抽出月データを比較用のデータ文字列に変換 Set sc = Worksheets("Sheet2").Range("A10") '出力先のセル番地を変数scへ収納 Worksheets("Sheet1").Range("c1").Select While ActiveCell <> "" 'シート2のC列データ最終行までの繰り返し With ActiveCell If Year(.Value) & Month(.Value) = d Then 'C列の日付が抽出月かどうかを確認 '----ここから---- sc.Offset(i, 0) = .Offset(0, -2) sc.Offset(i, 1) = .Offset(0, -1) sc.Offset(i, 2) = .Offset(0, 1) sc.Offset(i, 3) = .Offset(0, 3) sc.Offset(i, 4) = .Offset(0, 21) '----ここまでで必要なデータを対象のセルに貼り付け---- i = i + 1 'データの貼り付け先を行を1つ下げるための処理 End If .Offset(1).Activate 'C列の参照データ行を一つ下げる処理を End With Wend 'ループします End Sub

negisama
質問者

お礼

回答ありがとうございます。 イメージどおりの動作が出来ました。 >sc.Offset(i, 0) = .Offset(0, -2) マクロが良く分かっていないので、変なコメントを入れて しまいましたが、これで必要な分だけ貼り付けができるの で非常に便利です。 >dd = Worksheets("Sheet2").Range("A1") シリアル値にしないとダメなんですね。 これは素人目に認識しにくいので、年と月を別セルに入力 させて、date関数で引っ張りだすようにしました。これな らシリアル値を意識させる事なく使えそうです。。。。 なんとか、目的の処理を実行させることができました。 ありがとうございます。

その他の回答 (3)

回答No.3

回答番号:No.1の者です ≫ところで、これって正常に動作します? はい、もちろん 試験で何度も出されましたから データベースと別のシートに 抽出する時の方法 注意したのは、 [抽出範囲]の下に データのないこと これで 全列が 抽出されても 不必要な列を 削除するところまで マクロに記録したらいいのかなと思いましたが

negisama
質問者

お礼

回答ありがとうございます。 >[抽出範囲]の下に データのないこと なるほど、余分なゴミが入っていました。 単純ミスでした。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

マクロでなく関数式のみでも可能ですが、どうしてもマクロがご希望? 1.シート1のC列を上から取り出しシート2のA1セルと比較 (比較時に年と月のみを取り出して比較) 2.比較結果が同じであればその列のデータをシート2の該当セルに代入 3.シート1のC列のデータが””になるまで繰り返す この流れをマクロで組めば良いだけですよね そのままコードを載せても良いのですが、ある程度ご自分でやってみてうまく動作しないようであればご自身で作成したマクロを補足してみた方がよいと思いますよ。 人の作ったマクロをそのままコピー貼り付けを行った場合修正が必要になっても対応できない可能性が高いですし。

negisama
質問者

お礼

回答ありがとうございます。 マクロでやりたい第一の理由は、他人も操作することから 簡単に処理を行わせたいということなんです。 処理の流れは概ね合っていますが、 2項は比較が合っていればその行のデータをコピー 4項として、必要な列をシート2の指定列をコピー って感じです。 マクロ記録を取って多少修正するぐらいしか経験がなく、 マクロ記録で対応できれば何とか出来そうですが、まず 日付の比較で躓きました。。。 事例があると助かります。

回答No.1

フィールド名(項目欄)を作ってはいけませんでしょうか? もし 作ってよろしければ A列~X列まで項目名(A~Xでも)つけて Sheet2 A1セルに、「C」 B1セルに「C」(日付の列に付けた項目名) A2セルに、「>=2009/2/1」・B2セルに、「<2009/03/1」 と、入力して 周りにデータのない Sheet2 の(例えば)D5セルをクリック アクティブにしてから [データ]→[フィルタ]→[フィルタオプションの設定] 【○指定した範囲】にチェックを入れ [リスト範囲]に、Sheet1の項目を含めたデータセル範囲をドラッグ [検索条件範囲]に、Sheet2の A1:B2セル範囲をドラッグSheet2!$A$1:$B$2 [抽出範囲]に、抽出したい場所の左上のセル A4セルクリック [OK]クリック  セルの列幅を調整して いかがでしょうか?

negisama
質問者

お礼

回答ありがとうございます。 >フィールド名(項目欄)を作ってはいけませんでしょうか? 説明が不十分ですみません。項目欄は当然ですが必須です。 フィルタオプション設定方式は、私も検討したのですが、 基本的に必要な列だけを抽出することが出来ないので、検討から 除外しました。 個人的に利用する分には問題ないのですが、他人も使用する となると「一発で処理できる」と言う方法が必要なんです。  ところで、これって正常に動作します?  私も最初に検討したときに、何度か操作したのですが正常に  抽出できなかったような気がします。  やり方が悪かったのかな。。。

関連するQ&A

  • エクセルで項目を抽出したい

    皆様のお知恵をお貸しください。 日々作業者が行っている日報の項目を一覧表より抽出したいのです。 シート1には受付日(A列) 品番(B列) 数量(C列) 納期(D列)・・・ などが記入されています。日々増えていき月あたり100件程度です シート2には作業者の日報に書かれている品番(A列)、作業時間(B列)、作業者名(C列)作業日時(D列)を手入力していきます。 月当たり1000ほどの入力になります。 複数の作業者が同じ仕事をすること、日をまたぐこともあり重複しています。 求めたいことはシート3のA列にシート2で書かれた品名をシート1の品名の中から抽出し自動で書き出したいのです。 今はピボットを使いシート2のデータを表にして、そこの項目をLOOKUP関数を用いて導きだしていますが、その都度ピボットを更新させないといけないので煩わしいと思い、できれば関数で抽出をしたいのです。欲を言えば品番の若い順に自動で抽出できればいいのですが、まずはシート2に書かれた順でもかまいません。 記入例 シート1には A列    B列    C列    D列 10/1   10001    30    10/12 10/2   10002    1     10/5 10/2 10003 3 11/5 ・       ・        ・ シート2には  A列    B列     C列    D列 10001    2.5     ○○   10/2  9058    4      ○○   10/2 10003 1 ○○   10/3 10001 1 ××   10/3  10003 6 ××   10/3 10002 2 △△   10/5 シート3には(希望としては)  A列     9058 10001 10002 10003 . . . よろしくお願いします。     

  • 必要なデータを抽出したい

    必要なデータを抽出したい    A   B    C   D ・・・ 1 7/1   101   102  103 2 7/2   101   103 3 7/3   105   203 4 7/4   103   205 5 7/5   101   202 ・ ・    ・ ・ ・    ・ ・ ・    ・ Excelで上の様にA列に日付、B行列以降に数字が書かれているシートから、抽出したい数字が含まれている行を別シートに抽出するマクロはどのように書けばよろしいのでしょうか。 技術者の方、よろしくお願いします。 例えば、101が含まれているデータを抽出したら、sheet2に    A   B    C   D 1 7/1   101   102  103 2 7/2   101   103 3 7/5   101   202 となるようにしたいのです。

  • 3つのシートから適合する項目を抽出したい

    エクセル関数にて何かいい方法があればお教えください。 シート名"商品名A"、シート名"商品名B"シート名"商品名C"と3つのシートがあります。 それぞれのシートにはA列からW列まで統一した項目が入っているのですが、 商品Aを購入した顧客が商品Bや商品Cを購入した場合で、今まではそれぞれの商品の顧客番号を基準にVlookupでAとBとCを照らし合わせ、 A/B/C、A/B、A/C、B/C、Aのみ、Bのみ、Cのみの購入と分けて更に、担当IDをCOUNTIFを使って集計していました。 現状だと何回も同じ作業を繰り返していてとても面倒なんです。 もっと効率の良い関数式はありますでしょうか? 最終的には別のシートの列にそれぞれの商品購入項目(A/B/C、A/B・・・)を、行に営業IDを入れて集計をしたいと思っております。 またはマクロを組んだ方が良いのでしょうか?マクロはまだ初心者で余り自信が無いのですが。。。 どなたかお知恵を拝借頂けないでしょうか。よろしくお願いいたします。

  • EXCELによる、顧客データの抽出-2

    いつもお世話になっております。 先ほど、 http://oshiete1.goo.ne.jp/qa2521777.html で質問しました。 どうしても至急データの整理をしなくてはいかなく、 続けて質問をさせていただきました。  A列(担当)  B列(お客様)   C列 2  山本1     後藤       1 3  三山      榎本       2 4  山本2     小島       3 5  高木      大田       4 6  山本1     児玉       5 が入ったデータシートがあります。 他のシートで、A2セルに山本1と入れた場合、 mu2011様が先ほど教えてくださった式 =IF(ROW($A1)-1<COUNTIF(Sheet3!$A$1:$A$200,$A$2),INDEX(Sheet3!A$1:A$200,SMALL(IF(Sheet3!$A$1:$A$200=$A$2,ROW(Sheet3!$A$1:$A$200),999),ROW($A1))),"") で、山本1のみの値を出す事ができたのですが、   A列(担当)  B列(お客様)   C列 1   2  山本1 3  山本1     後藤       1 4  山本1     児玉       5     ・      ・        ・     ・      ・        ・     ・      ・        ・     ・      ・        ・ 28 山本2 29 山本2     中野       4 30 山本2     大山       3 例えば、28行目に今度は山本2という数字を入れたら 29行目から山本2が抽出できるようにはならないでしょうか? (次は53行目に担当名を入れる・・・) まったく分からなくて時間ばかりが過ぎていってしまいます。 宜しくお願い致します。

  • エクセルでA列とB列の差分を抽出

    エクセルでA列にはあるがB列にはない項目を抽出するにはどうしたらよいでしょうか。 下の例だと、C列あたりに、山本、川田を抽出したいのですが…… A列にはB列のデータがすべて含まれています。 A列は10月と11月のデータで、B列は10月のデータです。 A列   B列 山田  山田 山本  川上 川田 川上

  • データ抽出方法

    おはようございます。 sheet1 B列、C列に重複してるデータと、そうでないデータが混在して沢山あります。 sheet2 B列、C列に一点一様の型でデータを抽出したいご伝授下さい sheet1 B列、C列 A-1-1 A A-1-1 A B-2-1 D B-2-2 E C-2-1 B C-2-1 B C-2-3 C sheet2 B列、C列(抽出結果) A-1-1 A B-2-1 D B-2-2 E C-2-1 B C-2-3 C

  • EXCELによる、顧客データの抽出

    いつもお世話になっております。   A列(担当)  B列(お客様)   C列 2  山本1     後藤       1 3  三山      榎本       2 4  山本2     小島       3 5  高木      大田       4 6  山本1     児玉       5 が入ったデータシートがあります。 他のシートで、A1セルに山本1と入れた場合、 山本1のみを検索してくれるような数式を教えていただけないでしょうか?   A列(担当)  B列(お客様)   C列 1  山本1 2  山本1     後藤       1 3  山本1     児玉       5 4   ・      ・        ・     ・      ・        ・     ・      ・        ・     ・      ・        ・     ・      ・        ・ 宜しくお願い致します。

  • エクセルの順位抽出について

    Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。

  • excelの複数シートを検索対象にして重複行を抽出する方法

    ある値が重複する行を抽出したいのですが 抽出元データが600,000行近くあり、1sheetに入らず9シート程に分けました。 countifを使おうとしたのですが検索範囲に複数シート指定が出来ず(3D-参照の対象関数ではないようです)、 =COUNTIF('sheet1:sheet9'!$C:$C,C1)としてみたのですが、重複行があっても全て#VALUE!となってしまうので機能できていないようです。 具体的には sheet1~8に下記のようなデータがあり、C列が重複する行を抽出したい。 A列:id、B列:名前、C列:メアド、D列:xx 宜しくお願い致します。

  • 抽出の仕方教えてください!

    いい方法を教えてください! 例えば、下図の表があり部品Aを100個単位で買うと単価300円し、1000個単位で買うと単価が280になるといった見方をする単価表があるとして、SHEET1にあるとします。 SHEET2で部品名と購入単位個数(ロット数)を入力すると単価が自動抽出できる良い方法を教えてください。 A列   B    C    D     100個 1000個  2000個 部品A 300   288   260 部品B 500   480   460 部品C 320   318   302 部品D 120   110   102 宜しくお願いします!! 

専門家に質問してみよう