結合セルにマクロで連番を振る方法についてです。MergeAreaプロパティの使い方といいつつ、使わない使い方も紹介します。
成果物
結合セルに連番を振ります。
方法①作業列を使う
こういう表に連番を振っていきたいとして、
たとえば単純にfor nextとかでセル番号を振った場合、
こうなります。結合セルの場合、左上に入力した値以外は無効になります。
連番を振るひとつの方法としてこの性質を利用し、順番に結合セルの値を別のセルに代入することで、
結果的に連番を振ればいい行があぶり出されるので、
D列に何か値がある場合はB列(結合セル)に1から順に数字を振る、というマクロを実行し、最後にD列を削除していけば、
作業列が必要ですが、目的は達成できます。たぶんこのやりかたが一番簡単です。
' vba
Dim i As Integer
Dim j As Integer
Dim k As Integer
For i = 2 To 7
Range("B" & i).Value = i
Range("D" & i).Value = Range("B" & i).Value
Next
k = 1
For j = 2 To 7
If Range("D" & j).Value "" Then
Range("B" & j).Value = k
k = k + 1
End If
Range("D" & j).ClearContents
Next
MergeAreaプロパティを使う方法
MergeAreaプロパティは、Rangeオブジェクトが所属する結合セルを取得するプロパティで、たとえばRange(“D” & i).Value = Range(“B” & i).MergeArea.Valueを実行すると、
3行目でも4行目でも、所属する結合セルの値が表示されます。
Range(“B” & i).Offset(1).MergeAreaのようにOffsetと組み合わせる使い方をした場合は、
こういった結果になります。MergeArea単位でoffsetするので、Offset(1).MergeArea.Selectでひとつ下の結合セルを選択することができます。
ただし(作業列に一回出すならともかく)、MergeAreaは「範囲」なので、If文でセルと対比させるような使い方はできません。
なのでMergeAreaで作業列を使わずに結合セルに連番を振る場合は、
なのでMergeAreaで作業列を使わずに結合セルに連番を振る場合は、
たとえばDo whileで「右のセルが空白じゃない限り」処理を繰り返すなどの方法を取り、
連番を振りながらMergeArea単位で下に降りていく、というような処理を実装すると、
概ね目標が達成できます(他のやりかたもあります)。元の場所に帰ってきたい場合は、現在位置を記録して最後に処理で戻ってくるようにします。
' vba
Dim i As Integer
Range("B2").Select
i = 1
Do While ActiveCell.Offset(, 1).Value ""
ActiveCell.Value = i
i = i + 1
ActiveCell.Offset(1).MergeArea.Select
Loop
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント