VBA

【VBA】PC名の取得

PC名(コンピューター名)の取得方法のサンプルコードを紹介します!

サンプルコード

Sub Example1()
    Dim pc As String
    pc = Environ("COMPUTERNAME")
    MsgBox pc
End Sub

実行結果

【VBA】エラー「インデックスが有効範囲にありません」の解決方法

エラーメッセージ「実行時エラー ‘9’: インデックスが有効範囲にありません」の原因と解決方法を紹介します!

原因:シート名の設定が誤っている

存在しないシート名orシート名が間違っているか、シートのインデックスが無効な範囲外にアクセスしようとしたときに発生します。

Sub Example1()
    Dim ws As Worksheet
    
    '存在しないシート名を設定
    Set ws = ThisWorkbook.Sheets("Sheet2")
    
    'インデックスが無効な範囲外
    Set ws = ThisWorkbook.Sheets(2)
    
End Sub

解決策

シート名、インデックスを正しい値に修正する。

Sub Example1()
    Dim ws As Worksheet
    
    '存在するシート名を設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'インデックスが有効な範囲
    Set ws = ThisWorkbook.Sheets(1)
    
End Sub

【VBA】最終行の取得方法

いくつか方法はありますが、今回紹介するのは途中で空白セルがあっても最終行を取得できる方法です。

対象列のデータがある最終行を取得

A列の最下行を取得します。

Sub GetLastRow()
    Dim lastRow As Long
    ' A列の最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox lastRow
End Sub

実行結果

【VBA】数値を文字列に変換する方法

数値を文字列に変換する方法を紹介します。

サンプルコード

Sub Example1()
    Dim text As String
    text = CStr(123)
    MsgBox text
End Sub

実行結果

CStrとStrの違い

Str(数値)でも文字列に変換できますが、正の数値の場合、先頭に空白文字が追加されるので使い勝手はCStrが良いと思ます。

比較コード

Sub Example1()
    Debug.Print Str(123)
    Debug.Print CStr(123)
End Sub

実行結果

【VBA】マクロファイルのパスを取得する方法

ブックのパスを取得する方法を紹介します。

フォルダパス

Sub Example1()
    Dim path As String
    path = ThisWorkbook.path
    MsgBox path
End Sub

実行結果

フルパス

Sub Example1()
    Dim path As String
    path = ThisWorkbook.FullName
    MsgBox path
End Sub

実行結果

【VBA】ログインユーザー名の取得

ログインユーザー名の取得方法のサンプルコードを紹介します!

サンプルコード

Sub Example1()
    Dim user As String
    user = Environ("USERNAME")
    MsgBox user
End Sub

実行結果

【VBA】エラー「型が一致しません」の解決方法

エラーメッセージ「実行時エラー ’13’: 型が一致しません」の原因と解決方法を紹介します!

原因

異なるデータ型の値を代入している。

下記の例だとLong型(数値)にString型(文字列)を代入している。

Sub Example1()
    Dim age As Long
    age = "30歳"
End Sub

解決策

適切なデータ型を代入する。

Sub Example1()
    Dim age As Long
    age = 30
End Sub

【VBA】エラー「オブジェクト変数またはWithブロック変数が設定されていません」の解決方法

エラーメッセージ「実行時エラー ’91’: オブジェクト変数またはWithブロック変数が設定されていません」の原因と解決方法を紹介します!

原因①

Setステートメントがない

Sub Example1()
    Dim rg As Range
    rg = Range("A1:C100")
End Sub

解決策①

Setステートメントを使用し代入

Sub Example1()
    Dim rg As Range
    Set rg = Range("A1:C100")
End Sub

原因②

対象のオブジェクトが空

Sub Example1()
    Dim rg As Range
    Set rg = Nothing
    rg.Clear
End Sub

解決策②

空のオブジェクトは処理しない

Sub Example1()
    Dim rg As Range
    Set rg = Nothing
End Sub

【VBA】エラー「オーバーフローしました」の解決方法

エラーメッセージ「実行時エラー ‘6’: オーバーフロー」の原因と解決方法を紹介します!

原因

Integer型の変数に-32,768~32,767の範囲を超えた値を設定している。

Sub Example1()
    Dim age As Integer
    age = 999999
End Sub

解決策

Long型に型を変更する。

Sub Example1()
    Dim age As Long
    age = 999999
End Sub

【VBA】エラー「変数が定義されていない」の解決方法

エラーメッセージ「コンパイルエラー: 変数が定義されていません」の原因と解決方法を紹介します!

原因

変数を宣言をしていない。

Sub Example1()
    age = 30
End Sub

解決策

変数を代入する前にDimを使って宣言する。

Sub Example1()
    Dim age As Long
    age = 30
End Sub