• ベストアンサー

エクセルで同一データの行を自動削除するツールを作成したい

VBA、マクロ初心者です。 たぶんマクロではできないと思うのですが、エクセルにて同一データを持つ行を自動検索して削除していきたいのです。どのように作ればよいのか教えてください。

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

  • ベストアンサー
noname#123709
noname#123709
回答No.1

VBA初心者で何故「出来る出来ない」の判断ができるのかがわかりません。 VBAで出来ないと思っているのに作り方を教えてくれってのも変な話ですね。 条件がサッパリわからないので下記のようなものしかできませんが。 A列に対してA列の値が重複している行を削除します。 重複している値の行で2回目以降に出てくる行を削除します。 Sub test() Dim i As Long, j As Long For j = 1 To Range("A65536").End(xlUp).Row For i = Range("A65536").End(xlUp).Row To j + 1 Step -1 If Cells(j, 1).Value = Cells(i, 1).Value Then Rows(i).Delete Shift:=xlUp End If Next i Next j End Sub

KKseguro
質問者

お礼

ありがとうございます。マクロとVBAって違うものだと思っていました。今、いただいたコード(プログラム?)をマクロ登録してみて実行してみたところ、私の知りたかった通りの動きをしてくれたようです。今から検証してみます。 わかりづらい質問だったのに、ありがとうございました。 これからもっと勉強します。

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

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

補足 Wendy02です。 後々、考えてみて、 #2 のマクロ Sub FilterOptionUsedMethod() × mySheet.Range("A1").CurrentRegion.ClearContents   ↓ mySheet.Range("A1").CurrentRegion.Clear こちらのほうがよいです。ClearContents ですと、書式が残ります。 なお、#5さんのおっしゃっているのは、この上記のマクロのことです。

KKseguro
質問者

お礼

この一行が、Rich53さんの教えてくださった、フィルタをかけることと同じ意味を持つのですか! Wendy02さんの教えてくださったプロフラム行、一行ずつ理解していこうと思っています。時間がかかると思いますが、自分なりの答えを出したらこちらでコードを発表できたら、と思います。 質問としてはここでしめさせていただきます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#95859
noname#95859
回答No.5

間違っていたらごめんなさい。 フィルタ機能をつかいます。 該当の列を選択します。 Data/Filter/Advanced Filter (すいません。英語版使っています) 開いたウィンドウで、左下のUnique record onlyにチェックマークをいれます。 OKを押します。 結果は、重複行がHideされますので、 全セルを選択、CtrlーCでコピー新しいワークシートに移動して、Ctrl-Vでペースト(この時、Hideされている 行まで、コピーされるようであれば、なにがしかの設定が必要) 一番楽な方法だと思います。

KKseguro
質問者

お礼

ありがとうございます。フィルタ利用も考えたのですが、コピーして別ワークシートに移動する方法があったんですね。 コピーすると隠れているセルもコピーされてしまうものと思いこんでいました。 しかしながら、ずぼらなわたくしは、一つのマクロを動かすだけで、大量データの中からほしいデータ行を残すやり方を模索していました。 一つ勉強になりました。今後もよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。KenKen_SP です。 >同一データを持つ行を自動検索して削除していきたいのです。 「同一データを持つ行」という意味はA列など特定の列内で重複する 行を調べるとの意味ですか? それとも ワークシート内のA~IV列、つまり全ての列で重複する行を調べるの 意味でしょうか? それにより、コードが変わってきます。

KKseguro
質問者

お礼

はい、特定の列の中で同じデータをもったものを拾い出し、重複分の行を削除する、ということをやりたいのです。 もうすこし、自分のやりたいことをまとめて質問できるように勉強しますね。でも本当に、私のわかりづらい質問に反応してくださる方がたくさんいらっしゃって、感謝しています。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 Wendy02です。 >マクロとVBAって違うものだと思っていました。 正確にいうと、マクロとプロシージャという分け方をします。 マクロというのは、Office では、マクロの記録機能を使ったもので、標準モジュールに作成されたものは、全てマクロになります。マクロには、また引数がありません。 「新しいマクロの記録」では、どうしても出来ないことがあります。また、「新しい記録マクロの記録」で、記録した時は出来たのに、それをマクロでやってみると、出来ないものもあります。 なるべく、良い本を手に入れられて、基礎から始め、それから勉強されると良いかと思います。なお、私自身は、VBAは、Webサイトでは覚えませんでしたが、今は、みなさんのご質問を通して、VBAの実践の勉強をしています。ある意味では、漠然として、量的なものがない、ご質問が一番むつかしいです。 参考書籍:日本VBA協会 http://www.vbaa.jp/training/books.htm

KKseguro
質問者

お礼

参考書籍のページ添付ありがとうございました。仕事をしていて、もっと使いやすくするためにVBAの勉強をしたいと日々思いつつ流された生活をしていました! ここに投稿したのを機に、勉強を始めようと思います。次に質問をするときには「おっ、わかってきたな」と思ってもらえるようがんばるぞ。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 VBAとマクロ: >たぶんマクロではできないと思うのですが、エクセルにて同一データを持つ行を自動検索して削除していきたいのです。 おっしゃるように、「自動」という意味によっては、厳密な意味で言えば、マクロでは出来ないかもしれません。マクロというのは、ひとつのパッケージになっているわけですから、私たち、Excelユーザーの多くは、マクロでないものも、マクロと呼んでいるわけで、本来、引数を取るものはマクロとは呼びません。 ただ、今の段階では、マクロから始めないと、ラチが開かないように思います。それで、データ量によってコードが決まりますが、作ってみましたが、大量の範囲の場合は、思った以上に、そういう方法に決定するまで試行錯誤してしまいました。 少量の場合。 Sub DoubleDataFindDelete() Dim c As Range Dim DeleteRng As Range Dim myRng As Range Set myRng = Range("A1", Range("A65536").End(xlUp)) Application.ScreenUpdating = False For Each c In myRng  If Not IsEmpty(c) Then    If WorksheetFunction.CountIf(Range("A1", c), c) > 1 Then     If DeleteRng Is Nothing Then      Set DeleteRng = c     Else      Set DeleteRng = Union(DeleteRng, c)     End If    End If  End If Next c  If Not DeleteRng Is Nothing Then    DeleteRng.Delete  End If Application.ScreenUpdating = True  Set DeleteRng = Nothing  Set myRng = Nothing End Sub '-------------------------------------------- '大量の場合 今回は、25000行で調べました。 '1行目のタイトル行は必要です。 '<標準モジュールのみ> Sub FilterOptionUsedMethod()   Dim myRng As Range   Dim mySheet As Worksheet   Set mySheet = ActiveSheet     Application.ScreenUpdating = False     'A列によって重複を探す   Set myRng = mySheet.Range("A1", Range("A65536").End(xlUp))     myRng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True   With mySheet.Range("A1", Range("A1").End(xlDown)).SpecialCells(xlCellTypeVisible)    .EntireRow.Copy   End With   With Worksheets.Add(After:=Sheets(Worksheets.Count))    .Range("A1").PasteSpecial    mySheet.ShowAllData    mySheet.Range("A1").CurrentRegion.ClearContents    .Range("A1").CurrentRegion.Copy    mySheet.Range("A1").PasteSpecial    Application.DisplayAlerts = False    .Delete    Application.DisplayAlerts = True   End With   Application.ScreenUpdating = True   Application.Goto mySheet.Range("A1")   Set myRng = Nothing: Set mySheet = Nothing End Sub

KKseguro
質問者

お礼

わかりづらい質問なのに、こんな短時間で考えて頂いてありがとうございました。 少量データの方のコードでは、だぶっているデータ行を検索することができました。 「新しいマクロの記録」という登録方法ではどうやってもできなかったので、VBAというプログラムを使用しないとだめなんだろうな・・・と思っているだけで、とっかかりがなんともわからず、こちらで相談してみてよかったです。 VBAでどんなことができるのか、おふたかたの例題を糧にさせていただき、これから勉強していきたいと思います。ありがとうございました。

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

関連するQ&A

  • Excel VBAでの行の削除について

    Excel VBAを使用して2行ずつ行の削除をし、1行残して(3行目を残す)また2行ずつ行の削除、1行残しす(6行目を残す)をループして行う方法が知りたいです。 イメージとしては以下のような感じです。 ━━【A】━━━━ 【1】あいうえお 【2】かきくけこ 【3】さしすせそ 【4】たちつてと 【5】なにぬねの 【6】はひふへほ 【7】まみむめも 【8】やゆよ 【9】らりるれろ ━━━━━━━━━ ↓マクロ実行後↓ ━━【A】━━━━ 【1】さしすせそ 【2】はひふへほ 【3】らりるれろ ━━━━━━━━━ 当方VBA初心者ですので、できるだけわかりやすくご教授頂けると助かります。 よろしくお願いいたします。

  • エクセル 網掛けしてあるセルの行を残してそれ以外の行を削除するVBA

    windows-xp、エクセル2003を使っています。 エクセルデータがA列からU列まであります。 (1000件程かな、時々AA列まである時もあります) G列には、網掛けしてあるセルがあります。 そこで!! 網掛けしてあるセルの行だけを残して、網掛けがされていない行のデータを一気に削除する!というマクロ(VBA)を作りたいのですが、どうすればよいでしょうか? VBAまだ、よくわかっていないので、初心者レベルでわかりやすく教えてくださると助かります。 宜しくお願い致しますm(_ _)m

  • Excel(エクセル)行挿入SAM自動計算

    Excel(エクセル) SAMで1行目から10行目の合計を出していて、10行目以降に行を挿入して自動的に1行目から11行目の合計が出るように設定したいです。 ※元から空白のセルを入れておくことはしたくありません。 ※マクロやVBAは使えません。初心者です。 例 : (A1) 200 (A2) 100 (A3) 200 ←後から挿入した (A4) 合計 300 ←自動的に500になって欲しい 宜しくお願いいたします。

  • エクセルのシートを同時に行削除、行挿入させて自動連動させたい

    エクセルで、横(列)256列以上のデータを入力したいため、シートを分けざるをえません。その場合、次のようなことがしたいとき、どのようにすればよろしいでしょうか?(やりたいことの結論下記(3)になります。) エクセルのシートが2つ以上あるとします。 (1)「sheet1」には、基本データ(名簿録のようなもの・氏名ふりがなアイウエオ順配列) (2)ふたつめ以降のシートには、毎月変更するデータを入力し、「sheet1」の名簿の個々のIDに対応したそれぞれ同じ行番号に入力することになります。 (3)「sheet1」で行削除(名簿対象者解約)や行挿入(新規契約者)を任意の場所で行いたい。それに連動して、2つ目以降のシートでも同じ列で行削除・行挿入を自動でしたい。 ★この簡易システムを作成するのはマクロ初心者の私であり、日々の入力作業するのはエクセルそのものが初心者である他者となります。 ★行挿入、行削除のときだけシートの同時選択を手作業でしてもらうことは想定していません。そのあたりをも含めた自動化の智恵がでてこないのです。 以上、よろしくお願いします。

  • エクセルVBAで、行削除⇒別シートに自動入力をしたい

    いつもお世話になります。よろしくご指導お願いします。 VBA初心者です。最近随分皆様に助けていただいています。尚、業務の関係でお助けください。 エクセルで名簿形式のデータベースシートがあります。 (山田太郎 ○○市○○町 911-1234 ・・・) 例えば、この山田さんが解約したり死亡されたりすると「行削除」をします。そのとき、別シート(シート名「解約者台帳」)に自動的に削除した行の全データをもっていきたいのです。 ★解約者台帳のフィールドは、元シートと基本的に同じですが、A~AG列のデータが必要。AH列以降のデータは不要です。 解約者台帳に追加していく(新しい行=何も入力されていない行への自動入力)等のVBAのイメージを含めて、私の力ではやはりさっぱりです。どうかまたまたお助けください。お待ちしています。

  • エクセルで行の高さ

    WINDOWS XP(Home Premium)でExcel2003を使用しています。 300行のデータに対し、エクセルで行の高さの自動調整をしました。 しかし、高さが一部不充分であり、印刷されると不備が多々あります。 行の高さを  「メニュー・書式(O)→行(R)→自動調整(A)」でおこなわれる高さの 1.2倍~1.5倍くらいの高さにしたいのですが良い方法はありませんか? おそらくマクロやVBAを使えば可能なんだろうなとは思いながら、 コマンドのことやプログラムを組み立てる知識が無いので、 VBAにこれを貼り付けろ、という提案を頂けたらすごく助かります。 よろしくお願いします。

    • ベストアンサー
    • Mac
  • エクセルのファイル中の空白行を削除する方法

    エクセルのファイルでデータ入力されているものがあるのですが 空白の行があり,それを削除したいのですが たくさんあって手作業では大変です。 マクロなどでうまく自動的に削除できないものでしょうか? 因みにデータはA列にのみ入力されてます。 宜しくお願いします。

  • エクセルで複数行のデータを1行にする方法

    エクセルで複数行のデータを列挿入--切り取り--貼り付けで1行にしたいのですが、 その様なセルの並びが沢山あります。 VBAマクロなどで一度に出来る方法が有りましたらどうか教えて下さい。 データはこんな感じです。 ┌─┬─┬─┬─┬─┐ │01│04│07│10│13│ ├─┼─┼─┼─┼─┤ │02│05│08│11│14│ ├─┼─┼─┼─┼─┤ │03│06│09│12│15│ ├─┼─┼─┼─┼─┤ │16│19│22│25│28│ ├─┼─┼─┼─┼─┤ │17│20│23│26│29│ ├─┼─┼─┼─┼─┤ │18│21│24│27│30│ ├─┼─┼─┼─┼─┤ この様に並び替えたいのです。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │01│02│03│04│05│06│07│08│09│10│11│12│13│14│15│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 何卒宜しくお願いいたします。

  • excel VBA で”27行目ごとに3行削除”について

    VBAはまったく初めてです。 早急に作業を行わなければいけないことがでてきたのですが、持ち時間がないので、VBAでできないものかと思いました。 マクロの記録をやってみたのですが、うまくいきません。 記述をする場所はわかります。 毎27行目以降3行を削除していきたいのです。 どう記述していけばいいのか、どなたか教えていただけないでしょうか?

  • エクセル 同じデータのある行を削除

    こんばんは、エクセル2010で同じ行のデータの削除について教えて頂けませんか? A1~Z1セルまでデータがあります。 それから、下行にずっとデータが続くのですが、A行からZ行まで全く同じデータがあったらその行ごと削除するにはどうしたら良いでしょうか? A1~Z1のデータと、A5~Z5のデータが【全て同じ】なら、A5~Z5を削除するという事です。 他にも同じ行がたくさんあるので、重複している行を全て削除したいと思います。 詳しい方、よろしくお願いいたします。

専門家に質問してみよう