← コード一覧へ戻る
実務UserForm

リストボックス内のデータを移動する

選んだ1行をひとつ上へ移動します。先頭行・未選択では処理せず、隣り合う値を入れ替えます。

実行前に確認

  • この例はRowSourceなしの1列リスト専用です。複数列に拡張する場合は、対応が崩れないよう行の全列を入れ替えます。
  • コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。

1サンプルコード

'【貼付先:UserForm1 のコードモジュール】
Option Explicit

Private Sub UserForm_Initialize()
    With Me.ListBox1
        .MultiSelect = fmMultiSelectSingle
        .AddItem "A案"
        .AddItem "B案"
        .AddItem "C案"
    End With
    Me.CommandButton1.Caption = "ひとつ上へ"
End Sub

Private Sub CommandButton1_Click()
    Dim i As Long, previousValue As Variant
    i = Me.ListBox1.ListIndex
    If i <= 0 Then Exit Sub
    With Me.ListBox1
        previousValue = .List(i - 1, 0)
        .List(i - 1, 0) = .List(i, 0)
        .List(i, 0) = previousValue
        .ListIndex = i - 1
    End With
End Sub

図で見る選択行を上へ

イメージ図

選んだ1行をひとつ上へ移動します。先頭行・未選択では処理せず、隣り合う値を入れ替えます。

  1. 確認

    未選択・先頭なら終了

  2. 交換

    選択行と1つ上の値を交換

  3. 追跡

    選択位置も1つ上へ

各操作は、このガイドに指定されたフォームのコードで行います。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。

  2. 2

    ツールボックスからListBox1とCommandButton1を各1個を置き、各コントロールの[(Name)]が記載どおりか確認します。

  3. 3

    UserForm1を右クリック→[コードの表示]を開き、掲載コード全体をフォームのコードモジュールへ貼り付けます。標準モジュールには貼り付けません。

  4. 4

    VBEでUserForm1を選び、F5でフォームを表示します。 「C案」を選び、「ひとつ上へ」を押します。

  5. 5

    並び順が「A案・C案・B案」になり、「C案」が引き続き選択されます。

使っている機能の公式ドキュメント(Microsoft Learn)