• 締切済み

VBA 繰り返しと特定条件の抽出

まだ初心者ですが、会社から指示をされ四苦八苦しながら取り組んでいます。是非ともご教示ください。 (作成したいVBA) ・あるデータファイル(注釈1)から、特定の条件(注釈2)に合致するセルを抽出して別シートにコピーしたい。 ・コピーに際しては、日付の古い順に並べ替えたい。 (注釈:その1) ・データファイルはデータ数が変化します。(列は変わりません) (注釈:その2) ・データファイルには下記のデータが入っています。   A  B   C   内容  数量  日付 1 麦  10  9/10 2 米  15  2/15 3 麦  12  3/12 4 粟  14  9/18 ・特定の条件とは、本日から3か月以上経過している内容を日付の古い順番に別用紙にコピーする、というものです。 ・別シートには、取引内容ごと(「麦」「米」「粟」)にデータを集約し、1枚のシートにて完成させたいのです。 零細な職場で、唯一エクセルを触れるとのことで特命を受けてしまいました(汗)。VBAの本を買ってきてもどうしてもできません。なおかつ、1週間で作成せよとの指示で本当に困っています。どうかいい知恵をお貸しください。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

ANo3様の回答と同じですが・・・ 考え方はいろいろありますが、以下の様に分解して考えれば良いのでは? 分解したひとつひとつの処理は、マクロの自動記録を利用すればほとんどそのものに近いものが記録されます。(若干の修正が必要ですが) 1)元データ(多分1シートですよね?)を変更しないために、最初にシート全体を別シートにコピーする。(以下は別シート上での処理) 2)日付をキーにして、全体を並べ替える。  (「データ」-「並べ替え」を利用して昇順にする) 3)日付欄を上から調べていって、3ヶ月以内以降のデータを消す 4)最後に「内容」を第一キーに、「日付」を第二キーに指定して、全体を並べ替え 以上で求めるものができます。 少しだけ知識が必要なのは、3)の日付を調べてゆくとこるぐらいでしょうか。ここだけは自動記録ではやりにくいので。 日付は、データがシリアル値になっていれば、そのまま比較できます。 (並べ替えもこれを利用しています) 2)で並べ替えているので、それぞれの日付が3ヶ月前よりも大きいか小さいかで必要なデータと消してしまいたいデータの境目を知ることができます。 同じ判定の繰返しなので、ループといわれる繰返し構文を使用するか、VLOOKUPなどのようなワークシート関数を利用しても可能です。

AZAM1987
質問者

お礼

ご回答ありがとうございました。まず、マクロの記録で努力してみて、ご指導いただいたところまでたどり着きたいと思います。丸投げになってしまった質問に本当にありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

こんなの下記のロジックでやればよいのではないですか。 やるべきことを下記のように分解する。(下記はやり方の1方法ではあるが) (1)データ最下行の行番号を取得する(仮にdとする) 参考 常套手段 d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row (2)データの第1行目から第d行まで繰り返し(ForNextなど利用) (3)データ行各1行について     3ヶ月前より小(前)のデータか判別(日付は日付シリアル値という整数なので、実体は3ヶ月前の日を示す整数より大か小かの判別に過ぎない。(IF文利用) (4)日付が小であれば、麦ー>Sheet2、米ー>Sheet3、栗ー>Sheet4、・・のシートに振り分けてデータを、該当シートに代入すればよい (5)その際、各シートの最下行の下に追加しないといけないので、 (1)で使った方法を使える。d+1行に代入。 (6)(4)のシートの振り分けは、シート名を麦、米、栗・・にして下記で処理するか 参考 泥臭いが、シート名が「麦」シートを作っておいて、テストでやってみて Sub test01() Dim sh For Each sh In Worksheets If sh.Name = "麦" Then sh.Range("A1") = "麦シート" End If Next End Sub あるいは 麦ー>Sheet2->麦、米ー>Sheet3、・・の対応表をプログラムコードの中で持つて、それで割り出すかどちらか。 (7)全行終了後、必要があれば、各シートの所定列で希望のようにソートする。 (マクロの記録を勉強) ーー 上記の丁寧なヒントでも、コードが作れないようなら、このレベルの課題に対して、まだ経験不足ということだと思う。

AZAM1987
質問者

お礼

ご丁寧にありがとうございました。こんなにすぐ回答できるなんて、すごいですね。ご指導いただいた内容は理解できました。(とても自分で作成するレベルではないことがわかりました。) 一方的な質問に対し、ここまで丁寧な回答をいただき本当に感謝しています。経験不足を少しでも補っていきます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

オートフィルタで商品と日付で絞込み、全体をコピーして、別シートに貼り付け、貼り付け先を日付昇順で並べ替えといった方法でもできます。必要なら、それをマクロの自動記録を行えば良いでしょう。「今日の日付を自動で与えて絞り込むにはどうすれば良いの?」といった個々の不明点について質問すれば、回答が得られやすいです。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm
AZAM1987
質問者

補足

ご回答ありがとうございました。不慣れですが、ご指導いただいたとおりの方法で現在試行錯誤中です。 今度はより丸投げではなく、適切な質問ができるところまで努力します。本当にありがとうございました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

丸投げ禁止ですよ なぜVBAでなければいけないの この程度なら、内容、日付をキーにして並べ替え 結果をコピーすれば終わりでしょ どうしても、マクロでやりたいなら この作業をマクロの記録で記録してアレンジすればよいのでは

AZAM1987
質問者

お礼

ご指摘のとおりです。自分なりに短期集中で取り組んでいますが、とても付け焼刃で太刀打ちできるものではなく、甘えてしまいました。何歳になっても絶対やってやると思っていましたが、悔しいです。もう一度丁寧に勉強し直します。 本当にすぐ回答をつけていただき、ありがとうございました。

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

・本日から3か月以上経過している内容を日付の古い順番に別用紙にコピーする ・取引内容ごと(「麦」「米」「粟」)にデータを集約し、1枚のシートにて完成させたい コピー先のシート状況がよく見えないのですけど。

AZAM1987
質問者

補足

すいません。指示された内容をそのまま記載しました。会社から求められているのは、次のような完成品だと理解しています。 (コピー先シートの状況) ・1枚であること ・取引内容ごとにまとまった3か月経過した取引を古い順に表示 上司に確認したところ、麦の取引、米…というように、横に取引を並べ、縦には必要とするセル(取引日、数量)をコピーするというものです。言葉足らずで申し訳ありません。これでご理解いただけますか。

関連するQ&A

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • 複数条件抽出をVBAで

    excelの複数条件抽出をVBAでやりたいので教えてください。 エクセル2003で複数条件抽出をしたいと思っています。 dateのシートに、A列:日付、B列:名前、C列:金額があります。 それを1というシートに、日付と名前の2つの条件が合致している金額を抜き出したいと思っています。 抜き出すのは0601&AさんをA5セル~A20       0601&BさんのはB5~B20へ ということは可能でしょうか? もしよろしければ教えていただければ助かります。 'date'シート 日付   名前  金額 0601 Aさん  100円 0601  Aさん  120円 0601  Bさん  150円 シート'1' 0601&Aさん   0601&Bさん 100円           150円 120円 どの人がやってもボタン1つで実行できるようにしたいために、 VBA出できればと思っております。

  • VBA Excel 特定の記号を含んだ行

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • VBA Excel 特定の記号を含む行で

    Excel VBAにて、質問します。お手数ですが宜しくお願いします。 画像の様に、E列に特定の記号"●"や"▲"含んだ行以外、抽出し 印刷のシート名に貼り付けしたいと思います。 ですが、条件がありまして、その条件とは、InputBoxを使って 抽出したい日付を入力し、入力した日付、時刻までの記号"●"や"▲"以外 を抽出できる様にしたいです。 例えば実行時の日付が8/21日ならば InputBoxに、8/28 20:00と入力したら、入力した日付、時刻までの 記号"●"や"▲"以外を抽出となります。 画像の様に、1行目の見出し名も貼り付けできる様に、VBAを使って できませんでしょうか? ※ 画像ではSheet1のみ載せましたが、 Sheet2とSheet3とSheet4とSheet5とSheet6まで似た内容のデータがあるので シート名を指定して動作できると良いです。 Array("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6")見たいな 感じでできますでしょうか? どの様なコードを書けば良いでしょうか? 御面倒お掛けしますが宜しくお願いします。

  • エクセルVBAで困ってます。

    私は今、エクセルVBAで困ってます。 内容はデータを入力したエクセルのシート上で、別のファイル(CSV形式)を開いてある特定の行に入力したデータを参照し、完全に一致した際には、別のファイルの内容をシートに反映させるといったようなことは可能でしょうか? 襲えて下さい。 回答お待ちしています。

  • エクセルVBAで繰り返し条件について

    詳しい方どなたか教えてください。 VBAを書いているのですが、繰り返し条件で上手くいかず困っています。 For Each ~ Next を使って繰り返し処理を行っています。 あるブックに指定した名前のシートがあれば、そのシート内の内容を全てクリアして、 コピー元のシートの内容をコピーして値で貼り付けるようにしたいと思っています。 (ここまでは何となく上手くいってそうです) ただし、該当するシートがない場合は、 該当するシート名のシートを追加し、コピー元のシートの内容を値で貼り付けるようにしたいのですが、上手くいきません。 「ただし~」以降の内容をどのように書いたら良いか分からず困っております。 繰り返しの条件を満たさない場合(?)の処理の仕方を教えて頂けませんでしょうか。 宜しくお願い致します。

  • VBAでテキストファイルからの特定行抽出

    エクセルのVBAで、テキストファイルから、特定の文字を含まない行だけを、別のテキストファイルに取り出す方法を教えてください。 具体的には、元のテキストファイルの中から、「.png」と、「.jpg」を含まない行を取り出して、別のテキストファイルに書き出したい。 元のテキストファイルは、エクセルでそのまま読み込むにはデータが大きすぎてエラーになってしまうので、、VBAで不要なデータを取り除いて、ファイルを小さくしていって、エクセルで扱える大きさにしていこうと思っています。 どなたかおわかりになる方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • VBAのデータ抽出(間引き)について

    VBAのデータ抽出(間引き)について 当方VBA初心者なのですが、 VBA(EXCEL2007)を使用してグラフ作成をしようと思っています。 元データの書式は以下の通りでデータ行は30秒間隔で 一カ月分(8万行)あります。 2010/08/01 01:00:34     1112.83 2010/08/01 01:01:04     1110.43 2010/08/01 01:01:34     1111.87 2010/08/01 01:02:04     1112.23 2010/08/01 01:02:34     1112.43 2010/08/01 01:03:04     1112.03 2010/08/01 01:03:34     1110.83 2010/08/01 01:04:04     1112.43 2010/08/01 01:04:34     1110.63 ・・・ データ量が多すぎるので間引きしようと思っています。 間引き(抽出)条件は以下の様に考えています。 10行毎(5分毎)に値の最大値の行を抽出して別シートへコピー。 VBAマクロで処理するにはどの様な コードで実現可能でしょうか? 教えて頂きたく。よろしくお願いします。

  • vbaで・・・

    vba初心者でよろしくお願いします。 vbaで別のシートにある、条件に一致したデータの入っているセルの一つ下のセルから横方向に空白のひとつ前までを選択し、コピーをしたいのですが・・・具体的には 別のシートにある、 あ あ あ あ 空白 い い い い 空白 1 2 3 4 空白 5 6 7 8 空白 の、最初の"い"の下のセル(つまり"5"のセル)から横に空白のセルまでをコピーして、さらに、列と行を入れ替えて別のシートにコピーしたいのですが、ちんぷんかんぷんです。 どなたか力を貸して下さい。お願いします。

  • VBAでのコピーについてです。

     いつもお世話になっております。VBA初心者です。  シート全体の内容(データ)を別ブックのシートにコピーしたいのです。しかも、別ブックのシートにはデータがあるので、そのデータ下の行(例えば(20,A))から貼り付けたいのです。  いろいろと調べたのですが、やり方がわかりません。 よろしくお願いいたします。

専門家に質問してみよう