Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1080 / 13645 ツリー ←次へ | 前へ→

【76432】検索文字がある行を削除したい ペンネーム船長 14/11/30(日) 14:10 質問[未読]
【76433】Re:検索文字がある行を削除したい ichinose 14/11/30(日) 15:54 発言[未読]
【76435】Re:検索文字がある行を削除したい ペンネーム船長 14/11/30(日) 21:55 お礼[未読]

【76432】検索文字がある行を削除したい
質問  ペンネーム船長  - 14/11/30(日) 14:10 -

引用なし
パスワード
   検索文字がある行を削除したいのですが、
Set FoundCell = sh.Cells.FindNext(FoundCell)
のところで、「RangeクラスのFindNextプロパティを取得できません。」
のエラーが出てしまいます。
アドバイスをお願いします。

Private Sub CommandButton1_Click()
Dim sh As Worksheet
Dim FoundCell As Range
Dim FirstCell As Range
Dim Target As Range
Dim r As Integer
  
Set sh = Worksheets("表")
Set FoundCell = sh.Cells.Find(What:="検索文字")

If FoundCell Is Nothing Then
  MsgBox "検索文字は見つかりませんでした"
  Exit Sub
Else
  Set FirstCell = FoundCell
  Set Target = FoundCell
End If

Do
  Set FoundCell = sh.Cells.FindNext(FoundCell)
  r = FoundCell.Row
  If FoundCell.Address = FirstCell.Address Then
    Exit Do
  Else
    Set Target = Union(Target, FoundCell)
    'FoundCellの行を削除する
    sh.Rows(r).Delete
  End If
Loop

End Sub

【76433】Re:検索文字がある行を削除したい
発言  ichinose  - 14/11/30(日) 15:54 -

引用なし
パスワード
   ▼ペンネーム船長 さん:
>検索文字がある行を削除したいのですが、
>Set FoundCell = sh.Cells.FindNext(FoundCell)
>のところで、「RangeクラスのFindNextプロパティを取得できません。」
>のエラーが出てしまいます。
>アドバイスをお願いします。

Findメソッド Findnextメソッドでは、
検索が終了してから、処理をしてください。

検索しながら処理を行うと不具合の原因になります。


>Private Sub CommandButton1_Click()
>Dim sh As Worksheet
>Dim FoundCell As Range
>Dim FirstCell As Range
>Dim Target As Range
>Dim r As Integer
>  
>Set sh = Worksheets("表")
>Set FoundCell = sh.Cells.Find(What:="検索文字")
>
>If FoundCell Is Nothing Then
>  MsgBox "検索文字は見つかりませんでした"
>  Exit Sub
>Else
>  Set FirstCell = FoundCell
>  Set Target = FoundCell
>End If
>
>Do
>  Set FoundCell = sh.Cells.FindNext(FoundCell)
                '     このFoundcellのある行を
                '下の方でsh.Rows(r).Delete 行毎に削除しています
                ’エラーの直接の原因はこれです   
   'r = FoundCell.Row 要らない
>  If FoundCell.Address = FirstCell.Address Then
>    Exit Do
>  Else
>    Set Target = Union(Target, FoundCell)
>    'FoundCellの行を削除する
    ’sh.Rows(r).Delete  ここで削除しない 
>  End If
>Loop
If Not Target Is Nothing Then
  Set Target = Target.EntireRow
  Union(Target, Target).Delete
End If
’検索がすべて終わってから削除する
>End Sub

【76435】Re:検索文字がある行を削除したい
お礼  ペンネーム船長  - 14/11/30(日) 21:55 -

引用なし
パスワード
   ▼ichinose さん:

> ’検索がすべて終わってから削除する

そういう事ですね。
検索途中で、行を削除するとVBAの作業に支障をきたすというのは、言われてみればわかる気がします。

行の取得も EntireRow を使った方がすっきりするという事ですね。

希望していた通りに作動しました。

有難う御座いました。

1080 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free