エクセルでフォーカスの合っているセルの行番号を取得したい

あるファイルの更新で、特定のエクセルの行の一部カラムに書き込む処理があるのですが、
環境の都合上、LookUpDataTableやDo While等を使うと処理に何倍もの時間がかかってしまいます。
その為、比較的動作の軽く安定している下記手順にてセルの特定をしています。
①エクセルを開く
②Read Rangeにて該当シートまで遷移する
③Send hotkeyにて『Ctrl + F』で検索ウィンドウを立ち上げる
④シート内で一意の値を入力
⑤Send hotkeyにて『Esc』を押して検索ウィンドウを閉じる
⇒処理したいセルが選択された状態になる
ここで選択されている行数を取得して変数に格納し、
その変数を利用して書き込みやSet Range Color 等の作業を実施したい

説明が見づらくわかりにくくて申し訳ございません。
不明点やヒント、何か思いつくことなどございましたらコメントいただけると幸いです。

以上、宜しくお願い致します。

あまり美しくないのですが。。。
Excelの左上にある[名前ボックス]というセル選択位置を表示する欄がありまして、これを利用するのではどうでしょうか?
ざっくりアクティビティとしては、[Click]で選択、[Send Hotkey(Ctrl+a)]で文字列選択、[Send Hotkey(Ctrl+c)]でクリップボードにコピー、[Get From Clipboard]で文字列を変数に格納、先頭文字を行番号と判断、ってな感じです。。

シート内で一意の値であるのであれば、
シートすべてをRead Rangeで読み取ったdatatableを直に検索すればよいのではないでしょうか?

サンプルコードを書いている余裕が無いのですが、
方針としては以下で良いのではないでしょうか?

yukino様

度々ご回答くださいまして大変助かっております。
なるほど、直感的にはそのやり方も悪くなさそうですね…。
週明けにExcelに表示される値そのものを取得できるか、試してみたいと思います。

一先ず、お礼とさせてください!
今後とも、どうぞよろしくお願いいたします。

canse様

度々のご回答、ありがとうございます。
ご指摘いただいた通り、datatable型を利用して該当データを検索する方法でも試していたのですが、
実施にかなりの時間を要するのと、上手く変数を取得できない状況にある為、
その他にやり方はないかを調べさせていただいたところでした。

頂いたやり方でももう少し原因を探ってみます。
一先ずのお礼とさせてください。

以上、宜しくお願い申し上げます。

1 Like

yukino様

先日はご回答くださいましてありがとうございました。
大変恐縮なのですが、更問をさせてください。
お教えいただいた最後の『先頭文字を行番号と判断』について、
実施方法や使う機能等、お教えいただけないでしょうか。

当方としてはとった値(例:E35)の行番号(35)のみを取得できれば、
それを使って値入力や色付け等に活用(”A” + 行番号 のような形で)できるのでは、と考えております。

お時間がありましたらご回答の程、
何卒宜しくお願い申し上げます。

横から失礼します。

私も以前、シート内で一意な文字列があるセルの位置を取得するときに少し手間取った経験がありました。

まず初めに検索から対象のセルに飛び
@yukino 様のおっしゃる[名前ボックス]からセル 位置を取得する方法がシンプルかと思ったので試しましたが、動作が安定せず断念しました。
(下記の方法で回避できたので理由について追及はしてません)

その時は、検索ウィンドウの[すべて検索]ボタンを押したときに出てくるリストからセル位置を取得しました。
(下図を参照してください)

このプロセスを実行したのは半年以上前ですので、今時点でもっと最適な方法があるかもしれません。

とはいえ参考になればと思い共有させていただきます。
Excelファイルのフォーマットによりますが、datatableで検索する方法が確実かなと思います。

2 Likes

直近の UiPath.Excel.Activities (2.5.2で確認)では、
[選択範囲を取得](Get Selected Range) アクティビティで選択中のセル位置を文字列として取得できるので、
このような処理はもっと簡単に実現できます。

yukino様

ありがとうございます!
私も最近知りました…。使わせてもらっています!
今後さらにExcelでの操作が増えてくれることを期待したいですね。

1 Like