- ベストアンサー
vb6でエクセルアドレスを取得する方法
- VB6でプログラムを作成して、特定の文字が含まれるセルのアドレスを取得する方法について教えてください。
- 現在、VB6でエクセルオブジェクトを作成し、特定の文字が含まれるセルを抽出しています。ただし、アドレスを取得する部分でエラーが発生しています。
- エラーが発生している部分のコードを次に示します。tb(b) = xlsオブジェクト.Worksheets(1).cells(a,1).adress 正常にアドレスを取得するための方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どのようなエラーがでるのかを明記したほうがいいでしょう そのエラーが出る際の元データもあるとより的確な解答がつくかも知れません xlsオブジェクトからすべて指示するのは冗長だともいます 今回セルのデータが対象なので Rangeオブジェクトでよさそうですが・・・ dim rng as Range, ss as String For a= 1 To 行の末 set rng = xlsオブジェクト.Worksheets(1).Cells(a,1) ss = rng.Value If 0 <> InStr(ss, "特定の文字") Then If b = 1 Then ReDim tb(1) Else b = b + 1 ReDim Preserve tb(b) End If tb(b) = rng.adress End if Next といった具合で ・・・ Findで探すといった方法も検討してもいいかも ・・・
その他の回答 (1)
- cistronezk
- ベストアンサー率38% (120/309)
示されたコードが全てならば、変数bは最初0です。ですから >If b = 1 Then >ReDim tb(1) よりも >Else >b = b + 1 >ReDim Preserve tb(b) が、先に実行されます。 この段階で配列tbは宣言されただけでまだReDimされていません。それをPreserveしようとしてエラーになっていると考えられます。 最初からステップ実行を行えば、エラーの原因はすぐにわかったはずです。 Option Explicitは宣言する癖を付けておいた方がいいです。 また、tb(0)の値を使わないようですが、それならOption Baseは1に設定した方がいいと思います。 IFのネストが煩わしい場合は ReDim tb(1) For a= 1 To 行の末 If 0 <> InStr(xlsオブジェクト.Worksheets(1).Cells(a,1).Value, "特定の文字") Then b = b + 1 ReDim Preserve tb(b) tb(b) = xlsオブジェクト.Worksheets(1).cells(a,1).adress End if Next とした方がすっきりします。
お礼
ご回答ありがとうございました。 変数制限が足りず、すみませんでした。 if文も含め参考にしたいと思います。
お礼
あ・・・ 今回初めてvbでプログラム作成する為、 rangeオブジェクトのことは、考え付きませんでした。 とても参考になりました。 サンプル付きでとても感謝しています。 ありがとうございました。