【最大10000ポイント】当たる!!質問投稿キャンペーン!

     日付A 番号 日付B
1行目  2日  01  2日
2行目  2日  02  1日
3行目  3日  03  2日
4行目  4日  03  2日
5行目  5日  03  3日
6行目  5日  04  3日
7行目  6日  04  3日

いま、上記のようなエクセルデータがあったときに、
「番号列」が等しく、かつ「日付B列」も等しい場合に
「日付A列」で一番大きい日付以外の行を削除したい
(上記例の場合、3行目と6行目を削除したい)
のですが、実行するにはどうすればいいのでしょうか?

初心者で申し訳ないのですが、
マクロとかいう代物を使用すれば解決するのでしょうか?
それともAccessが絡むのでしょうか?
アドバイスいただければ幸いです。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

#3です。

「補足」の条件について。

こちらの方が条件としては単純で、

 D1セル: =1/(SUMPRODUCT((A$1:A1=A1)*(B$1:B1=B1)*(C$1:C1=C1))=1)

として下方にフィルすれば、
#3と同様に削除するセルに#DIV/0!が入るので、あとは同様に処理すればOK。

※D列に#3の式、E列にこちらの式を入れて、
 D:E列について#3-2の処理を行えば同時に処理することもできます。
----------------------------------------------------------------------
ところで、
もし【日付A欄のデータが日付の若い順に並んでいる】のであれば、
「B,C列の値が等しい行のうち、最も下方にある行を残して削除」
つまり、
「自行より下方の行について、B,C列の値が自行と等しい行がなければ残す、あれば削除」
ということですから、

 D1セル: =1/(SUMPRODUCT((B1:B$99=B1)*(C1:C$99=C1))=1)

とすれば、最初の条件と「補足」の条件を一括して処理できます。

以上ご参考まで。
    • good
    • 0

>マクロとかいう代物を使用すれば解決するのでしょうか


VBAでも出来ます。「代物」とはいえません。最近はエクセルに関して、VBAの質問も多くなった。
>それともAccessが絡むのでしょうか?
アクセスでも、アクセスのデータを作れば出来ます。
ーー
余分なことを考えず、エクセル(操作+関数のイメージで)で出来ますかと聞けばよいのだ。場合によってはVBAでの回答が出るかも。
例データ
A列  B列    C列  D列(追加)
日付A番号日付B抽出
2日12日
2日21日
3日32日
4日32日1
5日33日
5日43日
6日43日1
ーーー
D2の式は
=IF(AND(COUNTIF($B$2:B2,B2)>1,COUNTIF($C$2:C2,C2)>1),1,"")
結果
上記のD列
ーー
フィルタオプションを使うため
G1:G2に(どこでもよいが)
抽出
<>1
を入れておく
ーー
データーフィルターフィルタオプションの設定ー
指定した範囲
リスト範囲 A1:D8 (本当は絶対番地です)
検索条件版 G1:G2
抽出範囲 J1:M10
OK
結果
J  K列  L列     M列
日付A番号日付B抽出
2日12日
2日21日
3日32日
5日33日
5日43日
    • good
    • 0

ANo.2です。


布団に入ってから気がつきましたが、日付Aが10日以降のものがはいるとそのままでは意図した結果になりませんね。
日付Aの代わりに、式1: IIf(Len([日付A])=2,"0" & [日付A],[日付A])
といった式のフィールドを設けて、最大値に設定すれば良いですが、1~9日の頭に0のついたデータになってしまいます。
以上、補足まで。
    • good
    • 0

マクロでももちろんできますが、


数式でマークして削除するのが手っ取り早いかと思います。

例えば、日付AがA列、番号がB列、日付BがC列に、
それぞれ1行目から入っているとします。

1.数式で削除する行をマークする

 D1セル: =1/(MAX(INDEX((B$1:B$99=B1)*(C$1:C$99=C1)*(0&SUBSTITUTE(A$1:A$99,"日","")),))=--SUBSTITUTE(A1,"日",""))

 として下方にフィルすれば残す行には1, 削除する行には#DIV/0! が入ります。

2.不要な行を削除する

 D列全体を選択し、
 Ctrl+G ⇒ セル選択 ⇒ 数式 ⇒ エラー値以外のチェックを外す ⇒ OK
 Ctrl+-(マイナス) ⇒ 行全体 ⇒ OK

Excel2003で動作確認済。
---------------------------------------------------------------------------
日付Aのデータが"3日"のような文字列で入っているのか、
それともシリアル値(数値)で入っているのか不明でしたので
どちらでも良いように書いています。

以上ご参考まで。

この回答への補足

誠にありがとうございます!!!
確かに実行されました!すごい!

それで・・

実は私が説明不足でして「もう一つの条件の行」も削除したいのです。

それは
     日付A 番号 日付B
1行目  2日  01  2日
2行目  2日  02  1日
3行目  3日  03  2日
4行目  4日  03  2日
5行目  5日  03  3日
6行目  5日  04  3日
7行目  5日  04  3日
8行目  5日  04  3日

上記のデータの6行目・7行目・8行目のように
「日付A列」が等しくかつ「番号列」も等しく、
かつ「日付B列」も等しい場合にどの行でもいいのですが、
1行だけ残して、あとは削除したいのです。
(上記例では例えば6・7行目を削除対象にして、8行目を残したい)

この条件も追加する場合、どのような式になるのでしょうか。
Kater_Kurzさんの式を少し変えて何度かやってみましたが
思うような回答がでてきません。
よろしければアドバイスいただければと思います。
よろしくお願いいたします。

補足日時:2008/07/23 11:22
    • good
    • 0

Accessでやるなら、ファイル/外部データの取り込み/テーブルリンクで上記エクセルファイルを指定し、集計クエリで、番号及び日付Bでグループ化、日付Aを最大値に指定してやれば良いでしょう。

ツール/Office Linkで、エクセルワークシートに書き出してやれば、目的のデータが得られると思います。(Access2000の事例です)

参考URL:http://www.mahoutsukaino.com/ac/ac2002/ac2002/so …
    • good
    • 0

削除するという操作を行うにはマクロを組む必要があります。


アクセスは絡みません。

初心者であるのなら関数から覚えた方がいいかもしれません。
抽出するという条件(別のセルに表示する)であれば関数だけで
やりたい事は出来ると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング