利用されている最終列の取得

利用されている最終列を取得する。

VBAで利用されている最終列を取得するには下記の2つの方法があります。
 ・Endプロパティを利用
 ・SpecialCellsメソッド、UsedRangeプロパティを利用

Endプロパティでは指定したセルを起点として、引数に xlToRight もしくは xlToLeft を指定して利用されている最終列を取得できます。
xlToRight を指定した場合は右方向に値が入力されている最終列を取得できます、ただし途中で空白列があるとそこまでしか取得できません。
なので、実際に値の入力されている最終列を取得したい場合は Excelで扱える最終列(Excel2016ならXDF列)から xlToLeft を指定して左方向に入力されている列を取得することで最終列を取得できます。

SpecialCellsメソッド、UsedRangeプロパティを利用した方法ではシート全体の中で利用されている最終列を取得できます。
この方法で最終列を取得する場合、値が入力されていなくてもセル書式(色の塗りつぶし、罫線など)が設定されているセルも最終列として取得されます。

取得する列は数値(C列なら3)で取得されるのでサンプルコードでは数値をアルファベットの列名に変換して出力してます。

 ●指定したセルを起点に利用されている最終列を取得

'******************************************************************
' 指定したセルを起点に利用されている最終列を取得
'******************************************************************
Sub getEndCol()

    '指定のセルを起点にそこから値が連続して入力されている最終列を取得
    Debug.Print "End(xlToRight)"
    Debug.Print Sheets("Sheet1").Range("A1").End(xlToRight).Column & "列目"
    '列の数値をアルファベットに変換
    Debug.Print Split(Columns(Sheets("Sheet1").Range("A1").End(xlToRight).Column).Address, "$")(2) & "列"
    
    Debug.Print "-------------------------------"
    
    'Excelで扱えるの最右列を起点に左方向で初めて値が入力されている列を取得
    Debug.Print "End(xlToLeft)"
    Debug.Print Sheets("Sheet1").Range("XDF1").End(xlToLeft).Column & "列目"
    '列の数値をアルファベットに変換
    Debug.Print Split(Columns(Sheets("Sheet1").Range("XDF1").End(xlToLeft).Column).Address, "$")(2) & "列"

End Sub

 ■実行結果

シートの情報


 指定したシート内で利用されている最終列を取得

'******************************************************************
' シート内で利用されている最終列を取得
'******************************************************************
Sub getLastCol()
    
    Dim lColNum As Long
    
    'シート全体で利用されている最終列を取得とする(SpecialCells)
    Debug.Print "SpecialCellsメソッド"
    '最終列の取得
    lColNum = Sheets("Sheet1").Cells.SpecialCells(xlCellTypeLastCell).Column
    Debug.Print "" & lColNum & "列目"
    
    '列の数値をアルファベットに変換
    Debug.Print Split(Columns(lColNum).Address, "$")(2) & "列"
    
    
    Debug.Print "-------------------------------"
    
    
    'シート全体で利用されている最終列を取得とする(UsedRange)
    Debug.Print "UsedRangeプロパティ"
    With Sheets("Sheet1").UsedRange
        '最終列の取得
        lColNum = .Item(.Count).Column
        Debug.Print "" & lColNum & "列目"
        
        '列の数値をアルファベットに変換
        Debug.Print Split(Columns(lColNum).Address, "$")(2) & "列"
        
    End With

End Sub

 ■実行結果

シートの情報