シート1、シート2(基準)のB列を比較して同じ内容行を削除したいのですが、「栃木県3」と「#栃木県3」を同じのもと考えて削除されてしまいます。
Sub 削除()
Dim wh1 As Worksheet
Dim wh2 As Worksheet
Dim f As Range
Dim wR As Integer
Dim mR As Long
Dim wStr As String
'
Set wh1 = Worksheets("Sheet1")
Set wh2 = Worksheets("Sheet2")
wR = 0
With wh1
mR = .Cells(Rows.Count, "A").End(xlUp).Row
For wR = mR To 1 Step -1
wStr = .Cells(wR, "B")
Set f = wh2.Range("B1:B" & wh2.Cells(Rows.Count, "B").End(xlUp).Row).Find(wStr)
If Not f Is Nothing Then
.Rows(wR).Delete
End If
Next
End With
End Sub
解決策教えて下さい。
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
No.5
- 回答日時:
ANo.1です。
回答の際に省略してしまって混乱しちゃいましたね。
#3(Wendy02さん)の補足事項そのままです。
エクセル 同じ内容行削除マクロ
http://okwave.jp/qa4386962.html
私も諸先輩の方の回答からFindメソッドを使用する際には、省略は意図しない動きをする旨をご指導受けましたので、
Dictionaryオブジェクトを用いました。
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)
完全一致の検索
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
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでのnothing の意義について
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
getParameter()について
-
エクセルVBA 画像を貼り付ける...
-
VB.netでメソッドからコントロ...
-
JSPでのArrayListの表示につい...
-
servletからjspへオブジェクト...
-
C#でのExcel操作について.(Ran...
-
Vba ListViewの行挿入に関して...
-
Javaでブラウザ判定
-
String型からlong型への変換は...
-
ピクチャーボックスに点を打つ...
-
drawStringの座標について
-
ArrayListのデバッグ方法について
-
[ExcelVBA] objExcel.Sheetsの...
-
VBAでの[]
-
JTableで値を右寄せ表示する方法
-
[ASP.NET]DropDownListのDB連携...
-
Excel VBA 定数にオブジェクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
JSPでのArrayListの表示につい...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Excel VBA 定数にオブジェクト...
-
Vba ListViewの行挿入に関して...
-
javaで、、、
-
Dispose()は、どんな時に使うの...
-
VB.NETでのnothing の意義について
-
getParameter()について
-
String型からlong型への変換は...
-
JTableで値を右寄せ表示する方法
-
C#で親にイベントを投げる方法
-
Javaでブラウザ判定
-
VBスクリプトでテキストファイ...
-
PrintFormを使用してのプリント
-
UTF-8のテキストファイルを開く...
おすすめ情報