Excelの最終行のindex取得方法

excelの最終行の次の行に文字列をセットしたくなることはよくあります。
簡単に最終行のindexを取得する方法は何かあるでしょうか?
いったん、DataTableに読み込んでDT.Rows.Countといった方法もあると思いますが
これも少々めんどくささを感じます。

ご指導よろしくお願いいたします。

@196006
DataTable以外なら、以下の2つ方法があると思います。
① Ctrl + ↓ を使う
② CustomActivityを使う

@ Doanh さんから案内があったカスタムアクティビティ使ってみました。

EXCELアプリケーションスコープ内で使用するアクティビティではなく、ファイル名を指定するタイプのアクティビティでした。

最終行以降の値を埋め込むなどの後続処理があるとすれば、EXCELアプリケーションスコープをお使いになるでしょうから、面倒くさくても、DataTable型がいいかな?ってのが小生の感想です。

無論、ロボット仕様にあっては、カスタムアクティビティでの実装が適するでしょう。

こんにちは

実装対象の制約やロジック次第かと思います。
もともとDataTableを使ってWriteRangeするような場合は、行追加するだけになりますので、そもそもindexを意識しなくてもよいかもしれませんし、個別にWriteCellするならDataTable.Rows.Count()が有力かと思います。
これ以外にも各列でデータの最終行が異なる場合は、Read Columnアクティビティで得たコレクションのCount()を取る案もあります。
また元のExcelのファイルをあらかじめ設計・編集できるなら、指定のアドレスを算出する関数をどこかのセルに仕込んでおくのも一案かと思います。

説明不足で申し訳ございません。
やりたいことは、「作ったそれぞれのロボットから特定のexcelファイルにLOGを出力する」と
いったことです。
LOGなので ”特定シートの最終行の次の行(空白行)に文章を追記する” といったことです。

「ExcelWriteCell」アクティビティの範囲プロパティにセルのインデックスが必要なので
スマートな方法があるのかなぁと思って質問させていただいた次第です。

@196006

根本的なところなので不可能そうであれば無視して頂いてよいのですが、
ログが目的であればCSVを使う方がよいと思います…
CSVであればお悩みの問題も解決するかと思います。

【メリット】
・Excelより安定性がある
→どの程度起動するロボットかわかりませんが、起動回数が多いのであればこのメリットは
大きいと思います
・ UiPath.Core.Activities.AppendLineで入力ができる
→これが一番大きいですね。一番後ろの行に何もせず追加してくれます

冒頭でも書いた通り、もうすでに運用している場合等、不可能な場合もあると思いますが
ご参考まで。

Excelで行う、かつDatatableをカウントしたくないという事ならこちらを参考に、
セルを縦にループで移動して空のセルに入力するとかですかね…

折も折、 ytakayama さんのナレッジを共有しますね。

UiPathTeam.Excel.Activities

ってアクティビティがあって、ここには、「最後のセル位置を取得」アクティビティってのがあって、まさに最後のセルのアドレスを取得してくれます。

”C10"とかこんな風に。ここから、英字部分を除去すれば最終行は取得できますね。

1 Like

私もこのアクティビティが使えるなら、、とちらっとおもいました笑

「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」をONにしないといけないのが、問題ないかどうかですね、、

ソース: 最初のセル位置を取得 (VBA実行)

メッセージ: プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます

こんなエラーかぁ。。。自分もVBA作る方でもあるので、常時ONでした(^^♪

ytakayama様
いつもご指導ありがとうございます。
AppendLineは良さそうです。
自動で一番後ろに追記が良さそうです。
使っていきます。

1 Like

Doanh様
ご指導ありがとうございます。
CustomActivityに興味あります。
調査します。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.