人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAについて質問です。

A、B列には複数行にわたり文字列が記入されています。
A列に重複する文字列がある場合、

?A列とB列が完全に合致するものはひとつを残して行を削除する。
A列「阪神」B列「タイガース」
A列「阪神」B列「タイガース」
→重複するので片方を削除(どちらでも可)。

?A列とB列が合致しない場合、その両方の行を切り取って、
ブック内の最後のシートに貼り付けていく。
A列「阪神」B列「タイガース」
A列「阪神」B列「ドラゴンズ」
→A列は重複しているのにB列は違う文字列が入っているので、
両者の行を切り取って、最終シートに貼り付ける
以上、よろしくお願いします。

●質問者: taroemon
●カテゴリ:コンピュータ
✍キーワード:VBA ひとつ エクセル タイガース ドラゴンズ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

?

Sub Macro1()
 
For a = Range("A65536").End(xlUp).Row To 1 Step -1
 If Cells(a, 1) <> "" Then
 b = Cells(a, 1)
 c = Cells(a, 2)
 For d = a - 1 To 1 Step -1
 If Cells(d, 1) = b And Cells(d, 2) = c Then
 Rows(a &amp; ":" &amp; a).Delete Shift:=xlUp
 Exit For
 End If
 Next d
 End If
Next a

End Sub

ちょっと時間がないのて ひとつだけですが・・・・。

◎質問者からの返答

takntさんいつも本当にありがとうございます。

今回は両者合わせたものが必要ですので、

またお時間のあるときにでもご回答くださいませ。


2 ● きゃづみぃ
●50ポイント

?

Sub Macro2()

If ActiveSheet.Index = Sheets.Count Then
 MsgBox "最後のシートでは実行できません"
 End
End If

n = Range("A65536").End(xlUp).Row

For a = n To 1 Step -1
 b = Cells(a, 1)
 c = Cells(a, 2)
 f = 1
 For d = n To 1 Step -1
 If Cells(d, 1) = b And Cells(d, 2) = c And a <> d Then
 f = 2
 Exit For
 End If
 Next d
 If f = 1 Then
 Rows(a).Delete Shift:=xlUp
 g = Worksheets(Sheets.Count).Range("A65536").End(xlUp).Row + 1
 Worksheets(Sheets.Count).Cells(g, 1) = b
 Worksheets(Sheets.Count).Cells(g, 2) = c
 End If
Next a

End Sub

二つ目のは ちょっとややこしかったので時間が かかりました。

重複しないものを 最後のシートにセットしました。

行とありましたが、セルAとBの列のみです。

一行まるごとだと シートの切り替えが必要となり、画面がちらつきそうなんでちょっと躊躇しました。

ま、うまいことやれば回避できるのかもしれませんが、私には わかりませんでしたので

AとBのセルにそれぞれ値をセットするだけにしました。

◎質問者からの返答

ご回答ありがとうございます。

大変参考になりました。

いつも本当に助かっています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ