![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
エクセル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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロでrangeの選択が...
-
エクセルの表示形式を保ったま...
-
Excel VBA For Each Next構文...
-
Excel VBAのComboboxのRemoveItem
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルでオートフィルタのボ...
-
Excelで中央揃えが出来ない?
-
エクセルで特定の文字が入って...
-
エクセル(勝手に太字になる)
-
お店に入るために行列に並んで...
-
エクセルで文字が混じった数字...
-
エクセルのオートフィルタで最...
-
【スプレッドシート】指定の日...
-
オートフィルタで3つ以上の条...
-
SUMIFとCOUNTIFを合わせたよう...
-
文字列に数字を含むセルを調べたい
-
エクセルで年月の合計の関数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBAのComboboxのRemoveItem
-
Excel VBA For Each Next構文...
-
EXCEL 行内のデータを2行に分け...
-
VBA:値をシート間で転記する方法
-
エクセルの関数(IF関数?)に...
-
EXCELのマクロで一覧表に...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルでオートフィルタのボ...
-
エクセルで特定の文字が入って...
-
エクセルで、2種類のデータを...
-
エクセルのオートフィルタで最...
-
Excelで半角の文字を含むセルを...
-
2つのエクセルのデータを同じよ...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報