Excel:Rangeについて への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/11 22:16:49
> keyはFor Eachで廻していて、B13~CR13までのセルはいくつかに結合されています。
B13:CR13 というと、13行目の第2列~第96列目に相当しますね。

しかし提示されたコードには、For Each の記述が無いようですが、
実際のコードは、どのようになっているのでしょうか?

> CR13より前までのセルのsymbolは取得できています。
> なのにCR13だけsymbolがNothingになります。
こちらでは再現できませんでした。現象をこちらで追試できるよう、
セルがどのように結合されていて、どのようなデータが入力されていたのか、
また、Find に指定した key の中身が何であるのかを示して頂けないでしょうか。


なお、個々のオブジェクトは、Marshal.ReleaseComObject メソッドを用いて、
使用後に後始末する必要があります。そのため、
Dim symbol As Excel.Range = Nothing
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
Dim baseRange As Excel.Range = xlSheet.Range("B13:CR13")
For Each key In データ
  symbol = baseRange.Find(key)
  'symbol に対する処理 
  Marshal.ReleaseComObject(symbol)
Next
Marshal.ReleaseComObject(baseRange)

のように、個々の Range オブジェクトを変数に受け、それぞれを解放させるようにしてください。
直接「xlSheet.Range("B13:CR13").Find(~)」のように記述してしまうと、中継役となった
B13:CR13 の Range オブジェクトを、明示的に解放させる事ができなくなってしまいます。
投稿者 ゆぅ  (社会人) 投稿日時 2009/8/11 22:01:32
Rangeメソッドについて質問です。
VB2005で開発しています。

Rangeの範囲指定方法が間違っているのか最後のセルの値だけ取得できません。

---------------
Dim symbol As Excel.Range = Nothing
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
symbol = xlSheet.Range("B13:CR13").Find(key)
---------------

keyはFor Eachで廻していて、B13~CR13までのセルはいくつかに結合されています。
CR13より前までのセルのsymbolは取得できています。
なのにCR13だけsymbolがNothingになります。

ただ、symbol = xlSheet.Range("B13:CR13").Find(key)で止めて
ウォッチウインドでxlSheet.Range("CR13").ROWとすると欲しい値が取れています。

どうして最後だけ取得できないのでしょうか?
最後のCR13のsymbolを取得するにはどうしたらよいのでしょうか?