|
▼YN61 さん:
こんばんは。
>行の部分的な非表示の時、表示行にのみ連番をつけ直す方法について教えて下さい。
>
>具体的には
>
>No. 氏名 住所
>1 A
>2 C
>4 E
>6 G
>
>3行目と5行目が現在非表示です。
>
>非表示の状態でそのまま、表示されたNo.の行に連番の付け直しをする方法を教えてください。
>連番を付け直した結果として下のような状態に仕上げたいのです。
>
>No. 氏名 住所
>1 A
>2 C
>3 E
>4 G
>
>最終的にはVBAに反映させたく思います。
ご提示された例のような表を対象として、以下のコードを試してみて下さい。
'============================================================
Sub test()
Dim wk() As Variant
Dim carea As Range
Dim v_area As Areas
Dim rng As Range
Set rng = Range("b2", Cells(Rows.Count, 2).End(xlUp))
' ↑B列を基準にして連番設定セル範囲を取得する
If rng.Row = 1 Then '何も入力されていない
Exit Sub
End If
With rng.Offset(0, -1)
If .Count = 1 Then '取得セル範囲が一つだけのとき
.Value = 1
Else '複数のセル範囲の場合
On Error Resume Next
Set v_area = .SpecialCells(xlCellTypeVisible).Areas
' ↑ 表示されている範囲をエリアとして取得
If Err.Number <> 0 Then Exit Sub
For Each carea In v_area
If carea.Count > 1 Then '一つのエリア内に複数のセル範囲がある
Erase wk()
wk() = carea.Value
For idx = LBound(wk) To UBound(wk)
wk(idx, 1) = i + 1
i = i + 1
Next idx
carea.Value = wk()
Else '一つのエリア内に一つしかセルがない
carea.Value = i + 1
i = i + 1
End If
Next
End If
End With
End Sub
B列(氏名列)の入力されたセル範囲を連番設定対象としています。
|
|