可視セルのみに連番を振る方法を紹介した動画を視聴した記事を書きました。
最新のエクセルであれば動画で紹介されている方法が使えますが、2010年のエクセルでは使用できなかったので、VBAでコードを組んでみました。
使用方法:
1.まず任意の値でテーブルにフィルターをかけます。
2.連番を振りたい列のセルを選択します。(可視セルのみ選択ではなく普通の範囲選択で選択してください)
3.選択した状態のままスクリプトを実行すると連番を振ることができます。
Option Explicit
Sub NumberVisibleCells()
'可視セルの行番号を格納する配列を作成
Dim visibleCellsCount As Long
visibleCellsCount = Selection.SpecialCells(xlCellTypeVisible).count
ReDim visibleCellsRowNumbers(1 To visibleCellsCount) As Variant
'選択範囲の可視セルの行番号を配列に格納
Dim i As Long
i = 1
Dim cell As Range
For Each cell In Selection.SpecialCells(xlCellTypeVisible)
'可視セルの行番号を配列に格納
visibleCellsRowNumbers(i) = cell.Row
i = i + 1
Next cell
'選択したセルの値を取得
Dim outputValues() As Variant
outputValues = Selection.Value
Dim count As Long
count = 1 ' 連番の開始番号
'配列をループして可視セルの行とマッチしたら連番を代入する
Dim isVisibleCell As Boolean '現在の行が可視セルか判定結果を入れる
isVisibleCell = False
Dim visibleCellsRowNumber As Variant
For i = 1 To Selection.count
'現在のインデックスが可視セルのインデックスかどうかを判定する
For Each visibleCellsRowNumber In visibleCellsRowNumbers
If visibleCellsRowNumber = Selection.Row + i - 1 Then
isVisibleCell = True
End If
Next visibleCellsRowNumber
'現在の行が可視セルだった場合はカウンタの数字を代入してインクリメントする
If isVisibleCell Then
outputValues(i, 1) = count
count = count + 1
isVisibleCell = False
End If
Next i
'アクティブシートのフィルターを解除してすべての値を表示させる
ActiveSheet.ShowAllData
' 結果をセルに反映させる
Selection.Value = outputValues
End Sub