AutoIt Excel データがある最終行・最終列数を取得する

autoit excel 最終行取得 vba Excel

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 上方向
xldirection 列挙 (Excel)

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)
Cells プロパティ (Excel)

6. 参考リンク

xldirection 列挙 (Excel)
No.8 ワークシートの最終行、最終列を取得する
No.8 ワークシートの最終行、最終列を取得する
Cells プロパティ (Excel)

コメント

タイトルとURLをコピーしました