- ベストアンサー
エクセルでヘルプ・・・・
例えばA列に下記のような名前が並んでいたとします。 この中で同じ文字列のセルを含む行を全て削除する方法です。 下記の例では 5,6,7,8,12,13,14 の行を削除するかたちになります。 A B C 1 りんご 2 トマト 3 ブドウ 4 バナナ 5 サクランボ 6 サクランボ 7 メロン 8 メロン 9 みかん 10 バナナ 11 ナシ 12 スイカ 13 スイカ 14 スイカ 実際は5000~6000行データの作業になる為、手作業では大変です。 これがもしエクセルの機能で出来るならとても助かります。 宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>1万1千行ありました。 作業途中PCがフリーズしてしまい強制終了するしかありませんでした。(pen4 2.4G 1GBRAM) エクセル内のデータベース処理関数はとても手軽ですが負荷は高いため、あまり大量のデータを処理するのには不向きですよ、 1万行以上あるデータの定形処理なら、データベースソフトの方がお勧めです、 ちなみに"アクセス"なら SELECT Min(Sheet1.A) AS A0, Sheet1.B FROM Sheet1 GROUP BY Sheet1.B HAVING (Count(Sheet1.B)=1) ORDER BY Min(Sheet1.A); 無料のデータベースソフトOpenOffice.Baseなら SELECT MIN( "A" ) AS "A0", "B" FROM "sheet1" GROUP BY "B" HAVING ( COUNT( "B" ) = 1 ) ORDER BY "A0" ASC という"クエリー"を定義します。 エクセルの自由さに比べて、少し敷居が高い面はあるのですが、解ってしまえば大量データの処理は楽ですよ。
その他の回答 (4)
- mu2011
- ベストアンサー率38% (1910/4994)
オートフィルタを使用する次の方法は如何でしょうか。 (1)先頭行に見出し行を挿入、列名称を任意設定 (2)空き列の(仮にB列)B2に=COUNTIF(A:A,A2)>1を設定、B2のフィルハンドル(枠右下の■)をダブルクリックで左隣列の有効データ行(空白行以外)まで自動コピーします (3)表の任意セルを選択→データ→フィルタ→オートフィルタ、B列のフィルタボタン押下→TRUEを選択、抽出された行番号を全て選択→右クリックで行の削除
お礼
フリーズしてしまったのは残念でしたけれど、簡単で便利な方法を教えていただきありがとう御座いました。 また何かありましたら宜しくお願いいたします。
補足
分かりやすい補足もいただきありがとうございます。 実際のデータで試してみました。 1万1千行ありました。 作業途中PCがフリーズしてしまい強制終了するしかありませんでした。(pen4 2.4G 1GBRAM)
- hs001120
- ベストアンサー率60% (473/788)
>おっしゃる通り記入漏れです。 4と10も削除の対象になります。 一過性の処理であれば、 まず、B列をキーとしてソート その後 C1: =(B1=B2) C2: =OR((B1=B2),(B2=B3)) C2を以降の行に複写 後はC列が TRUE の行だけフィルタで抽出して削除すれば用は足りると思います。 結果の並び順が気に入らない場合、後でA列をキーとしてソート
- hs001120
- ベストアンサー率60% (473/788)
>下記の例では 5,6,7,8,12,13,14 の行を削除するかたちになります。 ということは、 4 バナナ 10 バナナ は削除対象にはならない。ですか? それだと、 >この中で同じ文字列のセルを含む行を全て削除する方法です。 ではなく、 「隣接する行に限り、同じ文字列のセルを含む行を削除」 ですが、 その方法であれば C1: =(B1=B2) C2: =OR((B1=B2),(B2=B3)) C2を以降の行に複写 後はC列が TRUE の行だけフィルタで抽出すれば用は足りると思います。 実は、 4 バナナ 10 バナナ も削除対象で、単なる記入もれである場合は、「エクセル」でも出来なくは無いでしょうが、同じくオフィスシリーズソフトの「アクセス」の方が得意とする処理であり、そちらの方が簡単ですよ。
補足
大変申し訳ありません。 おっしゃる通り記入漏れです。 4と10も削除の対象になります。
- siroakaki
- ベストアンサー率47% (21/44)
マクロを使うとできそうな感じがします。 Sub gyou_del() ' ↓変数の定義 Dim i As Long Dim gyou As Long 'B列に削除したい名称があるとして、データの最終行を取得。 gyou = ActiveSheet.Range("b65535").End(xlUp).row ' ↓データの最終行から行削除していく。 For i = gyou To 4 Step -1 If Range("b" & i).Value = "メロン" Or Range("b" & i).Value = "サクランボ" Then Rows(i).Delete End If Next End Sub 元データのコピー上で試してください。
お礼
早速のご回答ありがとう御座いました。 マクロなどまた分からない事がありましたら宜しくお願いいたします。
補足
例といたしまして、果物の名前を使いましたが実はここには名簿が載りますので限定が出来ません。 説明不足で申し訳ありません。
お礼
ANo.3の方法を(処理の時間少しだけ待つようにして)取り入れて行きたいと思います。 データベースソフトは自分にとって今後勉強も必要かと思いました。 昨日から深夜から本当にお世話になりました。 ありがとう御座いました。