ループ/最終列に連番を振る
これは、アクティブなシートの最終列に連番をふるエクセルマクロです。最終列の項目名として、「もとの順番」というテキストを追加しています。
Sub 最終列に連番を振る()
Dim wb1 As Workbook
Set wb1 = ThisWorkbook
Dim ws1 As Worksheet
Set ws1 = ActiveSheet
Dim LastRow1 As Long
LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastCol1 As Long
LastCol1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column
Dim i, 連番
連番 = 1
For i = 2 To LastRow1
Cells(i, LastCol1 + 1).Value = 連番
連番 = 連番 + 1
Next
Cells(1, LastCol1 + 1) = "もとの順番"
MsgBox "完了"
End Sub
解説
- 1行目から7行目は変数の定義をしています。
- 8行目で、選択されたシートをws1という変数にセットしています。
- 10行目で、ws1の中で、最終行の番号を取得しています。
- 12行目で、ws1の中で、最終列の番号を取得しています。
- 13行目から18行目では、forループを使って、各行に対して以下の処理を実行しています。
- LastCol1 + 1列目に、1から順に番号を振る。
- 振った番号を1ずつ増やす。
- 最後に、もとの順番という文字列を最終列の1行目に入力して、完了というメッセージを表示します。
注意
注意点としては、このコードで使用されている Cells()
関数には、行と列の引数が必要であることです。引数が省略されている場合は、アクティブなシートの現在のセルが使用されます。したがって、常に ws1.Cells()
のように、シートを明示的に指定するようにしてください。
また、このコードは、最終列の算出に xlToLeft
を使用しています。これは、右端から空白セルが始まる最初の列を返します。最終列が空でない場合は、正しい結果を得ることができます。ただし、最終列が空の場合、このコードは望ましい結果を返しません。この場合は、代わりに xlToRight
を使用することを検討してください。
A列を挿入して連番を振る
これは、指定された列(この場合は列B)の範囲内にある各行に対して、連番を割り当てるエクセルマクロです。
Sub 連番()
Dim i As Long, 指定行 As Long, 連番 As Long, LastCol1 As Long
指定行 = 2
連番 = 1
Columns("A").Insert
LastCol1 = ThisWorkbook.ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 指定行 To ThisWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
ThisWorkbook.ActiveSheet.Cells(i, LastCol1 + 1).Value = 連番
連番 = 連番 + 1
If i = ThisWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row Then
MsgBox "完了"
Exit Sub
End If
Next
Range("A1") = "No"
MsgBox "完了"
End Sub
解説
- 1行目から4行目は、変数の宣言です。i, 指定行, 連番, LastCol1という4つの変数が宣言されています。
- 5行目では、A列に新しい列を挿入しています。これは、連番を割り当てるために必要な、新しい列を作成するための操作です。
- 6行目では、変数LastCol1を定義しています。これは、最後の列を指定するための変数です。この変数は、ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Columnの操作によって設定されます。この操作は、現在のシートの最初の行で最も右の列を取得します。
- 7行目から11行目では、指定された列(この場合はB列)に対して、各行に1ずつ連番を振っている部分です。まず、指定された列の最初の行から最後の行までループ処理が行われます。ループ内で、現在の行の次の列(LastCol1 + 1)に、連番が割り当てられます。そして、連番は1ずつ増加し続けます。最後の行に到達した場合、”完了”というメッセージが表示されます。
- 12行目では、A1セルに”No”という値が挿入されます。
- 最後に、13行目では”完了”というメッセージが表示されます。
A列を挿入してカウント用の1をたてる
Sub 列挿入_カウント用の1をたてる()
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A2").Select
Dim i
For i = 2 To ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Cells(i, 1) = 1
Next
Range("A1") = "カウント"
MsgBox "完了"
End Sub
同じデータに同じ連番を記入
連番を振る際に、同じデータがあった場合は、同じ番号をふる
Sub 同じデータに同じ連番をふる()
Dim DicName As Variant
Dim i As Long
Dim j As Long
Dim Cnt As Long
Dim LastRow As Long
Dim GetName As String
Dim myKey As Variant
'連想配列にいれる
Set DicName = CreateObject("Scripting.Dictionary")
'最終行を取得
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'行をループ
For i = 2 To LastRow
'1列目の値を変数へ
GetName = Cells(i, 1)
'重複しないリストを連想配列へ
If Not DicName.Exists(GetName) Then
DicName.Add GetName, GetName
End If
Next i
Dim LastCol1 As Long
LastCol1 = Cells(1, Columns.Count).End(xlToLeft).Column
myKey = DicName.keys
Cnt = 1
'リスト分ループ
For i = 0 To UBound(DicName.items)
For j = 1 To LastRow
If Cells(j, 1) = myKey(i) Then
'最終列に通し番号を振る
Cells(j, LastCol1 + 1) = Cnt
End If
Next j
Cnt = Cnt + 1
Next i
Set DicName = Nothing
MsgBox "完了 "
End Sub
解説
- 連想配列を作成する。
- 最終行の番号を取得する。
- ループを使用して各行に対して、最初の列の値を連想配列に追加する。
- 最終列の列番号を取得する。
- 連想配列内の要素ごとに、各行をループして、値が同じ行に通し番号を振り、それを最終列に記録する。
- 追加された通し番号の値を更新する。
- 作成した連想配列を削除する。
- 「完了」メッセージボックスを表示する。
コメント