表で整理するようなデータを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
実行例
- 実行前
- 実行後