Excel UDFには最終行取得関数がないからAutoIt使えない!なんてことはありません。ワークブックのハンドルさえ取得できればVBAな書き方で出来ます。
最近は$wbook = _Excel_BookOpen($oExcel, “test.xlsx”)で取得したらVBA検索して書いています。WebDriverを通してネットに接続、PDFも印刷など、他のアプリも連携させたロボット作ることがあるので、VBAよりAutoIt使うほうが自分には合っていますね。
1. まずは_Excel_Open(), _Excel_BookOpen()でワークブックハンドル取得
Excel UDF使ってもいいので$oexcel, $wbookを取得します。
#include <Excel.au3> $oexcel = _Excel_Open() $wbook = _Excel_BookOpen($oexcel, "ファイルパス")
2. VBA Excel 最終行 などでググって見つけたソースを使う
「VBA Excel 最終行」でググると記事が出てきます。
どうやら、End()という関数を使い、「A列の最後」のように指定するらしいです。
ただ、途中空白があるとそこがEndになるので「A65535から上に調べる」的な事やったりするらしいです。見つけてやったのが下記。Rangeからはほぼ同じで書けます。
VBAでは MaxRow = Range("A65536").End(xlUp).Row AutoItでは $MaxRow = $wbook.Sheets(1).Range("A65536").End(-4162).Row
2.1 xlUpとかはAutoItでは定義されていないので定義するか数値そのまま
Excel UDFではxlUpとかは定義されていないので、自分で定義してもよし、数値そのままでも良しです。XLDirection enumeration(Excel)です。
- xlDown -4121 下方向
- xlToLeft -4159 左方向
- xlToRight -4161 右方向
- xlUp -4162 上方向

3. 列も同様。1行目右列を指定してxlToLeft(-4159)を指定
先ほどの行のコードから、最後行->最終列(IV1とかAL1とか)指定して、Row->Column、xlUp->xlToLeftにする
$maxcol = $wbook.Sheets(1).Range("AL1").End(-4159).Column ConsoleWrite("maxcol=" & $maxcol & @CRLF)
4. XlDirectionをAutoIt用に定義
インストールフォルダ\Include\ExcelConstants.au3を真似して、定義してもいいかもです。
Global Const $xlDown = -4121 Global Const $xlToLeft = -4159 Global Const $xlToRight = -4161 Global Const $xlUp = -4162
5. データを取得するにはCells()を使うと便利
最終行$maxrow, 最終列$maxcol を取得できたので、$wbook.Sheets(1).Range(“A1:C9”).Value というように取得したいんですが、$maxcolが数字なので、アルファベットに変換しなければなりません。
Cells($maxcol, $maxrow)を使います。
5.1. VBAだとCells()だけど、AutoItでは$wbook.Sheets(1).Cells()と指定する
VBAとかだと、Cells(col,row)の書き方でいいですが、AutoItではそうはいきません。(With使えば出来ますが)
$wbook.Sheets(1).Cells($maxcol, $maxrow) と書きます。
なので、Range(“A1:D8”)の場合はRange(Cells(1,1), Cells(8,4))という感じになります。
$datalist = $wbook.Sheets(1)Range($wbook.Sheets(1).Cells(1,1), $wbook.Sheets($maxcol,$maxrow)).Value _ArrayDisplay($datalist)

6. 参考リンク


コメント