管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Excelでデータを処理するときのあれこれ(ExcelVBA)

表で整理するようなデータをExcelで処理するとき、準備として以下の処理を行うことが多いですよね。

  • 見出し行をつける
  • 項番列をつける
  • オートフィルタをかける

上記処理を一発でできるように、ExcelVBAで処理を書いてみました

以下ソース

Option Explicit

Sub 解析用あれこれ()
    Dim maxRowNumA As Integer
    Dim maxColNumOne As Integer
    
    Dim i As Integer
    Dim colCal As String
    
    ' 行方向・列方向の端を取得
    maxRowNumA = A列の最下アドレスを取得()
    maxColNumOne = 初行の最右アドレスを取得()
    
    ' 見出し行の追加
    Rows(1).Insert
    For i = 1 To maxColNumOne
        Cells(1, i).Value = i
    Next
    
    ' 項番列の追加
    Columns(1).Insert
    Cells(1, 1).Value = "No."
    For i = 2 To maxRowNumA + 1
        Cells(i, 1).Value = i - 1
    Next
    
    ' フィルタをかける
    colCal = 列番号を文字に変換(maxColNumOne + 1)
    Range("A1:" & colCal & maxRowNumA + 1).AutoFilter
    
End Sub

Function 列番号を文字に変換(colNum)
    Dim tmpAddress As String

    tmpAddress = Cells(1, colNum).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    列番号を文字に変換 = Left(tmpAddress, Len(tmpAddress) - 1)
End Function


Function A列の最下アドレスを取得()
    Dim currentRange As Range
    Dim maxRowNum As Integer
    
    Set currentRange = Cells(Rows.Count, 1)
    maxRowNum = currentRange.End(xlUp).Row
    Set currentRange = Nothing

    A列の最下アドレスを取得 = maxRowNum
End Function

Function 初行の最右アドレスを取得()
    Dim currentRange As Range
    Dim maxColNum As Integer
    
    Set currentRange = Cells(1, Columns.Count)
    maxColNum = currentRange.End(xlToLeft).Column
    Set currentRange = Nothing

    初行の最右アドレスを取得 = maxColNum
End Function

実行例

  • 実行前

  • 実行後