Excel VBA質問箱 IV

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

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


26457 / 76738 ←次へ | 前へ→

【55612】Re:実行範囲の指定方法について
発言  ichinose  - 08/5/13(火) 22:20 -

引用なし
パスワード
   こんばんは。

>>因みに何故指摘したかと言いますと、この条件の前にりんさんのソースで
>>以前検証して、Nothingを返されたからです。

>Set c = .FindNext(c) '検索を繰り返す
>で、 Nothingが返される
>実例がございまいたら、
>ここに提示してもらえませんか?

これは、「備えあれば憂いなし」という事を言っているのだと思いますよ!!

特に私のようにFindメソッド回りのロジックなど一度作成したら、
再利用可能なプロシジャーにしておいて、それを利用したい。

という考え方だと、

>Set c = .FindNext(c) 

で、 Nothingが返されることをチェックするコードは入れなくては
なりませんねえ!!


例えば、

Book1.xlsのThisworkbookのモジュールに

'=======================================================
Option Explicit
Public WithEvents sht As Worksheet
'=========================================================
Private Sub sht_SelectionChange(ByVal Target As Range)
  Target.Value = ""
End Sub


book2.xls(sheet1というシートが存在するブック)の標準のジュールに
'==========================================================
Option Explicit
'==========================================================
Sub main()
  Worksheets("sheet1").Activate
  mk_sample
  With CreateObject("excel.application")
    .Visible = True
    With .Workbooks.Open(ThisWorkbook.Path & "\book1.xls")
     Set .sht = ThisWorkbook.Worksheets("sheet1")
     End With
    End With
  AppActivate Application.Caption
End Sub
'==========================================================
Sub mk_sample()
  Cells.Delete
  Range("a2:a4").Value = "aaa"
  Range("a10").Value = "aaa"
  Range("a1").Select
End Sub
'==========================================================
Sub Test()
  Dim c, firstAddress
  With Range("A2:a10")
    Set c = .Find("aaa", after:=Range("a10"), LookIn:=xlFormulas, LookAt:=xlWhole)
    If Not c Is Nothing Then
      c.Select
      firstAddress = c.Address
      Do
       c.Interior.ColorIndex = 5 'とりあえず青く塗ってみたり
       Set c = .FindNext(c) '検索を繰り返す
      Loop While c.Address <> firstAddress
     End If
  End With
End Sub

として、Book1.Xls Book2.Xlsは、同一フォルダ上に保存してください。

一度、全てを閉じた後、Book2.Xlsのみ起動してください。

まず、mainを実行してください。

次いで問題の Testを実行して見てください。

私が試した限りでは、無限ループに陥ります(Excel2002で確認)。

こんなコードにすることがよくない と思われるかもしれません。

が、Findメソッドを使って汎用的(再利用可能)なコードを作成しようと
考えた時には上記のような事象にも対応するコード、

つまり、

>Set c = .FindNext(c) '検索を繰り返す

で、 Nothingが返される
ことを想定したコードが必要かと思います。

よって、Nothingチェックが無駄だとは一概には言えないと思いますよ!!
0 hits

【55571】実行範囲の指定方法について marumaru 08/5/11(日) 20:07 質問
【55572】Re:実行範囲の指定方法について りん 08/5/11(日) 20:18 回答
【55575】Re:実行範囲の指定方法について kanabun 08/5/11(日) 21:22 発言
【55579】Re:実行範囲の指定方法について marumaru 08/5/12(月) 1:39 お礼
【55581】Re:実行範囲の指定方法について VBWASURETA 08/5/12(月) 10:01 発言
【55582】Re:実行範囲の指定方法について kanabun 08/5/12(月) 11:00 発言
【55583】Re:実行範囲の指定方法について VBWASURETA 08/5/12(月) 11:32 発言
【55584】Re:実行範囲の指定方法について kanabun 08/5/12(月) 11:57 発言
【55585】Re:実行範囲の指定方法について VBWASURETA 08/5/12(月) 12:22 発言
【55586】Re:実行範囲の指定方法について kanabun 08/5/12(月) 12:36 発言
【55588】Re:実行範囲の指定方法について VBWASURETA 08/5/12(月) 13:54 発言
【55589】Re:実行範囲の指定方法について VBWASURETA 08/5/12(月) 14:08 発言
【55590】Re:実行範囲の指定方法について kanabun 08/5/12(月) 14:17 質問
【55612】Re:実行範囲の指定方法について ichinose 08/5/13(火) 22:20 発言
【55613】Re:実行範囲の指定方法について kanabun 08/5/13(火) 22:42 発言
【55614】Re:実行範囲の指定方法について n 08/5/14(水) 1:19 発言
【55615】Re:実行範囲の指定方法について ひげくま 08/5/14(水) 8:12 発言
【55617】Re:実行範囲の指定方法について kanabun 08/5/14(水) 9:05 発言
【55632】Re:ご迷惑をかけました。 VBWASURETA 08/5/14(水) 12:15 発言

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