Excel VBA テスト 2 (ベータ版)


問題は20問あります。資料参照可、解答時間は1時間です。

提示されたプロシージャが正しいか誤りかを選択してください。

なお、いくつかの問題は状況によって正誤が変化します。採点基準は絶対的なものではありません。

では、始めてください。


[問題 1]

'選択セル範囲内の可視セルを取得します。
Sub Test1()
    Dim r As Range
    Set r = Selection.SpecialCells(xlVisible)
    If Not (r Is Nothing) Then MsgBox r.Address
End Sub

正しい

誤り


[問題 2]

'現在の使用セル範囲の最終行番号を取得します。
Sub Test2()
    Dim i As Long
    i = ActiveSheet.UsedRange.Rows.Count
    MsgBox i
End Sub
正しい

誤り


[問題 3]

'A列で値が10であるセルを検索します。
Sub Test3()
    Dim i As Integer
    Dim r As Range
    i = 10
    Set r = ActiveSheet.Columns(1).Find(i)
    If Not (r Is Nothing) Then MsgBox r.Address
End Sub
正しい

誤り


[問題 4]

'時間を集計し、10:00より大きい場合にメッセージを返します。
Function Test4(range1 As Object)
    Dim myTime As Date
    myTime = Application.Sum(range1)
    If myTime > TimeSerial(10, 0, 0) Then
        Test4 = "超過"
    Else
        Test4 = myTime
    End If
End Function
正しい

誤り


[問題 5]

'InputBoxメソッドで数値を入力します。
Sub Test5()
    Dim Ret As Variant
    Ret = Application.InputBox(prompt:="数値を入力してください。", Type:=1)
    If Ret = False Then
        MsgBox "キャンセルされました。"
        Exit Sub
    End If
    MsgBox Ret
End Sub
正しい

誤り


[問題 6]

'選択セル範囲の最下行の行番号を取得します。
Sub Test6()
    Dim i As Long
    i = Selection.Cells(Selection.Cells.Count).Row
    MsgBox i
End Sub
正しい

誤り


[問題 7]

'Sheet1のB2:C5をコピーします。
Sub Test7()
    Worksheets("Sheet1").Range(Cells(2, 2), Cells(5, 3)).Copy
End Sub
正しい

誤り


[問題 8]

'数値データ(ただし100以上の整数)の先頭3桁の数字を返します。
Function Test8(number)
    Test8 = Mid$(number, 1, 3)
End Function
正しい

誤り


[問題 9]

'セルにファイルリストを出力します。
Sub Test9()
    Dim r As Range
    Dim filename As String

    Set r = ActiveCell
    fname = Dir$("c:\*.*")
    Do While filename <> ""
        r.Value = filename
        Set r = r.Offset(1)
        filename = Dir$()
    Loop
End Sub
正しい

誤り


[問題 10]

'選択された1つのセル範囲から、その1行目を選択解除します。
Sub Test10()
    If Selection.Rows.Count > 1 Then
        Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
    End If
End Sub
正しい

誤り


[問題 11]

'与えられた数値にA1の値を加算するユーザ定義ワークシート関数です。
Function Test11(i)
    Application.Volatile
    Test11 = i + Range("A1").Value
End Function
正しい

誤り


[問題 12]

'アクティブセル領域のB列が10より大きい行の数を取得します。
'1行目は項目見出しです。
Sub Test12()
    Dim i As Long
    Dim r As Range
    With ActiveSheet.Cells(1, 1).CurrentRegion
        .AutoFilter Field:=2, Criteria1:=">10"
        i = -1
        For Each r In .SpecialCells(xlVisible).Areas
            i = i + r.Rows.Count
        Next
    End With
    MsgBox i
End Sub
正しい

誤り


[問題 13]

'B列が今日の日付値であるデータをフィルタします。
Sub Test13()
    With ActiveSheet.Cells(1, 1).CurrentRegion
        .AutoFilter Field:=2, Criteria1:="=" & Date
    End With
End Sub
正しい

誤り


[問題 14]

'B列が"\-10,000"であるデータをフィルタします。
Sub Test14()
    With ActiveSheet.Cells(1, 1).CurrentRegion
        .AutoFilter Field:=2, Criteria1:="\-10,000"
    End With
End Sub
正しい

誤り


[問題 15]

'Text関数を使ってセル値を文字列に変換します。
Sub Test15()
    Dim s As String
    With ActiveSheet.Range("A1")
        s = Application.Text(.Value, .NumberFormat)
    End With
    MsgBox s
End Sub
正しい

誤り


[問題 16]

'A列の合計値をB1に出力します。
Sub Test16()
    Dim c As Currency
    Dim r As Range
    For Each r In Range("A1").CurrentRegion.Columns(1).Cells
        c = c + r.Value
    Next
    Range("B1").Value = c
End Sub
正しい

誤り


[問題 17]

'他ブックのセルへの外部参照式を入力します。
Sub Test17()
    With ThisWorkbook
        Range("B1").Formula = "=" & .Path & "\[" & .Name & "]Sheet1!$A$1"
    End With
End Sub
正しい

誤り


[問題 18]

'選択セル範囲を右側にコピーします。
Sub Test18()
    SendKeys "^c"
    ActiveCell.Offset(0, 1).Select
    SendKeys "^v"
End Sub
正しい

誤り


[問題 19]

'A:Cのセル範囲をA列の昇順に並び替えます。
Sub Test19()
    Range("A:C").SortSpecial SortMethod:=xlSyllabary, Key1:=Range("A1"), _
        Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom
End Sub
正しい

誤り


[問題 20]

'選択セル範囲の値を配列に一括代入します。
Sub Test20()
    Dim a As Variant
    a = Selection.Value
    MsgBox "Array size: " & UBound(a, 1) & " x " & UBound(a, 2)
End Sub
正しい

誤り


  解答が終了しましたら、採点ボタンをクリックしてください。

(なお、解答解説は準備中です。)


おつかれさまでした!

[戻る]