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
解決策ではないのですが,
>VBAでは、Cells.Find(What:="abc").Rowで取得できるので
とあるのですが,今Excel VBAのヘルプで調べたらFindメソッドの
対象はRangeオブジェクトになっているようですが...
失礼しました.
>対象は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
です.
Mr.XRAYさん有難う御座います。
大変申し訳ありません。
単なる検索文字列が無かった為でした。
が、該当文字列が無かったら次のシートを同じように検索
したいのだが、、、、、
また、躓きそうだ。。。
お手間かけてしまいすみませんでした。
有難う御座いました。。
Findの引数を複数指定したい場合は、
どのようにするのでしょうか?
A:=WorkSheet.Cells.Find(What:='ABC', LookIn:='xlValues').Row;
で検索したいのですが、検索できません。
VBAでは問題無いのですが、、、、
Findの引数のLookInは、デフォルトがxlFormulasのため、=Sheet1!A1の
様に式になっていると、検索できないため。
宜しくお願い致します。
Mr.XRAYです.
>VBAでは問題無いのですが、、、、
本当ですか? (LookIn:='xlValues') ??
xlValuesというのはExcel VBAの定数なんですが,''で括っても
大丈夫なんですか.知りませんでした.
それで,何をどのように検索したいのでしょうか.
そして,検索できないということは,何かエラーが発生したのですか.
それとも何も表示されないとかですか.
おっとどっこいさんの目の前で起きていることがわかれば多少は...
LookIn:=1というように数字で指定すればよいのでは...
Mr.XRAYさん有難う御座います。
>>VBAでは問題無いのですが、、、、
>本当ですか? (LookIn:='xlValues') ??
この部分ですが、VBAでは''で囲みません。
説明に不備がありました。
すみません。
A:=WorkSheet.Cells.Find(What:='ABC', LookIn:=xlValues).Row;
(''なし)
でコンパイルすると
未定義の識別子:'xlValues'のエラーになります。
'xlValues'のようにすると、
コンパイルはパスしますが、実行すると
RangeクラスのFindメソッドが失敗しました
のエラーになります。
よろしくお願い致します。
takapiさん有難う御座います。
見て納得。。
LookIn:=1で出来ました。
番号を使うと言う事を、思いつきませんでした。。
有難う御座いました。
Findメゾットで検索文字列がシートに無かった場合に
それをDELPHIで判断させる方法がわかりません。
どなたかご存知の方、教えてください
すみません
上記は追加発言ではありませんでした
無視してください。ごめんなさい
おっとどっこいさん.
>RangeクラスのFindメソッドが失敗しました
>のエラーになります。
これは,xValuesという定数が利用できないためじゃないかと思います.
それで,takapiさんの発言のように,具体的に数値で指定すると動作
するわけです.
使用環境にもよりますが,usesにExcel2000を追加すると,認識してくれ
るかも知れません.
ツイート | ![]() |