Excel VBA 別解集 空白セルの処理

問題1

問題:空白セルに色をつけるか削除せよ

1)Fanctionプロシージャで最終行をとり、IsEmptyを用いて空白セルを赤にせよ

2)Fanctionプロシージャで最終行をとり、IsEmptyを用いて空白セルを削除せよ

3)Fanctionプロシージャで最終行をとり、IsEmptyを使わずに空白セルを黄色にせよ

4)SpecialCellsを用いて、空白セルを緑色にせよ

5)Fanctionプロシージャで最終行をとり、For Each文で空白セルを青にせよ

解答

1)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main()
    Dim lcr As Integer, i As Integer
    
    lcr = getLastCellRow

    For i = 3 To lcr
        If IsEmpty(Cells(i, 2)) Then
            Cells(i, 2).Interior.Color = vbRed
        End If
    Next i
End Sub

2)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main1()
    Dim lcr As Integer, i As Integer
    
    lcr = getLastCellRow
    
    For i = 3 To lcr
        If IsEmpty(Cells(i, 2)) Then
            Cells(i, 2).EntireRow.Delete
        End If
    Next i
            
End Sub

3)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main2()
    Dim lcr As Integer, i As Integer
    
    lcr = getLastCellRow
    
    For i = 3 To lcr
        If Cells(i, 2) = "" Then
            Cells(i, 2).Interior.Color = vbYellow
        End If
    Next i
End Sub

4)

Sub main3()
    With Range("A2").CurrentRegion
        .SpecialCells(xlCellTypeBlanks).Interior.Color = vbGreen
    End With
End Sub

5)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main4()
    Dim lcr As Integer
    Dim myrng As Range
    
    lcr = getLastCellRow
    
    For Each myrng In Range(Cells(3, 2), Cells(lcr, 2))
        If myrng = "" Then
            myrng.Interior.Color = vbBlue
        End If
    Next myrng
    
End Sub

問題2

問題:表の空白セルに対して以下の処理をせよ

1)行と列の最終列をFanctionプロシージャを用いて取り、For Next文でセルを黄色にせよ

2)行と列の最終列をFanctionプロシージャを用いて取り、For Each文でセルを赤色にせよ

3)SpecialCellsを用いて空白セルを緑色にせよ

4)行と列の最終列をFanctionプロシージャを用いて取り、For Each文とIsEmptyを用いて空白セルを青色にせよ

5)CurrentRegionとサブルーチンを用いて、空白セルをマゼンタ色にせよ

解答

1)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Function getLastCellCol() As Integer
    getLastCellCol = Cells(3, Columns.Count).End(xlToLeft).Column
End Function

ーーーーーーーーーーーーーーーーーーーーーーー
Sub main()
    Dim lcr As Integer, lcc As Integer
    Dim i As Integer, j As Integer
    
    lcr = getLastCellRow
    lcc = getLastCellCol
    
    For i = 3 To lcr
        For j = 2 To lcc
            If Cells(i, j) = "" Then
                Cells(i, j).Interior.Color = vbYellow
            End If
        Next j
    Next i
End Sub

2)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Function getLastCellCol() As Integer
    getLastCellCol = Cells(3, Columns.Count).End(xlToLeft).Column
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main1()
    Dim lcr As Integer, lcc As Integer
    Dim myrng As Range
    
    lcr = getLastCellRow
    lcc = getLastCellCol
    
    For Each myrng In Range(Cells(3, 2), Cells(lcr, lcc))
        If myrng = "" Then
            myrng.Interior.Color = vbRed
        End If
    Next myrng
End Sub

3)

Sub main2()
    With Range("A2").CurrentRegion
        .SpecialCells(xlCellTypeBlanks).Interior.Color = vbGreen
    End With
End Sub

4)

Function getLastCellRow() As Integer
    getLastCellRow = Cells(Rows.Count, 1).End(xlUp).Row
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Function getLastCellCol() As Integer
    getLastCellCol = Cells(3, Columns.Count).End(xlToLeft).Column
End Function

ーーーーーーーーーーーーーーーーーーーーーーー

Sub main3()
    Dim lcr As Integer, lcc As Integer
    Dim myrng As Range
    
    lcr = getLastCellRow
    lcc = getLastCellCol
    
    For Each myrng In Range(Cells(3, 2), Cells(lcr, lcc))
        If IsEmpty(myrng) Then
            myrng.Interior.Color = vbBlue
        End If
    Next myrng
End Sub

5)

Sub main4()
    Dim lcr As Integer, lcc As Integer
    
    With Range("A2").CurrentRegion
        lcr = .Rows.Count + 1
        lcc = .Columns.Count
    End With

    Call BlankColor(lcr, lcc)
End Sub

ーーーーーーーーーーーーーーーーーーーーーーー
Sub BlankColor(lcr As Integer, lcc As Integer)
    Dim myrng As Range

    For Each myrng In Range(Cells(3, 2), Cells(lcr, lcc))
        If IsEmpty(myrng) Then
            myrng.Interior.Color = vbMagenta
        End If
    Next myrng
End Sub