
エクセル2000で同じ内容のセルが複数あったとき、ひとつだけを残し他を削除する方法を教えてください。
ただし少し条件があります。
データーは5列100行位からなっています。
A列にある重複したデーターのセルを削除したいのですが、A列は同一なのですがB列は異なっています。B列に数字が入っているセルとうでないセルがあるのですが、数字が入っているものを残したいのです。
具体例は次のとおりです。
A列に 「ホンダCIVIC」 B列 「-」と書かれた行と
A列に 「ホンダCIVIC」 B列 「2」と書かれた行、
A列に 「ホンダCIVIC」 B列 「5」と書かれた行、
のA列だけを見ると重複した3行が有ったとします。
B列に「5」または「2」の入った行ひとつだけ残し、他を削除したいのです。
何かよい方法があればお教えください。よろしくお願いします。
No.4ベストアンサー
- 回答日時:
済みません、直ぐ気がついたのですが、Sheet2へSheet1のセルから移すところ
For k = 1 To 4
sheet2.Cells(j, k) = sheet1.Cells(i, k)
Next k
の真中行の右辺を
sheet2.Cells(j, k) = RTRim(sheet1.Cells(i, k))
として見てください。
For K=1 ・・が3箇所あるので、3箇所修正してください。これが原因ではないでしょうか。
比較して見るときだけRTrimしていました。セルへセットする部分もRTrimしましょう。
それとRTrimで無くTrimで統一してみて、どちらが良いか、結果を見てください。
この回答への補足
たびたびで申し訳ありません。
ご指摘部分を修正したのですが、変化はありませんでした。
RTrim Trimともに同じです。
まだ何か有りましたらよろしくお願いいたします。
最終的には次のようになっています。
Sub test01()
Dim sheet1, sheet2 As Worksheet
Set sheet1 = Worksheets("sheet2")
Set sheet2 = Worksheets("sheet3")
'-----ソート
sheet1.Range("A3:D1500").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo
'-----
d = sheet1.Range("a1").CurrentRegion.Rows.Count
'--------初期設定
m = RTrim(sheet1.Cells(1, 1))
j = 1
For k = 1 To 4
sheet2.Cells(j, k) = RTrim(sheet1.Cells(1, k))
Next k
'--------前行とダブり判定
For i = 2 To d
If m = RTrim(sheet1.Cells(i, "A")) Then
b = sheet1.Cells(i, "B")
If IsNumeric(b) = True Then
For k = 1 To 4
sheet2.Cells(j, k) = RTrim(sheet1.Cells(i, k))
Next k
End If
Else
j = j + 1
m = RTrim(sheet1.Cells(i, "A"))
For k = 1 To 4
sheet2.Cells(j, k) = RTrim(sheet1.Cells(i, k))
Next k
End If
Next i
End Sub
何度もご迷惑をおかけし申し訳ありません。
#6さんの回答をきっかけに原因がわかってきました。
問題は私のデーターにあるようです。
webファイルで出力しソースを確認したところ、半角スペースが特殊文字である で記入されていました。これが半角スペースが除去できなかった原因であると思われます。
ご迷惑をおかけし申し訳ありませんでした。
今回教えていただいたことで改めてVBAがいろいろできることを認識しました。
もしよろしければご推奨のサイトとか書籍があればお教えいただけないでしょうか。
よろしくお願いします。
No.5
- 回答日時:
こんにちは。
半角のスペースを除去するのでしたら、A列を選択状態にした後、「編集」→「置換」で、いかがでしょうか。
「検索する文字列」を、「 」(半角スペース)
「置換後の文字列」を、「」(なにも入力しない)
で、半角スペースをすべて取り除けます。
No.3
- 回答日時:
>、文字のあとに半角スペースが1個ついていたり2個ついていたりばらばらの状態でした。
RTrim(右側のスペースをのぞく)と言うVBの関数があります。それを使うと、下記変更だけで、追加行コーディング不要です。
m = sheet1.Cells(1, 1) -->m = RTrim(sheet1.Cells(1, 1))
m = sheet1.Cells(1, 1) -->m = RTrim(sheet1.Cells(1, 1))
If m = sheet1.Cells(i, "A") Then -->
If m = RTrim(sheet1.Cells(i, "A")) Then
m = sheet1.Cells(i, "A") -->
m = RTrim(sheet1.Cells(i, "A"))
と変更してやって見てください。
場合によればB列データもTrimする必要があるかもしれません。Trimは前後両方のスペースを取り除くので
こちらがベターかも知れません。
この回答への補足
早速連絡いただきありがとうございます。
教えていただいた変更を加え実行してみたのですが、何も変化はありません。
A列の半角スペースも前と同様2個だっり3個だったりバラバラのままです。
次のような形でマクロを実行しているのですが、どこがおかしいのでしょうか。
たびたびで申し訳ありませんがよろしくお願いいたします。
Sub test01()
Dim sheet1, sheet2 As Worksheet
Set sheet1 = Worksheets("sheet2")
Set sheet2 = Worksheets("sheet3")
'-----ソート
sheet1.Range("A1:D1500").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo
'-----
d = sheet1.Range("a1").CurrentRegion.Rows.Count
'--------初期設定
m = RTrim(sheet1.Cells(1, 1))
j = 1
For k = 1 To 4
sheet2.Cells(j, k) = sheet1.Cells(1, k)
Next k
'--------前行とダブり判定
For i = 2 To d
If m = RTrim(sheet1.Cells(i, "A")) Then
b = sheet1.Cells(i, "B")
If IsNumeric(b) = True Then
For k = 1 To 4
sheet2.Cells(j, k) = sheet1.Cells(i, k)
Next k
End If
Else
j = j + 1
m = RTrim(sheet1.Cells(i, "A"))
For k = 1 To 4
sheet2.Cells(j, k) = sheet1.Cells(i, k)
Next k
End If
Next i
End Sub
No.2
- 回答日時:
この類のものは関数式では無理でしょう。
へたくそなVBAでやって見ました。ただし定石です。
少数例でしかテストをやってないので、よろしく。
ワークシート画面でALTキーを押しながらF11キーをおす。更にALTキーを押しながらI(挿入)更にM(標準モジュール)の画面に下記を貼りつけて実行する。
Sheet2にデータがあり、Sheet3に望みのものを出す。
Sub test01()
Dim sheet1, sheet2 As Worksheet
Set sheet1 = Worksheets("sheet2")
Set sheet2 = Worksheets("sheet3")
'-----ソート
sheet1.Range("A3:B15").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo
'-----
d = sheet1.Range("a1").CurrentRegion.Rows.Count
'--------初期設定
m = sheet1.Cells(1, 1)
j = 1
For k = 1 To 9
sheet2.Cells(j, k) = sheet1.Cells(1, k)
Next k
'--------前行とダブり判定
For i = 2 To d
If m = sheet1.Cells(i, "A") Then
b = sheet1.Cells(i, "B")
If IsNumeric(b) = True Then
For k = 1 To 9
sheet2.Cells(j, k) = sheet1.Cells(i, k)
Next k
End If
Else
j = j + 1
m = sheet1.Cells(i, "A")
For k = 1 To 9
sheet2.Cells(j, k) = sheet1.Cells(i, k)
Next k
End If
Next i
End Sub
(1)シート名は本番に合わせて、
Set sheet1 = Worksheets("sheet2")
Set sheet2 = Worksheets("sheet3")
の()内を変えてください。
(2)3箇所あるFor k = 1 To 9の9に付いて、
シートのデータのある列をI列=9までとしていますが、G列なら7、k列まであるなら11と変えてください。
(3)データは第1行目から始まっているものとしています。
ありがとうございます。できました!!!
しかし残念ながら私のデーターに不備があり期待した結果は得られませんでした。
頂いたマクロを実行したところ、A列が一見同じであるにもかかわらず、削除できていないものが多数見つかりました。
元のデーターを見直したところA列が一見同じに見えるのですが、文字のあとに半角スペースが1個ついていたり2個ついていたりばらばらの状態でした。
もしできれば、A列の半角スペースを除去するマクロなどあれば、独立したマクロとしてお教えいただけるとありがたいのですが。
No.1
- 回答日時:
こんにちは
-と2と5が残った場合、どれを残すかは確実に決まっていないのでしょうか?
まず、ソートしましょう。
[データ]→[並べ替え]
列A
列B
でソートします。
C2セルに
=IF(AND(A1=A2,B1=B2),"重複","")
として、C3セルよりも下にもコピーします。
重複している行に重複と表示されます。
検索とかで、重複を検索して、その行を削除して行けば良いと思います。
この回答への補足
早速回答いただきありがとうございます。
残すのは数字が入っていればどれでもOKです。
書き忘れがあり申し訳ないのですが、このようなデーターが入ったページが300ほど有ります。
できれば機械的に削除できる方法があればありがたいのですが。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2019 列と列(2列)の数値の重複を調べたい 1 2023/05/11 13:35
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルの複写について 4 2022/04/10 01:02
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報