• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAの勉強初歩のものです。)

エクセルVBAでのセル情報検索方法と取得方法

このQ&Aのポイント
  • エクセルVBAを利用して、特定のキーワードを使ってセルに情報を検索する方法について解説します。
  • また、検索したセルの隣のセルの情報を取得する方法も説明します。
  • 具体的なコードの一部を示しながら、オブジェクトの取り扱いやエラーの解決方法についても詳しく説明します。

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

Private Sub CommandButton1_Click() Dim r As Range Dim rin As Range Set r = Sheet1.Range(Cells(2, 1), Cells(2, 1).End(xlDown)) Set rin = r.Find(Trim(TextBox1.Text)) TextBox2.Text = rin.Offset(, 1) TextBox3.Text = rin.Offset(, 2) End Sub サンプルをアップします。テキストボックス1に社名を入れて 検索図を、アップします。 後は、自分で、応用してください。

crtlcdpdpel
質問者

お礼

画面まで用意してくださったtom11さん、ありがとうございました。理解できました。私のは、rin.Offset(, 1)を代入するオブジェクト、この場合はテキストボックスが無く、本来なら、textbox1 = rin.Offset(, 1)とするところを、私のでは、1、textbox1というオブジェクトを用意していなかったので、エラーとひょうじされたこと、2、cがすでにrangeobjectということをマッタク知識としてなかったことです。この2点を吸収できて理解できました。

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

>おそらく方向としては間違っていないのでしょうけど・・・・ 方向とは何を指しているのかは分りませんが それよりも基本的なところの問題です objectの意味が理解出来ていません ヘルプから、findの検索結果はRangeObjectで返されるとあります では、RangrObjectとは セルの場所、値、色、文字のフォント、文字の色、文字の大きさ 書式・・・・・など、セルを構成している要素の集まりです セルの各要素の取出す方法として RangeObjectの後に要素名(プロパティ)で取出すことが出来ます 場所=Range("A1").Addres 値=Range("A1").Value 文字の色=Range("A1").Font.Color などなど 要素も取出されてしまうと、ただのデータ(文字列、数値など)です 質問に有る下記の一部分はエラーになることが分ると思います >(1) d = c.Address cと言うRangeObujectからAddress要素を取出して dへ代入されているので、dはRangeObujectでは無く文字列です >(2) Set e = d SetはObjectを変数に代入するためのコマンドです Object変数eへ文字列を代入しようとしているので 型が一致しないと怒られます >(3) Debug.Print d.Value これも、文字列に要素、値は存在しないので オブジェクトが無いと怒られます この辺を理解できれば、御自分で修正できると思いますよ 参考まで

crtlcdpdpel
質問者

お礼

silverfdさん、オブジェクト、range、型に関して詳細にご説明いただきありがとうございました。理解できました。もっと注意深くステップを踏んでゆきます。変更したソースではtom11さんの例とrange(d)・・・の両方を使わせていただきました。ありがとうございます。

  • silverfd
  • ベストアンサー率57% (204/356)
回答No.1

>(1)でヒットしたセルのアドレスをD(stringで定義)してそのまま、offset(0,1).valueとしようとしたのですが、offsetはオブジェクトでないと使用できないとの事。 だったら、eをオブジェクトで定義(dim d as object)として実行したら、= dで型が一致しませんとエラーがでました。 cは最初からRangeObjectなわけですよ、c.offset(0,1).value(CはObject)で読めるものを、何でわざわざdを使ってd=c.address(adressはString型)に変換して読めなくしているの?しかも、それ(d=string型=ただの文字列)をただ”=”(イコール)で何もしないでeオブジェクトにきるわけがないでしょう。dは、ただの文字列(例えば、"$A$5"という文字)ですよ。dをaddressとしてcのアドレスを取得してそれを使うなら、range(d)でこれがRangeObjectですから、dを使いたいならrange(d).offset(0,1).value。あと、別途eを使いたいなら、set e=Range(d) もうひとつやりたいこと、の方ですが、「 dで型が一致しませんとエラーが」がパスしない以上、通るわけがないんですが。で、上記で通るようになれば、textbox1=range(d).valueとかでできるはずです。無論d.valueなんていう表現をシステムは理解できませんので(何度も言いますが上記ではdはただの文字列であり、セルの取得なんてそのままでは絶対にできない)TextBoxに表示できるものはなく、エラーになります。 全体的に、文法のレベルと理解のレベルが合っていません。withなんてもっと慣れてから使えばいいと思います。型については、ほとんど理解できていないレベルです。変に(無理に)変数を使う前に、極力そのまま理解しやすい形でコーディングをして、もっと慣れてから変数を利用した方が、上達すると思いますよ。

crtlcdpdpel
質問者

お礼

hige_082さん、silverfd同様、オブジェクトに関して詳細にご説明いただきありがとうございます。私のこれまでのオブジェクトの知識は浅かったので、更に深くなりました、ありがとうございました。 ご解答いただいたみなさま、お忙しい中、ホントウにありがとうございました。

関連するQ&A