• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003のVBAを教えてパート2)

エクセル2003のVBAで重複行削除

このQ&Aのポイント
  • エクセル2003のVBAを使用して、重複する行を削除する方法を教えてください。
  • 対象データには文字1(A列)、文字2(B列)、種類(C列)の情報があり、文字1と文字2が重複する行を削除したいです。
  • 文字1と文字2が両方共同じ場合は、1行を削除して、種類のセルを空白にします。文字1が同じで文字2が異なる場合は、2行とも残し、種類のセルもそのまま残します。文字2が同じで文字1が異なる場合も、2行とも残し、種類のセルもそのまま残します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

H45eAさん こんにちは。   一応、以下の処理とできるかと思います。 ご確認ください、   Sub 重複削除()  Dim I     As Long  Dim J     As Long  Dim 処理範囲  As Range    Set 処理範囲 = Range(Range("A1"), Cells(Rows.Count, "C").End(xlUp))  For I = 1 To 処理範囲.Rows.Count - 1   For J = 処理範囲.Rows.Count To I + 1 Step -1    If Cells(I, "A") = Cells(J, "A") And Cells(I, "B") = Cells(J, "B") Then     Cells(I, "C").ClearContents     Cells(J, "A").EntireRow.Delete    End If   Next J  Next I End Sub

H45eA
質問者

お礼

早速の返事ありがとうございます。希望通りの処理結果でした。プログラムの内容を自分なりに理解して 次に進みます。勝手ですみませんが、この質問の前に「エクセル2003のVBAを教えて」で質問しています。そちらの方もお願いしたいのですが。今後、色々質問すると思いますがそのときはよろしくお願いします。本当に助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

既に、この丸投げに対するコードの答えは出ているようだが、こういうのは丸投げしないで、ロジックをどうすれば良いか、文章で書く勉強をすることをお奨めする。丸写ししていれば進歩しないよ。 ここが初心者に回答を教える便利コーナーになると困る。 1つの方法は 原シートをそのままに、別シートに結果を出すことにする。 原シートの行を削除するのはいろんな意味でコードが複雑になるから。 現シートで (1)A列+B列の文字列をX列に作る。 (2)そのX列でソートする。 (3)直前の行を見ながら、X列が直前行と同じなら、結果シートに書きださない(何もしない)。 A A(現在) (4)ただし同じときは同じ行数(-1)を変数に記録する。 A-0 A-1 (5)X列が変わったなら、変わったと判った段階で A.直前の同じ行数が0の場合はそのまま書く。 A-0 X(変わった) A-0をそのまま書き出す。 B。同じ行数が1以上なら最終の行を書き出す。種類は空白。 Aー0 A-1 Aー2 X(変わった) A-2のみ書き出す。 こういうロジックで良いか、考えてみるのも勉強になるだろう。 ーー コードはそれから。 こういうタイプの課題は「ソート法」(「上記)とも言うべきものが役に立つ場合が多い(役立たないものもあろうが)。 バッチ処理では、コントロールブレークという手法で色んなとことに出現する。

H45eA
質問者

お礼

忠告ならびにご教授ありがとうございます。今回回答頂いた方のVBAから考え方を学び今後のプログラムに生かすつもりです。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

VBAを使うほどのことでもないでしょう。次のように関数を使って別のシートに表示させることができます。 お示しの表がシート1のA列からC列に有って1行目は項目名でデータは2行目から下方にあるとします。D列を作業列としてD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTBLANK(A2:C2)=3,"",IF(AND(A2=A3,B2=B3),INT(MAX(D$1:D1))+1+0.5,IF(AND(A2=A1,B2=B1),"",INT(MAX(D$1:D1))+1))) そこで別のシートの1行目は項目行として、A2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(ROW(A1)>MAX(Sheet1!$D:$D),COLUMN(A1)>3),"",IF(MOD(INDEX(Sheet1!$D:$D,MATCH(ROW(A1)+0.9,Sheet1!$D:$D,1)),1)=0.5,IF(COLUMN(A1)=3,"",INDEX(Sheet1!$A:$B,MATCH(ROW(A1)+0.9,Sheet1!$D:$D,1),COLUMN(A1))),INDEX(Sheet1!$A:$C,MATCH(ROW(A1),Sheet1!$D:$D,0),COLUMN(A1)))) お示しのようなデータの場合にはA2セルには0が表示されます。 0を表示したくない場合にはA、B,C列を選択してから右クリックし「セルの書式設定」の「表示形式」で「ユーザー定義」を選び種類の窓には ;; と入力すればよいでしょう。0は空白のセルに変わります。 関数は一度設定しておけばデータに変化が有ってもあるいは追加が有っても直ちに反応しますがマクロの場合にはその都度別の操作が必要となりますね。

H45eA
質問者

お礼

ありがとうございました。検討させていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • Excel 複雑なセル埋めのVBA

    エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。

  • エクセルVBAでセル結合

    いつもお世話になっています。 エクセル2003でVBAを使って下記をしたいのでその、VBA構文を教えて下さい。 特定の列のあるセルに文字が入っています。 (文字が入っている列は固定ですが、行番号はデータによって変わります。例えば、Aデータの場合は「J30」、Bデータの場合は、「J55」だったりします。) この文字が入っているセルをVBAで検索し、検索したセルを右隣のセルと結合します。(先ほどのAデータの場合、J30:Z30に結合します。) 更に、文字が入っているセルが2以上の複数の場合があります。(先ほどのAデータの場合、「J30」と「J40」と「J45」という感じです。文字が入っているセルの数はデータにより異なります。) 結合が終わり、このシートのデータがあるところだけに罫線を引きます。(このシートのデータというのは、前述の文字とそれ以外は、「数字」と「・」です。 ややこしいですが、よろしくお願いします。

  • Excel マクロ VBA セル内で改行された文字列の分割

    はじめまして。 ExcelのVBA初心者で、ちょっと困っています。 (例) (1) セルA1に以下のような改行された文字列が入力されています。 【セルA1】 a aa aaa b bb bbb (2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。 【セルA2】 a aa aaa 【セルA3】 b bb bbb ※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。 そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。 Sub 分割() Dim A, B, C A = Split(Range("A1"), Chr(10)) B = 0 For Each C In A B = B + 1 Range("A2").Offset(B - 1, 0).Value = C Next End Sub ご教授いただけると助かります。 よろしくお願い致します。

  • エクセルの置換

    m行n列の表があります。 第1行はタイトルで、 第2行の各列には (2,a)セルに関するデータが それぞれ入力されています。 第3行以降は、a列にのみコードが入力されていますが、b列以降は空欄です。 第2行のデータ中の (2,a)セルの文字を、 各行について (m,a)セルの文字に置換しながら第2行を各行にコピーして、(3,b)から(m,n)の空欄を埋めて表を完成させたいのです。 できれば、第2行の各列の書式も含めて第3行以降の各列にコピーするというVBAを教えていただきたくよろしくお願いします。

  • エクセルのVBAで

    ある列(仮にA列とします)の最終行がA30であり A25までは空白だとします。 この時に、A30の値をA29~A25=データの入力されていないセルに入力(コピー)するにはVBAでどのように記述すればいいのでしょうか? 最終行から、上にその最終行の値をデータの入力されているセルに達するまで入力(コピー)したいのですが。 分りづらい表現で申し訳ありませんが、よろしくお願い致します。

  • エクセルVBA 文字数指定で置換

    Excel VBA で、 (1) Sheet1のA1:A9の各文字列の3文字目から2文字を   Sheet2のB1の文字列(bb)に変換する。 (2) Sheet1のA1:A9の各文字列の5文字目から2文字を   Sheet2のC1の文字列(cc)に変換する。 とするには、どのようにしたら良いでしょうか?

  • ExcelのVBAで連番を振る。

    A列が空白で、B列に1行目から***行目(毎回変わる)までデータが入力されている時、 A列に、1から***まで(B列のデータが終わるまで、連番を振るにはどんなVBAを かいたらいいのでしょうか? お願いします。

  • Excel VBAで値が重複する行を削除する

    Excel2000を使っています。 シートAに数千件のデータがあります。 シートBのE列にある文字とシートAのD列の文字が重複する場合に、シートAの重複するセルがある行を削除する(且つできれば行のデータを抜き出すVBAを作ろうと考えています。 最近VBAの初心者本をやっと理解したところで、ちんぷんかんぷんとまではいかないけど、知恵熱がでました。 仕事なので自分でなんとかすべきかと思いますが、きっかけの調べ方がまずわからない。 どなたか、解かるきっかけだけでも与えて頂けないでしょうか。とくに、別シートの値と重複する値を探す場合に何をいれるかわかればきっと道は開けると思うんですが…。 初めての質問なので、質問内容が至らなかったらもうしわけありません。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!