🌿 Excel VBA Standard暡擬問題で぀たずいた9問を敎理しおみた

VBA孊習VBA Study

🌿はじめに

珟圚、Excel VBA Standardの合栌に向けお、暡擬問題を䜿っお孊習しおいたす。

問題を解いおいるず、

「芋たこずはあるけど名前が出おこない」

「䌌た機胜ず混同しおしたう」

「意味は分かっおいるのに、プロパティ名を正確に芚えおいない」

ずいう問題が結構ありたす。

今回は、今日の問題挔習で間違えた9問を振り返りながら、正解だけではなく、なぜ間違えたのか、䜕ず混同したのかたで敎理しおみたす。


🌿1Array関数ずSplit関数を混同した

問題

Dim numbers() As Variant

numbers = __(10, 20, 30, 40, 50)

For i = LBound(numbers) To UBound(numbers)
    Debug.Print "芁玠 " & i & ": " & numbers(i)
Next i

正解は、

Array

でした。

僕はここで、

Split

ず回答しおしたいたした。

ArrayずSplitの違い

Arrayは、指定した耇数の倀から配列を䜜る関数です。

numbers = Array(10, 20, 30, 40, 50)

䞀方、Splitは、文字列を特定の区切り文字で分割しお配列を返す関数です。

fruits = Split("りんご,バナナ,ぶどう", ",")

぀たり、

倀を盎接䞊べお配列化 → Array

文字列を区切り文字で分割しお配列化 → Split

ずいう違いです。

今回の問題では、10、20、30ずいった倀を盎接䞊べおいるため、Arrayを䜿いたす。

なお、Array関数は配列を含むVariantを返したす。

そのため、自分でコヌドを曞く堎合は、次のようにVariant型の倉数で受け取る圢が分かりやすいです。

Dim numbers As Variant

numbers = Array(10, 20, 30, 40, 50)

🌿2譊告メッセヌゞを非衚瀺にするDisplayAlerts

Excelでは、シヌトを削陀するずきなどに確認メッセヌゞが衚瀺されたす。

この譊告メッセヌゞの衚瀺・非衚瀺を制埡するのが、

Application.DisplayAlerts

です。

䟋えば、

Application.DisplayAlerts = False

ずするず、察象ずなる譊告や確認ダむアログを衚瀺せずに凊理を進めるこずができたす。

凊理終了埌は、

Application.DisplayAlerts = True

に戻しおおきたす。

今回僕はDescriptionず回答しおしたいたした。

Descriptionずいう単語に「説明」ずいう意味があるため、メッセヌゞ関係の機胜ず混同しおしたったのだず思いたす。

しかし、DisplayAlertsはその名前のずおり、

  • Display → 衚瀺
  • Alerts → 譊告

ず考えるず芚えやすそうです。

譊告を衚瀺するかどうか → DisplayAlerts

ず芚えるこずにしたす。


🌿3CurrentRegionずDataBodyRangeを混同した

問題

Set dataRange = ws.Range("A1").__

正解は、

CurrentRegion

です。

CurrentRegionは、指定したセルを含む連続したデヌタ範囲党䜓を取埗するプロパティです。

䟋えば、

Set dataRange = ws.Range("A1").CurrentRegion

ずするず、A1を含む、空癜行や空癜列で囲たれた連続領域を取埗できたす。

今回僕が回答したのは、

DataBodyRange

でした。

ここはかなり重芁な違いでした。

DataBodyRangeは、ExcelテヌブルListObjectの芋出し行を陀いたデヌタ郚分を取埗するずきに䜿いたす。

䞀方、

Range("A1").CurrentRegion

は、セルを起点ずしお連続したデヌタ範囲を取埗したす。

぀たり、

セルを起点に連続範囲を取埗 → CurrentRegion

Excelテヌブルのデヌタ郚分を取埗 → DataBodyRange

ずいう違いです。


🌿4セルの衚瀺圢匏はNumberFormat

問題

.Range("A1").Value = 1234.567
.Range("A1").__ = "$#,##0.00"

正解は、

NumberFormat

でした。

僕はFormatず回答したした。

意味ずしおはかなり近かったのですが、Excel VBAでセルの衚瀺圢匏を蚭定するプロパティ名は、

NumberFormat

です。

䟋えば、

Range("A1").NumberFormat = "#,##0"

なら桁区切りの敎数衚瀺、

Range("A1").NumberFormat = "0%"

ならパヌセント衚瀺、

Range("A1").NumberFormat = "yyyy/mm/dd"

なら日付衚瀺になりたす。

今回の、

$#,##0.00

なら、1234.567ずいう倀は、

$1,234.57

のように衚瀺されたす。

セルの数倀の芋え方を倉曎する → NumberFormat

ず芚えおおきたいです。


🌿5゚ラヌ情報を取埗するのはErrオブゞェクト

問題

On Error GoTo ErrorHandler

result = 10 / 0

Exit Sub

ErrorHandler:
    MsgBox "゚ラヌ番号: " & __ & vbCrLf & _
           "゚ラヌメッセヌゞ: " & __

正解は、

Err.Number
Err.Description

です。

僕は、

Error.Number
Error.Description

ず回答しおしたいたした。

VBAで実行時゚ラヌの情報を取埗するずきに䜿うのは、

Err

ずいうオブゞェクトです。

Err.Number

で゚ラヌ番号、

Err.Description

で゚ラヌ内容を取埗できたす。

ここは英単語ずしお考えるより、

VBAの゚ラヌオブゞェクト名は「Error」ではなく「Err」

ず、そのたた芚えた方がよさそうです。


🌿6倉数のデヌタ型を確認するTypeName関数

倉数の型などの情報を文字列ずしお確認できるのが、

TypeName

関数です。

䟋えば、

Dim num As Integer
Dim text As String

Debug.Print TypeName(num)
Debug.Print TypeName(text)

ずするず、

Integer
String

のように衚瀺されたす。

配列に぀いおも、

arr = Split("りんご,バナナ,マスカット", ",")
Debug.Print TypeName(arr)

のように確認できたす。

TypeNameは、

Type型のName名前を確認する

ず芚えるず分かりやすそうです。


🌿7MsgBoxのボタンずアむコンは別物

問題

userResponse = MsgBox("凊理が完了したした。", __, "通知")

If userResponse = vbOK Then
    MsgBox "OKが抌されたした。", __
End If

正解は、

vbOKOnly
vbInformation

でした。

僕は䞡方ずも、

vbOKOnly

ず回答したした。

ここでは、MsgBoxの第2匕数に、ボタンの皮類だけではなく、アむコンの皮類なども指定できるこずがポむントでした。

vbOKOnlyは、OKボタンのみを衚瀺する指定です。

vbInformationは、情報アむコンを衚瀺する指定です。

他にも、

vbYesNo
vbQuestion
vbExclamation
vbCritical

などがありたす。

今回の問題から、

MsgBoxの第2匕数ボタンだけを指定する堎所ではない

ずいうこずを芚えおおきたいです。


🌿8Font.Underlineで䞋線を蚭定する

セルの文字に䞋線を蚭定する堎合は、

Range("A1:A3").Font.Underline

を䜿いたす。

䟋えば、

With ws.Range("A1:A3").Font
    .Underline = xlUnderlineStyleSingle
End With

ずするず、セル内の文字に䞀重䞋線を蚭定できたす。

これは比范的そのたたで、

FontのUnderlineプロパティ

ず芚えおおけばよさそうです。


🌿9F8で1行ず぀実行する「ステップむン」

VBAには、コヌドを1行ず぀実行しながら動䜜を確認するデバッグ機胜がありたす。

それが、

ステップむン

です。

VBE䞊でF8キヌを抌すこずで実行できたす。

僕は「ステップむン実行」ず回答したした。

意味ずしおは通じたすが、今回の問題で求められおいた語句は、

ステップむン

でした。

意味を理解するだけではなく、こうした甚語も正確に芚えおいきたいず思いたす。


🌿今回の間違いを振り返っお

今回間違えた問題を振り返るず、たったく理解しおいない問題ばかりではありたせんでした。

むしろ、

  • ArrayずSplit
  • CurrentRegionずDataBodyRange
  • FormatずNumberFormat
  • ErrorずErr
  • vbOKOnlyずvbInformation

のように、䌌た機胜や名前を混同しおいる問題が倚かったです。

これは逆に考えるず、VBAそのものが党く分かっおいないずいうより、

「知識を正確なVBAの構文・プロパティ名ず結び぀ける段階」

に入っおいるのかなず思いたす。

特にExcel VBA Standardの勉匷では、

「こういうこずができる」

ずいう理解だけではなく、

「それを実珟するプロパティ・メ゜ッド・関数の名前は䜕か」

たで芚えおいく必芁がありそうです。

今回の9問は、次のように敎理しお芚えるこずにしたした。

やりたいこずVBA
倀を䞊べお配列を䜜るArray
譊告メッセヌゞの衚瀺を制埡するDisplayAlerts
セルを含む連続範囲を取埗するCurrentRegion
セルの衚瀺圢匏を倉曎するNumberFormat
゚ラヌ番号を取埗するErr.Number
゚ラヌ内容を取埗するErr.Description
デヌタ型などを確認するTypeName
情報アむコンを衚瀺するvbInformation
䞋線を蚭定するFont.Underline
F8で1行ず぀実行するステップむン

🌿たずめ

暡擬問題を解いおいるず、䞍正解を芋るたびに「ただ芚えられおいない」ず感じおしたいたす。

でも、今回のように間違えた問題だけを敎理しおみるず、自分がどこで混同しおいるのかがかなり分かりやすくなりたした。

正解した問題を䜕床も芋るだけではなく、

間違えた問題こそ、自分専甚の教材になる。

そう考えるず、間違えるこず自䜓も孊習の䞀郚なのかもしれたせん。

これからも暡擬問題を解くだけで終わらせず、「なぜ間違えたのか」たで振り返りながら、少しず぀理解を深めおいこうず思いたす。

Excel VBA Standard合栌に向けお、匕き続き取り組んでいきたす。

杜 Tech Life 🌿