【VBA】リストボックスの表示内容(値)をマクロで変更・再フォーマットする方法

目次

はじめに

ユーザーフォームのリストボックスにシートの表を表示した後、「特定の列の数値を3桁のゼロ埋めにしたい」「商品名の後ろに特定の文字列を追加したい」といったように、表示されている内容を整形・加工したい場合があります。

一度リストボックスに読み込んだデータを、VBAコードを使って直接書き換えることが可能です。これにより、元のシートのデータを変更することなく、フォーム上での見た目だけを分かりやすく調整することができます。

この記事では、リストボックスの項目をループ処理で一つずつ取得し、表示されている値を直接変更(再フォーマット)するための、実用的なテクニックを解説します。


リストボックスの値を変更するVBAサンプルコード

このマクロは、「フォーマット実行」ボタンがクリックされたときに、DataTableBox という名前のリストボックスに表示されている内容を整形します。

  • 1列目(ID): 4桁のゼロ埋めにする (例: 120012)
  • 2列目(項目名): 末尾に 【済】 を追加する
  • 3列目(数量): 3桁区切りのカンマを追加する (例: 15001,500)

ユーザーフォームのコード

' 「フォーマット実行」ボタン(FormatButton)がクリックされたときの処理
Private Sub FormatButton_Click()

    '== 変数を定義します ==
    Dim i As Long
    
    ' Withブロックで対象のリストボックス(DataTableBox)を明示
    With Me.DataTableBox
    
        '== リストの全行をループ処理(0行目はヘッダーと想定し、1行目から開始) ==
        For i = 1 To .ListCount - 1
        
            '--- 1列目(インデックス=0)の値をゼロ埋め4桁にフォーマット ---
            .List(i, 0) = Format(.List(i, 0), "0000")
            
            '--- 2列目(インデックス=1)の値に文字列を追加 ---
            .List(i, 1) = .List(i, 1) & "【済】"
            
            '--- 3列目(インデックス=2)の値を桁区切りにフォーマット ---
            .List(i, 2) = Format(.List(i, 2), "#,##0")
            
        Next i
        
    End With
    
    MsgBox "リストの表示をフォーマットしました。", vbInformation

End Sub

コードの解説

For i = 1 To .ListCount - 1

この For ループが、リストボックスの項目を順番に処理するための基本構造です。

  • .ListCount: リストボックスの総行数を返します。
  • i = 1 To ...: リストのインデックスは0から始まりますが、ここでは1行目(インデックス0)が見出し行であると仮定し、2行目(インデックス1)から処理を開始しています。もし見出し行がなければ i = 0 To .ListCount - 1 とします。

.List(i, 0) = Format(...)

この一行が、リストの値を直接書き換える核心部分です。

  • .List(i, 0): 左辺と右辺の両方で使われています。
    • 右辺.List(i, 0) は、現在の値(例: 12)を取得するために使われます。
    • 左辺.List(i, 0) は、フォーマット後の新しい値(例: "0012")を**代入(設定)**するために使われます。
  • Format(...): VBAの Format 関数は、数値や日付を指定した書式の文字列に変換します。
    • "0000": 4桁のゼロ埋め。
    • "#,##0": 3桁ごとのカンマ区切り。

このように、For ループと .List(行, 列) プロパティを組み合わせることで、リストボックス内のデータを自在に操作することができます。


まとめ

今回は、ユーザーフォームのリストボックスに表示されている内容を、後からVBAで変更する方法を解説しました。

  • .ListCount プロパティでリストの行数を取得し、ループの回数を決める。
  • .List(行インデックス, 列インデックス) プロパティを使って、特定のセルの値を取得したり、新しい値を設定したりできる。
  • Format 関数を組み合わせることで、数値や日付の表示形式を整えることができる。

このテクニックは、シート上の元データはそのままに、フォーム上の表示だけをユーザーにとって見やすい形に整えたい場合に非常に有効です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次