• ベストアンサー

リストボックスの中に表示されている、項目を並べ替えたい

リスト2に5~6個の項目が入っている(表示されている) とします、イメージとして ---------------- aaa ccccc bbb eeeeeee yyyyy ---------------- bbbという項目が、上から3番目にあります これを、2番目(aaaと cccccの間)に移動したいのです 方法としては、bbbを選択し 「上」というコマンドを押すと、bbbが上に移動します これができたら、同様に「下」のコマンドも作りたいのですが ACCESS2003を利用しています

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1の方が同タイミングで同じような回答をされたので、「投稿する」をクリックするのを躊躇してしまいました。 コードを頭の体操代わりに作ってみましたのでアップします。 エラー処理は全く考慮していませんが、#1の方の仕様通りなら正しく動作します。 フィールド1 はリストに表示するフィールドです。 フィールド2 もリストに表示するフィールドですが、列幅は 0 にします。 リストは値集合ソースで フィールド2 で昇順設定を予めしておきます。 (このコードがご理解できれば逆のコードはご自分で作成できると思います。) Private Sub 上_Click() Dim SeqNo As Long Dim i As Long Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset If Me!リスト.ListIndex <= 0 Then Exit Sub SeqNo = Val(Me!リスト.Column(1)) i = Me!リスト.ListIndex Set Cn = CurrentProject.Connection Set Rs = New ADODB.Recordset 'Rs.CursorLocation = adUseClient Rs.Open "テーブル1", Cn, adOpenKeyset, adLockOptimistic 'Rs.Sort = "フィールド2 ASC" Rs.Find "フィールド2 = " & SeqNo Rs!フィールド2 = 0 Rs.Update Rs.MoveFirst Rs.Find "フィールド2 = " & SeqNo - 1 Rs!フィールド2 = SeqNo Rs.Update Rs.MoveFirst Rs.Find "フィールド2 = " & 0 Rs!フィールド2 = SeqNo - 1 Rs.Update Rs.Close: Set Rs = Nothing Cn.Close: Set Cn = Nothing Me!リスト.Requery Me!リスト.SetFocus Me!リスト.ListIndex = i - 1 End Sub

maaaa
質問者

お礼

丁寧にありがとうございました 理解度がそのレベルに達してなく 返事に躊躇してしまいました つまり はっきりわかった、段階でお礼を言おうと思って ありがとうございました

その他の回答 (1)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

リストボックスに表示する項目がテーブルを使ってなら出来ます。 テーブルのフィールドは表示する項目と順位を入力するフィールド 例えば 項目   順番(数値型フィールド) aaa     1 ccccc    2 bbb     3 eeeeeee   4 yyyyy    5 のような構成にして作り 上位に変更するなら リストボックスで選択されたレコードの順番を取得し-1した順番のレコードの順番を+1でUPDATEし選択されたレコードの順番を-1してUPDATEしてリストをRequeryすれば良いと思いますが。 選択をしたレコードの順位を1度違う他と重複しない数値に更新させておいてから処理すれば良いのではないでしょうか。 下位に変更するなら逆の発想で

maaaa
質問者

お礼

ありがとうございました

関連するQ&A

専門家に質問してみよう