セルの検索


おっとどっこい  2003-09-24 03:30:46  No: 4970

DelphiからExcelの操作を行っております。
セルを指定してそのセルの値を得ることは出来るのですが、
値を検索して、一致したセルのRowとColを取得する方法が
判りません。
VBAでは、Cells.Find(What:="abc").Rowで取得できるので、
これを参考に下記のようにしてみましたが、駄目でした。
方法をご存知の方がいましたら教えてください。

下記サンプルコード
  ExcelApp := CreateOleObject('Excel.Application');
  ExcelBook := ExcelApp.WorkBooks.Open('c:\test.xls', False);
  ExcelSheet := ExcelBook.WorkSheets['sheet1'];
  ExcelRow := ExcelSheet.Cells.Find(What:='abc').Row;  //<<ここでエラー

  Find(What:='abc')の部分が、悪いのではないか??と勝手に推測。。

環境  Win2k + delphi5ProJ


Mr.XRAY  2003-09-24 09:09:19  No: 4971

解決策ではないのですが,

>VBAでは、Cells.Find(What:="abc").Rowで取得できるので

とあるのですが,今Excel VBAのヘルプで調べたらFindメソッドの
対象はRangeオブジェクトになっているようですが...


Mr.XRAY  URL  2003-09-24 09:45:33  No: 4972

失礼しました.

>対象はRangeオブジェクトになっているようですが...

セルはワークシート全体のRangeとなっているんですね.
知りませんでした.

それなら,VBAの通り

A:=WorkSheet.Cells.Find(What:='ABC').Row;
ShowMessage(A);

で検索できるはずです.いや検索表示できました.当方では.
(ABCは検索文字列.AはVariant)
Excelの操作コードは
http://homepage2.nifty.com/Mr_XRAY/Others/OleObject_for_Excel1.htm
です.


おっとどっこい  2003-09-24 17:30:12  No: 4973

Mr.XRAYさん有難う御座います。

大変申し訳ありません。
単なる検索文字列が無かった為でした。

が、該当文字列が無かったら次のシートを同じように検索
したいのだが、、、、、

また、躓きそうだ。。。

お手間かけてしまいすみませんでした。
有難う御座いました。。


おっとどっこい  2003-10-01 02:58:09  No: 4974

Findの引数を複数指定したい場合は、
どのようにするのでしょうか?

A:=WorkSheet.Cells.Find(What:='ABC', LookIn:='xlValues').Row;
で検索したいのですが、検索できません。
VBAでは問題無いのですが、、、、

Findの引数のLookInは、デフォルトがxlFormulasのため、=Sheet1!A1の
様に式になっていると、検索できないため。

宜しくお願い致します。


Mr.XRAY  URL  2003-10-01 07:31:43  No: 4975

Mr.XRAYです.

>VBAでは問題無いのですが、、、、

本当ですか? (LookIn:='xlValues') ??
xlValuesというのはExcel VBAの定数なんですが,''で括っても
大丈夫なんですか.知りませんでした.

それで,何をどのように検索したいのでしょうか.
そして,検索できないということは,何かエラーが発生したのですか.
それとも何も表示されないとかですか.

おっとどっこいさんの目の前で起きていることがわかれば多少は...


takapi  2003-10-01 17:12:46  No: 4976

LookIn:=1というように数字で指定すればよいのでは...


おっとどっこい  2003-10-01 17:18:15  No: 4977

Mr.XRAYさん有難う御座います。

>>VBAでは問題無いのですが、、、、
>本当ですか? (LookIn:='xlValues') ??
この部分ですが、VBAでは''で囲みません。
説明に不備がありました。
すみません。

A:=WorkSheet.Cells.Find(What:='ABC', LookIn:=xlValues).Row;
(''なし)
でコンパイルすると
未定義の識別子:'xlValues'のエラーになります。
'xlValues'のようにすると、
コンパイルはパスしますが、実行すると
RangeクラスのFindメソッドが失敗しました
のエラーになります。

よろしくお願い致します。


おっとどっこい  2003-10-01 17:25:04  No: 4978

takapiさん有難う御座います。

見て納得。。
LookIn:=1で出来ました。
番号を使うと言う事を、思いつきませんでした。。

有難う御座いました。


takapi  2003-10-01 21:47:36  No: 4979

Findメゾットで検索文字列がシートに無かった場合に
それをDELPHIで判断させる方法がわかりません。
どなたかご存知の方、教えてください


takapi  2003-10-01 21:57:39  No: 4980

すみません
上記は追加発言ではありませんでした
無視してください。ごめんなさい


Mr.XRAY  URL  2003-10-02 02:36:38  No: 4981

おっとどっこいさん.

>RangeクラスのFindメソッドが失敗しました
>のエラーになります。

これは,xValuesという定数が利用できないためじゃないかと思います.
それで,takapiさんの発言のように,具体的に数値で指定すると動作
するわけです.

使用環境にもよりますが,usesにExcel2000を追加すると,認識してくれ
るかも知れません.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加