
日付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が絡むのでしょうか?
アドバイスいただければ幸いです。
よろしくお願いいたします。
No.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)
とすれば、最初の条件と「補足」の条件を一括して処理できます。
以上ご参考まで。
No.5
- 回答日時:
>マクロとかいう代物を使用すれば解決するのでしょうか
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日
No.4
- 回答日時:
ANo.2です。
布団に入ってから気がつきましたが、日付Aが10日以降のものがはいるとそのままでは意図した結果になりませんね。
日付Aの代わりに、式1: IIf(Len([日付A])=2,"0" & [日付A],[日付A])
といった式のフィールドを設けて、最大値に設定すれば良いですが、1~9日の頭に0のついたデータになってしまいます。
以上、補足まで。
No.3
- 回答日時:
マクロでももちろんできますが、
数式でマークして削除するのが手っ取り早いかと思います。
例えば、日付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さんの式を少し変えて何度かやってみましたが
思うような回答がでてきません。
よろしければアドバイスいただければと思います。
よろしくお願いいたします。
No.2
- 回答日時:
Accessでやるなら、ファイル/外部データの取り込み/テーブルリンクで上記エクセルファイルを指定し、集計クエリで、番号及び日付Bでグループ化、日付Aを最大値に指定してやれば良いでしょう。
ツール/Office Linkで、エクセルワークシートに書き出してやれば、目的のデータが得られると思います。(Access2000の事例です)参考URL:http://www.mahoutsukaino.com/ac/ac2002/ac2002/so …
No.1
- 回答日時:
削除するという操作を行うにはマクロを組む必要があります。
アクセスは絡みません。
初心者であるのなら関数から覚えた方がいいかもしれません。
抽出するという条件(別のセルに表示する)であれば関数だけで
やりたい事は出来ると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 CSVデータ(Test.csv)に A1,B1 A1,B1 A1,C1 A2,B2 A2,B2 A3
- 2 【EXCEL】数式=SUM(A1*B1+A2*B2+・・・+A100*B100)を簡略化したい
- 3 A01セル>B01セルだったら、C01セルに+1
- 4 データの抽出方法教えてください A列=A商店、B商店 B列=1商品、2商品 とします。 このデータか
- 5 Excel2010でシフトを作成しています。A列には氏名。B1から右へ1日~31日、B2から右へ曜日
- 6 EXCELの表、組[A列]:番号[B列] を 組[A列]:番号[行]に変換する方法
- 7 Excel B列の名前を見てA列に番号をふりたいです。1-1 1-2 2-1 2-2
- 8 =IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $
- 9 【Excelの不思議な日付処理の初期値の疑問】日付データの基準日が1900/01/00 0:00なの
- 10 ExcelのVlookupについて質問です シート1 ▽ A B ⑴ ⑵ シート2 ▽ A B C
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
エクセル関数式で一番新しい日...
-
5
エクセルで特定の列にある日付...
-
6
日付だけを変更して印刷(Excel)
-
7
エクセルで日にちを入力すると...
-
8
エクセルVBA ユーザーフォーム...
-
9
エクセルで指定位置に文字を挿...
-
10
入力後に日付順になるように自...
-
11
エクセル 日付の表示を200...
-
12
Excelで2週間後の日付を出したい
-
13
Excelの書式が変わらないです
-
14
ワードの日付け自動入力のキャ...
-
15
Excel関数で指定した年月の月初...
-
16
Excel→Accessへの日付データの...
-
17
エクセルで飛び飛びの日付をき...
-
18
エクセルにカレンダー挿入
-
19
エクセルでの日付
-
20
最新の日付をVLOOKUP