• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:対象月を抽出して必要項目だけを表示させるには)

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

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

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

  • ベストアンサー
  • 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