VBAのLSetで文字列やユーザ定義型を左寄せする方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

LSetの概要

文字列操作・データ配置 VBAの予約語

LSet

概要 LSet ステートメントは、文字列を固定長の変数に代入する際に左寄せにする、またはユーザー定義型のデータを別の型にコピーするために使用されます。

わかりやすく説明 LSet は、「文字を左側に詰めて配置する」ための命令です。また、ユーザー定義型のデータを別の型に変換するときにも使われます。

  • 固定長の文字列変数(String * n)に文字列を左詰めで代入する。
  • 余った部分はスペース(空白)で埋められる。
  • ユーザー定義型(Type)のデータを別の型の変数にコピーできる。

LSetの基本的な使い方(文字列操作)

固定長の文字列に左寄せでデータを代入する基本的な例です。

Sub LeftAlignString()
    Dim fixedStr As String * 10
    LSet fixedStr = "VBA"
    MsgBox "[" & fixedStr & "]", vbInformation, "LSetの例"
End Sub

解説:

  • Dim fixedStr As String * 10 で、10文字の固定長文字列を宣言。
  • LSet fixedStr = "VBA" で左寄せして “VBA” を代入。
  • 残りの7文字は自動的にスペースで埋められる。
  • メッセージボックスでは [VBA ] のように表示される。

ExcelでのLSetの活用例

Excelのセルに固定長のデータを作成する場合に活用できます。

Sub WriteFixedLengthString()
    Dim fixedStr As String * 15
    Dim rng As Range
    
    Set rng = ActiveSheet.Range("A1:A5")
    
    ' 文字列を左寄せしてセルに入力
    LSet fixedStr = "Excel"
    rng.Cells(1, 1).Value = fixedStr
    
    LSet fixedStr = "VBA"
    rng.Cells(2, 1).Value = fixedStr
    
    LSet fixedStr = "Macro"
    rng.Cells(3, 1).Value = fixedStr
End Sub

解説:

  • セルA1~A3に15文字の固定長データを入力。
  • 文字列は左寄せされ、余った部分はスペースで埋められる。

LSetの活用例(ユーザー定義型のコピー)

ユーザー定義型(Type)のデータを別の型にコピーすることも可能です。

Type PersonA
    Name As String * 10
    Age As Integer
End Type

Type PersonB
    FullName As String * 10
    Years As Integer
End Type

Sub CopyUserDefinedType()
    Dim p1 As PersonA
    Dim p2 As PersonB
    
    ' データの設定
    p1.Name = "Tanaka"
    p1.Age = 30
    
    ' データのコピー
    LSet p2 = p1
    
    ' 結果を表示
    MsgBox "コピー後のデータ: " & p2.FullName & ", 年齢: " & p2.Years
End Sub

解説:

  • PersonAPersonB の異なる型のデータを相互変換。
  • LSet p2 = p1p1 のデータを p2 にコピー。

エラーを回避する方法

LSetを使用する際に、型のミスマッチが起こらないようにエラーハンドリングを追加することが重要です。

Sub SafeLSetUsage()
    Dim fixedStr As String * 5
    On Error Resume Next
    
    LSet fixedStr = "123456" ' 5文字を超えるためエラー発生
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    Else
        MsgBox "LSet成功: " & fixedStr
    End If
End Sub

解説:

  • 固定長(5文字)を超える文字列を代入しようとするとエラーが発生。
  • エラーハンドリングを追加し、エラー時にはメッセージを表示。

LSetの注意事項

  • 固定長の文字列変数のみ使用可能: 通常の可変長文字列(String)では利用できない。
  • 長すぎる文字列は自動的に切り捨てられる: 指定の文字数を超える場合、末尾が削られる。
  • 空白の埋め込みに注意: 固定長文字列では余った部分がスペースで埋められるため、比較時に影響する可能性がある。

よくある質問

Q: LSet は通常の可変長文字列(String)に使えますか?
A: いいえ。LSet は固定長の文字列(String * n)でのみ動作します。
Q: 文字列の右寄せはできますか?
A: LSet は左寄せのみ可能です。右寄せする場合は RSet を使用してください。
Q: LSet でユーザー定義型をコピーする際に型が違うとどうなりますか?
A: フィールドのサイズが合わない場合、データが切り詰められたり、不正なコピーになる可能性があります。
Q: ExcelでLSetを活用するには?
A: 固定長のデータを作成し、セルに均等なフォーマットで入力したい場合に使用できます。

まとめ

  • LSet は、固定長の文字列を左寄せで格納するために使用される。
  • ユーザー定義型のデータをコピーする際にも利用可能。
  • Excelで固定長データを扱う際に便利。
  • 固定長を超える文字列は切り詰められ、足りない部分はスペースで埋められる。
  • エラーハンドリングを活用し、型のミスマッチを防ぐことが重要。