- 締切済み
はじめまして。
はじめまして。 マクロ初心者の者です。 下記のようなマクロは作ることができますか? よろしければ、書き方を教えて下さい。 1.シートのB列には日付が入っていて、指定した日付でデータをソートする。 2.ソートしたデータの中で、同じレコードがあれば最新のデータの方を取得する。 3.上記の結果を別のシートにコピーする。 すみませんが、回答を宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
>C列には、表に前回と同じレコードを追記した場合に加算する番号 ありがとうございます。 1)の日付で並べ替えした後で、 このC列の計算結果を見ると、どれを最新にしたらよいかわかってきます。 ここにも数式で表現できると良いです。 「次の行と今の行とで日付が同じ場合は、今の行は最新でない」 「前の行と今の行とで日付が違う場合は、前の行が最新である」 となります。 どの行が「最新」であるかが分かれば、 あとはフィルタで絞り込みできます。 日付で並べ替え →(E列とかF列を使って)数式でどれが最新か判別 →フィルタで最新だけになるように絞り込み →選ばれたもののみコピー →他シートに貼り付け 全体の動きはこんな感じでどうでしょうか?。 サンプルコード回答もありますが、 できるところまで、 「マクロを記録」する操作でやってみてはどうでしょう。 今後も使うとしたらマクロの作り方も覚えなくてはなりませんし。 ここまで作ったマクロですが・・・でも構わないです。
- myRange
- ベストアンサー率71% (339/472)
こういった類の質問をするときは 質問者の実際のシートレイアウトを提示すべきです。 そうしないと回答者側でレイアウトまで推測提示してやることになります。 ま、それはそれとして。。。 やりかたはいくつかありますが参考サンプルということで。 ---------------------------------------------- (Sheet1のレイアウト) 見出し行:1行目 (A列:色、B列:日付、C列:区分、D:品名 データ行:2行目以降 Sheet1をSheet2へ転記 但し、色が同じで同日は区分2を転記 --------------------------------------------- (コード内容) 日付、色、区分を昇順にソートする 条件を満たしたものを転記する 抽出結果を、品名、日付で昇順ソートする --------------------------------------------- Sub test() Dim R As Long Dim R2 As Long Sheets("Sheet1").Select Range("A1").CurrentRegion.Sort _ Key1:=Range("B2"), Order1:=xlAscending, _ Key2:=Range("A2"), Order2:=xlAscending, _ Key3:=Range("C2"), Order3:=xlAscending, _ Header:=xlYes Sheets("Sheet2").Cells.Clear Rows(1).Copy Sheets("Sheet2").Range("A1") R2 = 1 For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(R, "A") <> Cells(R + 1, "A") Or _ Cells(R, "B") <> Cells(R + 1, "B") Then R2 = R2 + 1 Rows(R).Copy Sheets("Sheet2").Cells(R2, "A") End If Next R Sheets("Sheet2").Select Range("A1").CurrentRegion.Sort _ Key1:=Range("D2"), Order1:=xlAscending, _ Key2:=Range("B2"), Order2:=xlAscending, _ Header:=xlYes Msgbox "終了しました" End Sub '------------------------------------------ 以上です。
- layy
- ベストアンサー率23% (292/1222)
聞き方が悪かったかもしれません。 今B列は日付ということですが、C列やD列、以右には何か入っていますか?。 A列とB列しか情報がなかったら、 (マクロで)C列には1や2・・・と情報を付加する必要あり、 と思います。
- layy
- ベストアンサー率23% (292/1222)
1番下を最新とみなすのはわかりました。 A列 B列 xx 2010/09/17 xx 2010/09/14 xx 2010/09/13 xx 2010/09/11 xx 2010/09/11 xx 2010/09/16 xx 2010/09/11 とあったら 3つの「2010/09/11」の1番上に来るのはどれ?、次はどれ?、1番下はどれ?、 となります。 日付の次に優先するもの何か、があると思います。 3行あったら何が1番下になるかわからないけど1番下のものを 取ればよい、でしょうか。 これによってC列のような作業列の数式が決まります。
補足
ご回答本当にありがとうございます。 上記の質問ですが、 A列 B列 C列 D列 あか 2010/09/11 1 クレヨン くろ 2010/09/11 1 えのぐ しろ 2010/09/11 1 クレヨン くろ 2010/09/11 2 えのぐ あお 2010/09/11 1 クレヨン しろ 2010/09/11 2 えのぐ と、あった場合に、下記のような値でデータを 他のシートにコピーしたいです。 A列 B列 C列 D列 あか 2010/09/11 1 クレヨン くろ 2010/09/11 2 えのぐ あお 2010/09/11 1 クレヨン しろ 2010/09/11 2 えのぐ レコードを取り出し他のシートにコピーする際は、 順序は下記のようにD列の値により、並べ替えをしたいです。 A列 B列 C列 D列 あお 2010/09/11 1 クレヨン あか 2010/09/11 1 クレヨン くろ 2010/09/11 2 えのぐ しろ 2010/09/11 2 えのぐ 色々情報が不足してご迷惑をおかけしています。 大変恐縮ですが、お願いします。
- layy
- ベストアンサー率23% (292/1222)
質問のイメージでは A列 B列 xx 2010/09/17 xx 2010/09/14 xx 2010/09/13 xx 2010/09/11 xx 2010/09/11 xx 2010/09/16 が並べ替えで A列 B列 xx 2010/09/11 xx 2010/09/11 xx 2010/09/13 xx 2010/09/14 xx 2010/09/16 xx 2010/09/17 になります。 A列 B列 C列 xx 2010/09/11 1 xx 2010/09/11 2 コピーするもの xx 2010/09/13 1 コピーするもの xx 2010/09/14 1 コピーするもの xx 2010/09/16 1 コピーするもの xx 2010/09/17 1 コピーするもの と(最新に)マーキングしてコピー対象を決める。 A列 B列 C列 xx 2010/09/11 2 コピーする xx 2010/09/13 1 コピーする xx 2010/09/14 1 コピーする xx 2010/09/16 1 コピーする xx 2010/09/17 1 コピーする 「2010/09/11みたいに同じレコードがあれば、どちらが最新?」となります。 「2010/09/11」が同じとして、 どちらが上になるのかは、日付以外にもう1つの並べ替えキーがないと なんとも言えないのではないでしょうか?。 1)3)の並べ替えとコピーについてはマクロはそう難しい処理ではありませんが この「最新」をどう決めるかで処理が変わってきます。 今のままでは曖昧では?。 -------------------- マクロの書き方としては、 まず「マクロの記録」を操作すると、 VBAのコードが記録されます。 簡単な操作で試してどういうものかみておいてください。
補足
回答ありがとうございます。 確かに並べ替えのキーが不足していました。 曖昧な情報となってしまい、すみません。。 上記の例では、同日(2010/09/11)にC列のデータがあった場合、 「1」よりも「2」が最新となり、取得したいレコードとなります。 この場合どのようなマクロになるでしょうか?
補足
現在C列には、表に前回と同じレコードを追記した場合に加算する番号が入っています。 D列には、レコードを分類するグループ名が入っています。 E列には、レコードを追記した人の名前が入っています。 上記以外には列は存在致しません。 色々お手数をお掛けしますが、上記の件宜しくお願いします。