• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 同じ内容行削除マクロ 2)

エクセル 同じ内容行削除マクロ

このQ&Aのポイント
  • シート1、シート2のB列を比較して同じ内容行を削除するエクセルマクロの解決策を教えてください。
  • エクセルで行を削除するマクロを作成していますが、栃木県3と#栃木県3を同じものとして削除されてしまいます。
  • エクセルのマクロを使ってシート1とシート2のB列を比較し、同じ内容の行を削除する方法を教えてください。

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

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

こんばんは。 書いた回答者には悪いけれども、 .Find(wStr) これは、Find ステートメントの細かな設定が書いていないので、ワークシート側の検索などで使った設定そのものが残ってしまっています。だから、本来は、設定を必ず書いてあげなくてはなりません。#1 さんのご指摘は、その部分を参考にしてください、という意味です。 ただ、元のマクロは、難しく書きすぎのように思います。 Find メソッド自体は、オブジェクトを戻り値にしますから、オーバーヘッドがわずかに生じてしまいますから、以下のように、ワークシート関数で代用が利きます。ただ、このような単純なものに限ります。 もちろん、CountIf の第二引数は、& "*" (ワイルドカード)も可能です。 Sub 削除2()   Dim rng  As Range   Dim i   As Long   Dim j   As Long   Dim ret As Variant      With Worksheets("Sheet2")     Set rng = .Range("B1", .Range("B" & Rows.Count).End(xlUp))   End With      With Worksheets("Sheet1")     For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1       ret = WorksheetFunction.CountIf(rng, .Cells(i, 2))       If ret > 0 Then         .Rows(i).Delete       End If     Next   End With   Set rng = Nothing End Sub      

samsonkun
質問者

お礼

ご丁寧な解説有難う御座いました。 解決です。

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

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.1です。 回答の際に省略してしまって混乱しちゃいましたね。 #3(Wendy02さん)の補足事項そのままです。 エクセル 同じ内容行削除マクロ http://okwave.jp/qa4386962.html 私も諸先輩の方の回答からFindメソッドを使用する際には、省略は意図しない動きをする旨をご指導受けましたので、 Dictionaryオブジェクトを用いました。

すると、全ての回答が全文表示されます。
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

Set f = wh2.Range("B1:B" & wh2.Cells(Rows.Count, "B").End(xlUp).Row).Find(wStr) ↓ Set f = wh2.Range("B1:B" & wh2.Cells(Rows.Count, "B").End(xlUp).Row).Find(wStr, lookat:=xlWhole) 完全一致の検索

すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

前回の御質問に回答したコードですが、xlWholeを指定しているので、こちらなら大丈夫だと思います。 Sub test() Dim myCell As Range, whatRange As Range, targetRange As Range Dim rtnRange As Range, hitRange As Range Set whatRange = Sheets("Sheet2").Range(Sheets("Sheet2").Range("B1"), Sheets("Sheet2").Range("B1").End(xlDown)) Set targetRange = Sheets("Sheet1").UsedRange.Columns("b") For Each myCell In whatRange Set rtnRange = findRange(targetRange, myCell.Value, xlWhole) If Not rtnRange Is Nothing Then If hitRange Is Nothing Then Set hitRange = rtnRange Else Set hitRange = Union(hitRange, rtnRange) End If End If Next myCell If Not hitRange Is Nothing Then hitRange.EntireRow.Delete End Sub Private Function findRange(targetRange As Range, matchString As String, matchMode As Long) As Range Dim c As Range Dim firstAddress As String With targetRange Set c = .Find(matchString, LookIn:=xlValues, lookAt:=matchMode) Set findRange = c If Not c Is Nothing Then firstAddress = c.Address Do Set c = .FindNext(c) If Not c Is Nothing Then Set findRange = Union(findRange, c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With End Function

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Findメソッドでのデータ検索 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html 【例1】完全一致 の欄を参考にされては。

samsonkun
質問者

補足

拝見させて頂きました。 mykeyの所にシート2の項目を全て書き込まないといけないのでしょうか?

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

関連するQ&A

Windows11で印刷できなくなった
このQ&Aのポイント
  • Windows11で印刷できなくなりました。ドライバーを更新する方法を教えてください。
  • パソコンをWindows10からWindows11にアップグレードした後、印刷ができなくなりました。どのように接続されていますか?
  • ブラザー製品の印刷機を使用していますが、Windows11にアップグレードした後で印刷ができなくなりました。ドライバーを更新する必要があります。
回答を見る

専門家に質問してみよう