エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

【VBA】データ最終行をFor eachループで取得するマクロ

データ最終行を取得するVBAコードは、

Cells(Rows.Count, 1).End(xlUp).Row

が定番ですが、任意の範囲内なら、For each nextを使って最終行を取得した方が手軽にできそうな気がしてコードを書いてみました。

【使い道】

出席簿備考欄の記述で、「新型コロナウイルス感染拡大予防に伴う処置」など、長文を2行に分割するために、E列選択セル以下のデータを1行下にずらし値をコピーします。その後、1行目は左半分、2行目には右半分の文字を取り出し表示します。最後に書式をコピーします。

-----------------------------------------

【コード】

Sub 範囲を1行下にコピーして言葉を2分割する()

Dim ac As Range

For Each Rng In Range("E2:E41")
 Set ac = ActiveCell
 If Rng <> "" Then
  Set a = Range(Cells(ac.Row, "A"), Cells(Rng.Row, "H")) 'アクティブセル~データ最終行までの範囲を取得
 End If
Next
a.Copy a.Offset(1, 0)

'文字を2分割表示する'切り上げ整数化
le = WorksheetFunction.RoundUp*1.Copy
Range(Cells(ac.Row + 1, "A"), Cells(41, "H")).PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False

ac.Select

End Sub

-----------------------------------

備忘録、備忘録

では、また(^^)/

 

*1:Len(ac) / 2), 0)


Cells(ac.Row, "E").Value = Left(Cells(ac.Row, "E"), le) '左半分
Cells(ac.Row, "E").Offset(1, 0).Value = Right(Cells(ac.Row, "E").Offset(1, 0), le) '右半分

'書式をコピーする
Range(Cells(ac.Row, "A"), Cells(ac.Row, "H"