Private Sub CommandButton1_Click()
'シート「物件情報」の3列目には「住所」が
'シート「西エリアの県」の1列目には「西エリアの府県」が
'書かれています。
'西エリアの府県の住所のある行を削除するコードを作成したのですが
'一部消したい行が残ってしまいます。
'どこがどのように間違っているのでしょうか
’0 < InStr は西エリアの府県の文字の位置が1以上なら、「その府県が含まれる」としています。
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim i1 As Integer
Dim i2 As Integer
Set sheet1 = Worksheets("物件情報")
Set sheet2 = Worksheets("西エリアの県")
For i1 = 2 To sheet1.Cells(Rows.Count, 3).End(xlUp).Row
'住所が西エリアならその物件を削除する
For i2 = 2 To sheet2.Cells(Rows.Count, 1).End(xlUp).Row
If 0 < InStr(sheet1.Cells(i1, 3).Value, sheet2.Cells(i2, 1).Value) Then
sheet1.Rows(i1).Delete Shift:=xlUp
End If
Next
Next
End Sub
No.3ベストアンサー
- 回答日時:
For i1 = 2 To sheet1.Cells(Rows.Count, 3).End(xlUp).Row
を
For i1 = sheet1.Cells(Rows.Count, 3).End(xlUp).row To 2 Step -1
に変えてください。行削除の場合は、下から上に向かって削除するのが鉄則です。
No.2
- 回答日時:
こんばんは。
きっと、上から処理して消しているから。行を消すと1行全体的に上がる。
でも、for文では、消した行の事は考慮されていないため、1行上がっても
その行は、処理されずに更にその下を処理するから。だと思います。
For sheet1.Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
の様に、下から処理するのが良いかと思います。
No.1
- 回答日時:
こんばんは
ぱっと見で回答しますので違うかもですが
削除する側のループを最終行から廻すようにするのが、行削除の定石です
For i1 = sheet1.Cells(Rows.Count, 3).End(xlUp).Row To 2
行削除する場合、Rangeオブジェクト変数を使い、
対象行(rangeオブジェクト)をUnionで纏めて
ループ後に纏めて処理する方が処理が早く良いと思います
この場合、最終行からループする必要はありません。
サンプル
Set sheet1 = Worksheets("物件情報")
Set sheet2 = Worksheets("西エリアの県")
For i1 = 2 To sheet1.Cells(Rows.Count, 3).End(xlUp).Row
'住所が西エリアならその物件を削除する
For i2 = 2 To sheet2.Cells(Rows.Count, 1).End(xlUp).Row
If 0 < InStr(sheet1.Cells(i1, 3).Value, sheet2.Cells(i2, 1).Value) Then
If Rng Is Nothing Then
Set Rng = sheet1.Rows(i1)
Else
Set Rng = Union(Rng, sheet1.Rows(i1))
End If
End If
Next
Next
If Not Rng Is Nothing Then Rng.Delete Shift:=xlUp
条件設定に付いては未検証ですが、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
switch の範囲指定
-
【Excel】特定の文字を含むセル...
-
Do~Loopした回数をカウントしたい
-
VBの質問#if 0 then ってどう...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
リョウ・・・量?料?
-
2重のDo~Loopは?
-
VB.NET Excelを読み込んでDataT...
-
FFTの結果ついて
-
タッチパッドはチャタリングは...
-
C# 画面のちらつきを解消したい
-
セルの値が0はクリアするマクロ
-
VBA SaveChanges 上書きされない
-
UMLでの例外処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
iD
-
VBA SaveChanges 上書きされない
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報