表が2つあるExcelシートに対して
- データの読み込み
- データの削除
- データの追記
などをどのように実装できるかを、各アクティビティの挙動を見ながら考えていきます。
今回は、最終行数の取得について。
サンプルとして使うExcelは、次のようなもの。
※表が2つあるときはヘッダ行が1行目にないことも多いので、そのようなケースを想定しています。

前回
VBAを使って取得する
表が2つあり、2行目以降にヘッダがある場合、「RowCount」の挙動についてで見たように、「RowCount」 や「最初/最後のデータ行を検索」 ではうまく行数をカウントできないケースが発生します。
また、表の途中に空白のセルがある場合も考慮すると、ロジックを考えて実装するよりもVBAマクロを呼び出して最終行数を取得するほうが確実です。
※2025年8月24日追記
「最初/最後のデータ行を検索」アクティビティでも最終行を取得することができましたので、ページ下部に追記いたしました。
方針
今回は、[VBAを呼び出し]アクティビティを使ってVBAを実行します。
この[VBAを呼び出し]は、VBAコードが保存されたテキストファイルが必要になりますので、まずはじめに作成しておきます。
1.最終行数を取得するVBAコードをテキストに保存
実行するVBAコードは下記になります。
※VBA経験者であれば、同様のものを見たことがあるかと思います。
今回は、共通パーツとして使えるように、引数にシート名と基準となる列を指定する形で作成しました。
Function ReturnLastRow(ByVal SheetName As String, ByVal TargetColumn As String) As Long
Dim WorkSheet As WorkSheet
Set WorkSheet = ThisWorkbook.Sheets(SheetName)
ReturnLastRow = WorkSheet.Cells(Rows.Count,TargetColumn).End(xlUp).Row
End Function
このコードをテキストファイルに保存します。
戻り値のデータ型について
VBAのデータ型の範囲は
- Integer型:-32,768 〜 32,767(2バイト分の領域)
- Long型:2,147,483,648 〜 2,147,483,647(4バイト分の領域)
一方で、Excel(.xlsx)は、最大で1,048,576行であるため、戻り値をInteger型にしてしまうとオーバーフローが発生する可能性があります。
また、UiPath(.NET)のInt32型の範囲は、VBAのLong型と同じ2,147,483,648 〜 2,147,483,647(4バイト分の領域)になります。
2.[VBAを呼び出し]アクティビティを設定
[VBAを呼び出し]は、Excelプロセススコープ内の[Excelファイルを使用]アクティビティの中で使用します。
各プロパティには、次のように設定します。
- 対象のブック:[Excelファイルを使用]で設定した参照名
- コードファイルパス:呼び出したいVBAコードが書かれたテキストファイルのパス
- エントリメソッド名:呼び出したいマクロ名
- 出力:マクロからの戻り値を格納する変数
- 引数:マクロに渡す引数の値
※「VBAの引数を追加」をクリックすることで設定できる
3.トラストセンターの設定を確認(Excel)
UiPathの実装は以上になりますが、[VBAを呼び出し]を使うにあたって、Excel側でマクロに関する設定をする必要があります。
この設定をしていないと、フロー実行時にエラーが発生します。
(設定手順)
[ファイル] > [その他…] > [オプション] > [トラスト センター] > [トラスト センターの設定] > [マクロの設定] > [VBA プロジェクト オブジェクト モデルへのアクセスを信頼する] チェック ボックスをオン

設定していないときのエラー内容
※エラーメッセージでは、「セキュリティセンター」となっていますが、いまは「トラストセンター」に変わっています。

実行結果を確認
返ってきた値をログ出力してみると、「14」と表示されました。
指定した列の最終行数がきちんと取得できていることが確認できます。
追記:[最初/最後のデータ行を検索]アクティビティで最終行を取得する
プロパティの設定を次のようにすることで最終行を取得できます。
- ソース:最終行を取得したいテーブルの開始セルをRangeで設定
- 先頭行をヘッダーとする:チェックを外す
- 列名:列名称(A,B,C,…)を設定
※途中に空白の行があっても、最後にデータが存在する行(ここでは14)を返します。
次回
参考
(VBAのデータ型について)
(Int32の最大値について)



