• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vb6でのエクセルアドレス取得)

vb6でエクセルアドレスを取得する方法

このQ&Aのポイント
  • VB6でプログラムを作成して、特定の文字が含まれるセルのアドレスを取得する方法について教えてください。
  • 現在、VB6でエクセルオブジェクトを作成し、特定の文字が含まれるセルを抽出しています。ただし、アドレスを取得する部分でエラーが発生しています。
  • エラーが発生している部分のコードを次に示します。tb(b) = xlsオブジェクト.Worksheets(1).cells(a,1).adress 正常にアドレスを取得するための方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

どのようなエラーがでるのかを明記したほうがいいでしょう そのエラーが出る際の元データもあるとより的確な解答がつくかも知れません 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で探すといった方法も検討してもいいかも ・・・

tamahome10
質問者

お礼

あ・・・ 今回初めてvbでプログラム作成する為、 rangeオブジェクトのことは、考え付きませんでした。 とても参考になりました。 サンプル付きでとても感謝しています。 ありがとうございました。

その他の回答 (1)

回答No.2

示されたコードが全てならば、変数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 とした方がすっきりします。

tamahome10
質問者

お礼

ご回答ありがとうございました。 変数制限が足りず、すみませんでした。 if文も含め参考にしたいと思います。

関連するQ&A