茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

65日目:Excel マクロ/VBA

Excel マクロ/VBAの講義9日目。 今日で講習の半分が終わりました。

【講義内容】

  • 練習問題4~6

【ワンポイント】

VBA練習4

Split

Sub 配列生成()
    Dim fruits As Variant
    Dim i As Integer
    
    Worksheets("サンプル果物表").Select
    fruits = Split(Range("E2").Value, " ")
    For i = 0 To UBound(fruits)
        MsgBox fruits(i)
        Range("B" & 2 + i).Value = fruits(i)
    Next i
End Sub

Join

Sub 配列結合()
    Dim fruits As Variant
    
    Worksheets("サンプル果物表").Select
    fruits = Split(Range("E2").Value, " ")
    Range("E5").Value = Join(fruits, ",")
End Sub

VBA練習5

  • Format
  • Time
  • ScreenUpdating
Sub 連番作成1()
    Dim i As Integer
    Range("G2").Value = Format(Time, "hh:mm:ss")
    For i = 0 To 9999
        Range("B" & 3 + i).Value = "Name" & i + 1
    Next i
    Range("H2").Value = Format(Time, "hh:mm:ss")
    MsgBox ("処理終了")
End Sub
Sub 連番作成2()
    Dim i As Integer
    Range("D2").Value = Format(Time, "hh:mm:ss")
    Application.ScreenUpdating = False
    For i = 0 To 9999
        Range("B" & 3 + i).Value = "Name" & i + 1
    Next i
    Application.ScreenUpdating = True
    Range("E2").Value = Format(Time, "hh:mm:ss")
    MsgBox ("処理終了")
End Sub
Sub 連番作成3()
    Dim i As Integer
    
    Range("G3").Value = Format(Time, "hh:mm:ss")
    Range("B3").Select
    For i = 0 To 9999
        ActiveCell.Value = "Name" & i + 1
        ActiveCell.Offset(1, 0).Select
    Next i
    Range("H3").Value = Format(Time, "hh:mm:ss")
    MsgBox ("処理終了")
End Sub
Sub 連番作成4()
    Dim i As Integer
    
    Range("D3").Value = Format(Time, "hh:mm:ss")
    Application.ScreenUpdating = False
    Range("B3").Select
    For i = 0 To 9999
        ActiveCell.Value = "Name" & i + 1
        ActiveCell.Offset(1, 0).Select
    Next i
    Application.ScreenUpdating = True
    Range("E3").Value = Format(Time, "hh:mm:ss")
    MsgBox ("処理終了")
End Sub
Sub 連番クリア()
    Range("B3:B1002").Clear
End Sub
プロシージャ 画面更新 処理時間
連番作成1 あり 2秒
連番作成2 なし 2秒
連番作成3 あり 1分11秒
連番作成4 なし 2秒

VBA練習6

WorksheetFunction

Sub 新規データチェック()
    Dim todayData As String
    
    Range("B2").Select
    Do While ActiveCell.Value <> ""
        todayData = ActiveCell.Value
        If WorksheetFunction.CountIf(Range("A:A"), todayData) < 1 Then
            ActiveCell.Offset(0, 1).Value = "New"
        End If
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

列の選択

列Aのすべて

Columns("A").Select
Columns(1).Select
Range("A:A").Select

複数列の選択

range(Columns(2), Columns(3)).Select
Range("A:C").Select
Range("A:A, C:C, E:F").Select

列Bの2行目から空白前の行まで

Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select

列選択の解除

  • どこかセルを選択する
Range("A1").Select

【今日の積み上げ】

  • Excel マクロ基本操作