Excel最終行の取得方法 (RPA)初心者

いつもお世話になっております。
Excel最終行の取得について、少しばかり混乱してしまったためご教示いただきたいです。

理想の形としまして、
rc(変数) = wb(ファイルパス変数).worksheets(“シート名”).cells(4,8).end(-4121).row
上記はVBAの記述式で最終行を取得しておりますが、Uipathでも同様に行いたいと考えております。
どのアクティビティを使用すれば上記のような形になりますでしょうか。

また、cells(4,8)を起点とし、Offsetで移動させて空白に値を入力する方法もご教示頂けたら幸いです。
※入力する値は変数で格納してあります。

以上、よろしくお願いいたします。

いつもお世話になっております。

UIPATHで最終行番号を取得方法は以下の手順をやってみてください。
① 「範囲を読み込む」アクティビティを利用し、プロパティの設定:
範囲:「”D8”」
ヘッダーの追加: チェックする
出力:dtbResult

② 取得したデータテーブルの行数をカウントしましょう。最終行は「dtbResult.Rows.Count + 2」です。

よろしくお願いいたします!

こうなると、「セルの読み込み」で1セルずつ取得するのではなく、「範囲の読み込み」で、DataTable型として扱った方が楽ですね。

例えば、"A1"を基点としたDataTableで、
”H4"セル相当は、DataTableRows(3).Item(7)になります。
行番号、列番号で参照できるので、Offset的な動きが出来ます。

但し、このDataTable中の値を変更しただけでは、シートの同位置のものは更新されません。「範囲を書き込み」辺りで上書きする必要があります

お疲れ様です。

早々のご回答ありがとうございます。
初心者のため回答に対して、いくつか質問させてください。

>② 取得したデータテーブルの行数をカウントしましょう。最終行は「dtbResult.Rows.Count + 2」です。
こちらで最終行を取得する際、どうして「+2」になるのでしょうか。

>このDataTable中の値を変更しただけでは、シートの同位置のものは更新されません。「範囲を書き込み」辺りで上書きする必要があります
DataTableRows(行).Item(列)で位置を探し、書き込みアクティビティで値をいれるという認識であたっておりますでしょうか。

以上、よろしくお願いいたします。

Excelのシートの先頭行は1なのですが、DataTableの先頭行は0なので、+1したり、+2したりしています。+1、+2の差は、先頭行をDataTableの列として利用するかしないかの違いになります。

代入で値をいれ、書き込みアクティビティでDataTableをシートに書き戻す感じですね。ですので、参照するのにはDataTableを利用したいけど、値を直接シート上のセルに書き戻したい!って場合は、DataTableの行(0から始まる)と、列(これも0から始まる)のを、A1系式に変換し、「セルの書き込み」で書き戻す必要があります。

例えば、DataTableの行が0で、列が1だとしたら、"B1"セルあるいは、”B2"になりますね。

お疲れ様です。
回答ありがとうございます。

>例えば、DataTableの行が0で、列が1だとしたら、"B1"セルあるいは、”B2"になりますね。
該当セル一箇所に書き込むことを理想としてますが、範囲アクティビティで行う必要性はあるのでしょうか。

また、dtbResult.Rows.Count + 2の進行方向はExcelでいうところの↑↓←→どちらになりますでしょうか
Rows.Countなので↓に進む認識です。
列の場合はColumでしょうか、、?

また、行数のカウントの際に使用するアクティビティはなにになりますでしょうか。
Forで繰り返すイメージでしょうか。

上記質問について、すでに回答してましたらすいません。

以上、よろしくお願いいたします。

一箇所でしたら、「セルを書き込み」で十分ですね。A1形式で該当セルを指定して。

Rowsは上下方向になります。Columnsのような左右方向は、Itemになります。ここがExcelのRange的な考えとDataTableの考えの違いですね。

行の順次処理に関しては、「繰り返し(行単位」」を使います。For Each で、受け手がDataRow型となります。

※ちょっと使い慣れたFor Ix = 0 To nとは違うので、最初違和感ありましたが、これも結構いいものです(^。^)

お疲れ様です。

書き込みは”最終行”の一箇所ですが、そこから
最終行を起点にOffset(DataTableRows(行).Item(列))で移動して書き込みたい場合でも
セルの読み込みで可能でしょうか。
それとも、範囲でやったほうが効率が良い等ありますでしょうか。
例:最終行取得から行(0)列(1)に値を入れる場合

VBAの記述として以下のようなイメージです
最終行取得
rc(変数) = wb(ファイルパス変数).worksheets(“シート名”).cells(4,8).end(-4121).row
↓↓↓
最終行から移動
Set tsuika = wb.worksheets(“シート名”).cells(rc,8).Offset(1, 0)
↓↓↓
書き込みアクティビティ

>繰り返し(行単位
こちらはデータベース>繰り返し(各行)で間違いないでしょうか。
※繰り返しアクティビティが多くて少し混乱しております。

現在、要素「row」コレクション「DataTable01.Rows.Count+2」
としておりますが、エラーで動きません
入れる値を間違えているのでしょうか
【エラー】
Integer型をDataTableに変換できません。

以上、よろしくお願いいたします。

最終行のH列のセルに追記していくのでしたら、
書き込みアクティビティの「範囲」に「“H” & rc.ToString」でいけます!

繰り返しアクティビティでは、配列的な変数を指定して、それを一つ一つ処理するものです。ですので、DataTable01.Rows.Count+2は整数型なので、NGです。設定するとしたら、DataTable01だけですね。

繰り返しアクティビティには、現在のインデックスと言う設定があって、ここには配列的な変数の何番目を処理しているかの情報が入ります。ですのでInt32の例えばixと指定します。

合わせると、

書き込みアクティビティの「範囲」に「“H” & (rc + ix).ToString」でいけます!(多少のズレは±してくださいませ)

お疲れ様です。

上記を参考に安直なプログラムを書いてみましたが
本エラーはどのようにして解決できますでしょうか。
なにか、定義、前処理がいるのでしょうか。
【エラー】
セルに書き込み:範囲437は存在しません。

現在の記述
範囲を読み込み
「”シート名”」「”H4”」

代入
「cnt」=「DataTable01.Rows.Count+2」

セルに書き込み
「シート名」「cnt.ToString」
「入れたい値が入っている変数(tuika)」

以上、よろしくお願いいたします。

セルに書き込みの範囲指定が、A1形式ではなく、ただの数字になっちゃっていますねo

お疲れ様です。

回答ありがとうございます。
そうなんですね(;‘∀’)
取得はできてるけど、A1形式に変換できていないといったところですか、、、
自分もFor 変数 = 0 To n
で慣れてしまっているので混乱していますorz

はなっちさんのおっしゃっているInt32のixは変数ですか?
メソッドとかですか?

繰り返しアクティビティには、現在のインデックスと言う設定があって、ここには配列的な変数の何番目を処理しているかの情報が入ります。ですのでInt32の例えばixと指定します。

また、繰り返しアクティビティは現在
繰り返し(各行)を使用してますが、はなっちさんのいうアクティビティと同じでしょうか。

以上、よろしくお願いいたします。

で、ございます!

image

image

お疲れ様です!

ご教示いただいたやり方でできました!
ありがとうございます。

しかし、少し問題が、、、
追加はされるようになりましたが、ループをずっと繰り返してしまい停止を押さないとずっと記述しつづけてしまいます。
これを抜ける方法はありますでしょうか。

記述として、以下方法で行っております。
範囲を読み込み
「”シート名”」「”H4”」

代入
「cnt」=「DataTable01.Rows.Count+5」
※ExcelとDataTableに合わせるため+5

繰り返し(各行)
要素「row」コレクション「DataTable01」

セルに書き込み
「シート名」「“H” &(cnt+ix).ToString」
「入れたい値が入っている変数(tuika)」

んー。こればっかりは、「DataTable01」の件数を確認してくださいとしか…

範囲を読み込みで、‘A:A‘とやると、シートの全行を読み込むので、注意が必要です

お疲れ様です。

早々の回答ありがとうございます。
DataTable01の件数が関係するんですね。
少し調べてみます。
ありがとうございました。

ちなみに、現在、範囲は”H1”で位置づけして
cnt = DataTable01.Rows.Count+1で最終行を求めてます。

セルの書き込みがループする理由について、
判定条件と繰り返しをブレークでできないかと思いましたが
可能でしょうか。(;‘∀’)

「繰り返し(行単位)」アクティビティの中に「Break」アクティビティ(和名失念)をいれると、そこでブレークできます。

あと、範囲を読み込みで、「”シート名”」「”H4”」指定だと、H4セルから、EXCELシート上の最終セルまで読み込みます。それが原因だとすると、「Break」アクティビティで制御する方が理解しやすいかもしれませんね。

Hi @r-chinen,

To get the last row of excel, you can use the activity called “Find Last Row”.

Here is the video presentation…

Thank you
Balamurugan.S

Thank you men.(`・ω・´)ゞ
Does Find LastRow require a download?
By default, there was no activity.

Do you take any money?

いつもお世話になっております。

Breakアクティビティを使用してとりあえず、理想の形で記述できました。!
ありがとうございます><
※無理やりBreakで抜けてるので例外処理等々を考える必要がありますが、、、

すいません。
最後の質問になります。1週間前の話に戻ってしましますが、
はなっちさんがおっしゃっていた
>”H4"セル相当は、DataTableRows(3).Item(7)になります。
>行番号、列番号で参照できるので、Offset的な動きが出来ます。
こちらのOffsetの記述(DataTableRows(3).Item(7))はどのアクティビティに
記述すれば動きますでしょうか。

お手数ですが、ご回答のほどよろしくお願いいたします。