アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

最大の行数・列数を求める

最大の行数・列数を求める


  VBA でマクロを組む場合、セルの操作を For ループ等で廻して処理するのが一般的
  だと思います。

  その時に最大の行数や列数をカウントできなければ、汎用性の高いアプリケーションを
  作成できません。

  その方法について、いくつか紹介します。

  Excelの最大行数は 64K 65,536 となっています。

  以下は、A列の最後の行から上に向かって空白でないセルを探します。

Function EffectiveRow() As Long
'  行の最大数を求める  A列固定
'  Excelの最大行数(65536)から上方向(xlUp)に空白でないセルを探す
   EffectiveRow = Range("A65536").End(xlUp).Row
End Function



  以下は列・行を変数にしたり、WookBook、Sheet を指定できるようにしたものです。
      
Function EffectiveRow_AssingColum(Col) As Long
'   行の最大数を求める  Colは文字列 "A"
'   Excelの最大行数(65536)から上方向(xlUp)に空白でないセルを探す
    EffectiveRow_AssingColum = Range(Col & "65536").End(xlUp).Row
End Function

Function EffectiveRow_AssingColum_No(Col) As Long
'   行の最大数を求める  Colは数字
'   Excelの最大行数(65536)から上方向(xlUp)に空白でないセルを探す
    EffectiveRow_AssingColum_No = Cells(65536, Col).End(xlUp).RowEnd 
Function

Function EffectiveColumn() As Long
' 列の最大数を求める   1行目固定
' Excelの最大列数(256)から左方向(xlToLeft)に空白でないセルを探す
  EffectiveColumn = Cells(1, 256).End(xlToLeft).Column
End Function

Function EffectiveColumn_AssingRow_No(Row) As Long
' 列の最大数を求める  Rowは数字
' Excelの最大列数(256)から左方向(xlToLeft)に空白でないセルを探す
  EffectiveColumn_AssingRow_No = Cells(Row, .End(xlToLeft).Column
End Function

Function EffectiveRow_SheetSelect(Work_book,Work_sheet,xRow) As Long
'   行の最大数を求める
'   xRowは "A" のA1参照形式
'   Excelの最大行数(65536)から上方向(xlUp)に空白でないセルを探す
    EffectiveRow_SheetSelect = Workbooks(Work_book). _
            sheets(Work_sheet).Range(xRow & "65536").End(xlUp).Row
End Function




  上記は最大行(65536)または最大列(256)から順番に空白のセルは探す方法で、
  ちょっとかったるい気がする人もいると思います。
  こんな方法もあります。

Function LastCell_Address() As String
    ' 最終セルのAddress
    LastCell_Address = ActiveSheet.Cells.SpecialCells(xlLastCell).Address
End Function

Function LastCell_Row() As Long
    ' 最終セルのRow 番号
    LastCell_Row = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
End Function

Function LastCell_Column() As Long
    ' 最終セルのColumn 番号
    LastCell_Column = ActiveSheet.Cells.SpecialCells(xlLastCell).Column
End Function

  この方法は欠点?があります。

  example2 の Sheet1 の G26 に何か入力して、test6 を実行してください。

  結果は $G$26 になります。

  次に、G26 の内容を消します。[Backspase] key を押します。

  test6 を実行すると、結果やはり $G$26 です。

  一度「課題2マクロ」を保存してもう一度開くと元に戻ります。

  こういう仕様なんでしょうが、ちょっと使いづらいですね。




Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.