• 公開日:

Excel VBAで最終列を取得する方法

この記事では、Excel VBAで最終列を取得する方法をご紹介します。

最終列を取得するにはショートカットキーやジャンプ機能を使う方法もありますが、空白列がある場合は、VBAを使うと一回の操作でできるので便利です。

以下では、Excel VBAで最終列を取得するコードを紹介しています。

開発タブを表示させる

開発タブを表示させる

今回は、VBAを使用して最終列を取得します。上記の画像のような「開発」タブが表示されていない場合は、「開発」タブを表示させましょう。

詳細は、以下の記事を参考にしてみてください。

エクセルの開発タブを表示する方法

最終列を取得するコード

VBAを使って、最終列をダイアログボックスに表示するコードを下記に記載するので、コピーして使用してください。

詳しい方法は、下記「ダイアログボックスに表示して最終列を取得する方法」セクションでご紹介しています。

Sub ダイアログボックスに表示して最終列を取得する()
    Dim lastColumn As Long
    Dim lastColumnAlpha As String
    Dim lastCell As Range

    ' 最終行を取得するシートを指定する(ここではActiveSheetを使用しています)
    Set lastCell = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)

    ' 最終列の番号を取得
    lastColumn = lastCell.Column

    ' 列番号をアルファベットに変換
    lastColumnAlpha = ConvertToLetter(lastColumn)

    ' 結果を表示
    MsgBox "最終列は " & lastColumnAlpha & " です。"
End Sub


Function ConvertToLetter(ByVal columnNumber As Long) As String
    Dim dividend As Long
    Dim modulo As Long
    Dim columnName As String

    dividend = columnNumber
    columnName = ""

    While dividend > 0
        modulo = (dividend - 1) Mod 26
        columnName = Chr(65 + modulo) & columnName
        dividend = (dividend - modulo) \ 26
    Wend

    ConvertToLetter = columnName
End Function

ご紹介したコードを使うと下記の画像のように、シート内でデータが入力された最終列をダイアログボックスで確認することが出来ます。

最終列がダイアログボックスに表示される

Excel VBAで最終列を取得する方法

VBAを使って最終列を取得する方法をご紹介します。

最終列を取得してダイアログボックスに表示する方法

最終列が何列なのかアルファベットでダイアログボックスに表示する方法をご紹介します。ただし、途中に空白列がある場合は正しく取得できないので、下記「空白列がある場合に最終列を取得する方法」セクションのコードを参考にしてください。

Visual Basicを開く

開発タブ、②Visual Basicの順に選択します。

「Microsoft Visual Basic for Applications」が開きました。①挿入タブ、②標準モジュールの順に選択します。

「標準モジュール」が開きました。上記セクション「最終列を取得するコード」をコピーして貼り付けてください。

作成したマクロを保存します。①ファイルタブ、②上書き保存の順に選択します。

「名前を付けて保存」ダイアログボックスが表示されました。①保存先(例:デスクトップ)を選択します。②ファイル名(例:ダイアログボックスに表示して最終列を取得する)を入力し、③ファイルの種類でExcelマクロ有効ブックを選択し、④保存ボタンを押します。

Excelシートに戻ります。①開発タブ、③マクロの順に選択します。

「マクロ」ダイアログボックスが表示されました。①作成したマクロ(例:ダイアログボックスに表示して最終列を取得する)を選択し、②実行ボタンを押します。

「Microsoft Excel」ダイアログボックスが表示されました。VBAを使って最終列(例:AA列)をダイアログボックスに表示することができました。OKボタンを押します。

今回は、マクロが合っているか確認するために手動で最終列まで移動します。AA列が最終列になっていることを確認できました。

空白列がある場合に最終列を取得する方法

空白列がある場合の最終列取得の違い

上記の画像のように、空白列がある場合は左から数えると空白列の前の列が最終列(例:C列)だと判断されてしまいます。

そのため、右から数えて「最初にデータがある列」を取得するコードを使用します。

方法の詳細は以下のとおりです。

空白列がある場合

開発タブ、②Visual Basicの順に選択します。

標準モジュールを開く

「Microsoft Visual Basic for Applications」が開きました。

挿入タブ、②標準モジュールの順に選択します。

コードを入力する

「標準モジュール」が開きました。

以下のコードをコピーしてモジュールに貼り付けてください。

Sub 空白列がある場合に最終列を取得する()
    Dim ws As Worksheet
    Dim lastColumn As Long
    Dim lastColumnAlphabet As String

    ' 対象のシートを指定します
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適宜変更

    ' 最も右側の列を取得します
    lastColumn = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False).Column

    ' 列番号をアルファベットの列番号に変換します
    lastColumnAlphabet = ConvertToColumnAlphabet(lastColumn)

    ' 最終列を出力します
    MsgBox "最終列: " & lastColumnAlphabet
End Sub

 

Function ConvertToColumnAlphabet(columnNumber As Long) As String
    Dim dividend As Long
    Dim columnAlphabet As String
    Dim modulo As Long

    columnAlphabet = ""
    dividend = columnNumber

    While dividend > 0
        modulo = (dividend - 1) Mod 26
        columnAlphabet = Chr(modulo + 65) & columnAlphabet
        dividend = (dividend - modulo) \ 26
    Wend

    ConvertToColumnAlphabet = columnAlphabet
End Function

上記のコードは対象シートを「Sheet1」にしていますので、シート名が違う場合はダブルクォーテーションの中を変えて使用してください。

マクロを保存する

作成したマクロを保存します。

ファイルタブ、②上書き保存の順に選択します。

保存先を選択する

「名前を付けて保存」ダイアログボックスが表示されました。

保存先(例:デスクトップ)を選択し、②ファイル名(例:空白列がある場合に最終列を取得する)を入力します。③ファイルの種類でExcelマクロ有効ブックを選択し、④保存ボタンを押します。

マクロを開く

Excelシートに戻ります。

開発タブ、②マクロの順に選択します。

作成したマクロを実行する

「マクロ」ダイアログボックスが表示されました。

作成したマクロ(例:空白列がある場合に最終列を取得する)を選択し、②実行ボタンを押します。

空白列を含む最終行が取得できた

「Microsoft Excel」ダイアログボックスが表示されました。

VBAを使って最終列(例:AD列)をダイアログボックスに表示することができました。

OKボタンを押します。

最終列が合っているか確認する

今回は、マクロが合っているか確認するために手動で最終列まで移動します。

AD列が最終列になっていることを確認できました。

列をアクティブにして最終列を取得する方法

最終列にジャンプするので、データを追加したい場合などにおすすめです。

以下では、列をアクティブにして最終列を取得する方法をご紹介します。

Visual Basicを開く

開発タブ、②Visual Basicの順に選択します。

標準モジュールを開く

「Microsoft Visual Basic for Applications」が開きました。

挿入タブ、②標準モジュールの順に選択します。

コードを入力する

「標準モジュール」が開きました。

以下のコードをコピーしてモジュールに貼り付けてください。

Sub ActivateLastColumn()
    Dim lastColumn As Long
    Dim lastCell As Range

    ' 最終行を取得するシートを指定する(ここではActiveSheetを使用しています)
    Set lastCell = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)

    ' 最終列の番号を取得
    lastColumn = lastCell.Column

    ' 最終列をアクティブにする
    Columns(lastColumn).Activate
End Sub

上記のコードは、最終列をアクティブにしてジャンプするコードです。

マクロを保存する

作成したマクロを保存します。

ファイルタブ、②上書き保存の順に選択します。

保存先を選択する

「名前を付けて保存」ダイアログボックスが表示されました。

保存先(例:デスクトップ)を選択し、②ファイル名(例:列をアクティブにして最終列を取得する方法)を入力します。③ファイルの種類でExcelマクロ有効ブックを選択し、④保存ボタンを押します。

マクロを実行する

「マクロ」ダイアログボックスが表示されました。

作成したマクロ(例:列をアクティブにして最終列を取得する)を選択し、②実行ボタンを押します。

最終列がアクティブになる

VBAを使って列をアクティブにして最終列を取得することができました。