質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3023閲覧

リストボックス内の上下移動について

Campus_

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/08/23 07:21

・リストボックス内で上の端にある場合上に順序をいれかえると消えてしまいます。

※下の端にある場合、下に移動させると同じように消えてしまいます。

VBA

1Private Sub btn_ListUp_Click() 2 3Application.ScreenUpdating = False 4On Error GoTo ErrLabel 5 6Dim n As Long,buf1 As String,buf2 As String 7 8n = Listbox1.Listindex 9buf1 = ListBox.List(n,0) 10buf2 = ListBox.List(n,1) 11 12ListBox1.RemoveItem n 13ListBox1.AddItem ““,n-1 14ListBox1.List(n-1,0) = buf1 15ListBox1.List(n-1,1) = buf2 16ListBox1.ListIndex = n-1 17Exit Sub 18 19Errlabel: 20 MsgBox “移動するものが見つかりません。“ 21End Sub 22

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/08/24 00:18

上の端にあるものを、上に移動させるってどういうことですか?移動する必要ないのでは?ステップ実行してデバッグしました?
guest

回答1

0

ベストアンサー

リストボックスの上端にあるときはインデクスが0ですので、
プログラム中のステートメント

ListBox1.AddItem "",n-1

で挿入しようとしているインデクスが-1となり正常に動作しません。
※Excel2010で試したところ、インデクスに-1を指定するとリストの
末尾に追加されるようです。

このため、処理対象が上端にある場合は上への移動を、下端にある場合は
下への移動をスキップさせる必要があります。


なお、移動というのは交換なので、双方の値を入れ替えれば実現でき、
リストの要素のRemoveやAddは不要です。

さらに、入れ替えるルーチンを別に作れば上/下移動の主要部を共通化で
きます。

【例】

Private Sub btn_ListUp_Click() ' : ' 中略 ' : n = ListBox.ListIndex If (n < 1) Then Exit Sub Call exchange(n, n - 1) end sub Private Sub btn_ListDown_Click() ' : ' 中略 ' : n = ListBox1.ListIndex if (n >= ListBox.listCount-1) then exit sub call exchange(n, n + 1) end sub Private sub exchange(byval n1 as long, byval n2 as long) ' ' 共通部。インデクスn1とn2の要素の値を交換する ' Dim buf0 As String: buf0 = ListBox.List(n1, 0) Dim buf1 As String: buf1 = ListBox.List(n1, 1) ListBox.List(n1, 0) = ListBox.List(n2, 0) ListBox.List(n1, 1) = ListBox.List(n2, 1) ListBox.List(n2, 0) = buf0 ListBox.List(n2, 1) = buf1 end sub

投稿2018/08/24 01:21

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問