はじめに
この投稿は、RPAツール「UiPath」でExcelの最終列/最終行を取得する方法についての記事です。
この記事は、UiPath Friends もくもく会 2021年5月開催 2021-05-22(土)08:45 - 12:00
で書きました。
幾つかある方法
VBAだと、
VBAで良くある例
最終行:Cells(1, 1).End(xlDown)」 '// 下に移動する
最終列:Cells(1, 1).End(xlToRight).Column '// 右に移動する
のように「指定位置から下または右へ移動」して取得するのが王道ですが、UiPathでは、方法が取得方法が幾つかあります。
1)範囲を読み込みアクティビティの行数列数から求める
「範囲を読み込み(ReadRange)」アクティビティでシート全体を読み取り、データテーブルの行数(rows.Count)または列数(columns.Count)から最終列・最終行を計算します。UiPathのフローだと以下のような感じです。
列名は計算式で列数から求められます。
ただし、この方法は以下のような「表位置が左上では無い」場合は「ズレてしまう」ので、そのまま取得できません。
(先頭行が列名ではない。先頭列が空白になっている)
以下に確認しやすいように、以下にxaml形式でアップしました。
2)コードを呼び出し (Invoke Code) アクティビティで実行
VBAで良くある例の
VBAで良くある例
最終行:Cells(1, 1).End(xlDown)」 '// 下に移動する
最終列:Cells(1, 1).End(xlToRight).Column '// 右に移動する
をUiPathで実施します。「VBA を呼び出し (Invoke VBA)」アクティビィティでも良いのですが、ここでは「コードを呼び出し (Invoke Code) アクティビティ」で VB.NET で記載します。
'// 起点から右下セルを取得する
'// 入力引数 - firstPosition : 起点となる開始セル(例:B2)
'// 出力引数 - lastPosition : 結果セル(例:E2)
Dim ap As New Microsoft.Office.Interop.Excel.Application
Dim wb As Microsoft.Office.Interop.Excel.Workbook
Dim firstCell, lastColCell, lastRowCell As Microsoft.Office.Interop.Excel.Range
Try
wb = ap.Workbooks.Open(bookPath)
For sidx As Integer = 1 To wb.Sheets.Count
Dim ws As Microsoft.Office.Interop.Excel.Worksheet = CType(wb.Sheets(sidx), Microsoft.Office.Interop.Excel.Worksheet)
If ws.Name = sheetName Then
firstCell = CType(ws.Range(firstPosition), Microsoft.Office.Interop.Excel.Range)
lastColCell = firstCell.End(Microsoft.Office.Interop.Excel.XlDirection.xlToRight)'// 右移動
lastRowCell = lastColCell.End(Microsoft.Office.Interop.Excel.XlDirection.xlDown) '// 下移動
lastPosition = lastRowCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Exit For
End If
Next
wb.Close
Catch ex As Exception
Console.writeLine(ex.ToString)
Throw(ex)
Finally
If Not(wb Is Nothing) Then wb = Nothing
ap = Nothing
End Try
以下に確認しやすいように、以下にxaml形式でアップしました。
その他
他に「画面操作で位置取得する方法」もありますが、ホットキーを押下 (Send Hotkey) を伴うため操作の邪魔が入ると取得できないことがあります。
また、画面操作せずに「範囲を読み込み(ReadRange)」アクティビティを駆使して実施する方法もありますが、ココでは割愛します。(時間が出来たら書きます)
終わりに
いかがでしたでしょうか。表取得で困った時に、方法の一つとして役立てば幸いです。
この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。