例文を使って繰り返し業務を時短

【マクロ・VBA】 縦(行)ループして曜日を記入する

エクセル、マクロ、VBAでループして曜日を記入する VBA

For~Next:ループ

Sub 日付から曜日を記入()

  Dim maxRow As Long
  maxRow = ThisWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
  
  Dim i As Long
  For i = 2 To maxRow
        Cells(i, 2).Value = WeekdayName(Weekday(Cells(i, 1).Value), True) 'False:日曜日
  Next i

  MsgBox "完了"
End Sub

 Weekday関数:

  • 「〇曜日」と表示:Cells(i, 3).Value = WeekdayName(Weekday(Cells(i, 2).Value), False)
  • 「〇」と表示:Cells(i, 3).Value = WeekdayName(Weekday(Cells(i, 2).Value), True)

上記コードのスピードアップ改善コード

Sub 日付から曜日を記入2()

Dim maxRow As Long
Dim ws As Worksheet
Dim i As Long
Dim dayName As String

' ワークシートオブジェクトを明示的に指定する
Set ws = ThisWorkbook.ActiveSheet

' 最終行を取得
maxRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

' 日付から曜日名を取得し、セルに入力
For i = 2 To maxRow
dayName = WeekdayName(Weekday(ws.Cells(i, 1).Value), True) ' False: 日曜日
ws.Cells(i, 2).Value = dayName
Next i

' 完了メッセージを表示
MsgBox "完了"
End Sub

改善点:

  1. ワークシートオブジェクトを明示的に指定する
  2. WeekdayName関数を使用する際にローカル変数を宣言する

セルに曜日を代入

Sub 曜日の取得()
Dim n As Long

n = Weekday(Cells(2, 2))
Cells(2, 3) = Choose(n, "日", "月", "火", "水", "木", "金", "土")

MsgBox "完了"
End Sub

ダミーデータをダウンロード

コメント

タイトルとURLをコピーしました