[[20040702174544]] 『各レコードの最新版だけをそれぞれ抽出したい』(ちびねこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『各レコードの最新版だけをそれぞれ抽出したい』(ちびねこ)

[各レコードの最新版だけをそれぞれ抽出したい場合]

はじめまして ちびねこです
標記の件で教えていただきたいと思います
あるデータベースから それぞれのコードの最新値を抽出してあらたなデータベース(ブック)を作りたい場合どうすればいいのでしょうか

たとえば 以下のような感じです

 コード  品名  日付
 1104113 みみみ  4/13
 1104113 みみみ  5/15  ←これを抽出
 1104355 かかか  4/6
 1104355 かかか  5/25
 1104355 かかか  6/12  ←これを抽出
 1103555 あああ  6/26  ←これを抽出

 EXCELバージョン excel2002
 OSバージョン WindowsXP

よろしくお願いします


[[20040701094409]] 『数字の大きい行以外は削除』(aki)

 さんの時に考えたのがそのま使えそうなので、
 よかったら、使ってみておくんなましぃm(__)m
 シートの見出しを右クリック
 コードを表示させて
 真っ白なところに貼り付けて下さい。
 多分、大丈夫だと思います。
 でも、ばっくあっぷはとっておいてくださいね。
 では、清水の舞台より、、、、ダイブでっすぅ。。。。どった。。。どすん!!

 (夏目雅子似)

 Sub 最新のレコードを抽出()

    Dim i As Long

    Dim myTimer As Single

    myTimer = Timer

    Application.ScreenUpdating = False

        Range("A1").CurrentRegion.Sort _
            Key1:=Range("A2"), Order1:=xlAscending, _
                Key2:=Range("C2"), Order2:=xlAscending, _
                    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
                        Orientation:=xlTopToBottom, SortMethod:=xlPinYin

        With Range("A1")

            For i = .CurrentRegion.Rows.Count To 2 Step -1

                'A列の上下が同じでかつC列の上が大きい場合
                If .Offset(i, 0) = .Offset(i - 1, 0) And .Offset(i, 2) < .Offset(i - 1, 2) Then

                    '下の行を削除
                    .Offset(i, 0).EntireRow.Delete Shift:=xlUp

                    'A列の上下が同じでかつC列の下が大きい場合
                    ElseIf .Offset(i, 0) = .Offset(i - 1, 0) And .Offset(i, 1) > .Offset(i - 1, 1) Then

                    '上の行を削除
                    .Offset(i - 1, 0).EntireRow.Delete Shift:=xlUp

                    'A列の上下が同じでかつC列の上下が同じ場合
                    ElseIf .Offset(i, 0) = .Offset(i - 1, 0) And .Offset(i, 1) = .Offset(i - 1, 1) Then

                    '上の行を削除
                    .Offset(i - 1, 0).EntireRow.Delete Shift:=xlUp

                End If

            Next i

        End With

        Application.ScreenUpdating = True

        myTimer = Timer - myTimer

        MsgBox Format(myTimer, "#,##0.00") & "秒 抽出完了"

 End Sub

 今、自分のレスを読み返して思ったのですが、、
 抽出と削除とは全然、別のものですよね。
 あまり、考えずに回答してしまって申し訳ないです。
 くれぐれも、元データに支障のない様にお願い申し上げます。
 軽はずみな回答、誠に申し訳ありませんでした。m(__)m
(夏目雅子似)


 関数で、

 D列を作業列に使用して
 D2:
 =IF(COUNTIF(A$1:A2,A2)=1,ROW(),"")
 として、データの最終行までフィルダウン
 E2:
 =IF(ISERROR(SMALL($D:$D,ROW(A1))),"",INDEX($A:$D,SMALL($D:$D,ROW(A1)),1))
 F2:
 =IF(E2="","",INDIRECT("B"&MAX(($A$2:$A$10001=E2)*($C$2:$C$10001=G2)*(ROW($B$2:$B$10001)))))
 (配列数式なので Ctrl+Shift+Enter で確定)
 G2:
 =IF(E2="","",MAX(IF($A$2:$A$10001=E2,$C$2:$C$10001,)))
(配列数式なので Ctrl+Shift+Enter で確定)

 E2:G2を選択して、データの続く限りフィルダウン。
 抽出されたデータをコピーして、新しいブックに
 形式を選択して貼り付け→値
 では?
 (jindon)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.