- 締切済み
エクセル リストボックスの順番入替について
エクセル2010で取引先の会社の名簿を作成しています。A列に取引先会社番号(1~)、C列に会社名、D列以降に会社情報を表記しています。B列は取引会社に子会社があれば1、なければ0としています。例)1/0 A商事 1/1 B商事(A商事子会社) 2/0 C商事 3/0 D商事 3/1 E商事(D商事子会社)。 順番を入替時用にユーザーフォームのリストボックスに直近の取引会社(A、C、D社)を表示しコマンドボタンで順番を入れ替えてます。(A、C、D社→D、C、A社等) ここまでは過去の例等を参考にしてできました。 リストボックスの順番にシートを入れ替える時、子会社がある場合どうしたらいいのでしょうか。また、D、C、A社順にした場合、並び替えだけだと3/0D商事、3/1E商事、2/0C商事、1/0A商事、1/1B商事となりますが、B列の番号を1/0D社、1/1E社、2/0C社、3/0A社,、3/1B社と変えるには、どうしたらよいか教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
#1です。 私の#1での説明記述上、漏れたのは、プログラムの中のAdditemの順序を変更することです。記述の(1)-(3)に、(4)に当たるものを追加します。 例えば 個別に項目を指定する方式を採った場合は Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "" UserForm1.ListBox1.AddItem "AA" UserForm1.ListBox1.AddItem "CC" UserForm1.ListBox1.AddItem "BB" End Sub のように、記述したコード行の順序のAA,CC、BBの順序に項目がリストボックスに表示されます。 ーー ちなみに Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "" UserForm1.ListBox1.AddItem Range("A1") UserForm1.ListBox1.AddItem Range("A2") UserForm1.ListBox1.AddItem Range("A3") End Sub のような書き方もできます。 質問はこういう状況が再々起こって面倒ということか?
- tsubu-yuki
- ベストアンサー率46% (179/386)
うんまぁ・・なんというか・・・ パっと見た感想なんですけどね。 「取引先会社番号」ってそんなにコロコロ変わるもんです? 社内の基準がどうなっているか、部外者にはわからんのですが、 まずはその「コロコロ変わる」システムを見直すのが前では? ・・・と読めてしまいます。 一度クローズし、もう少しよく考えて再投稿なさってはいかがでしょう。
- imogasi
- ベストアンサー率27% (4737/17070)
質問の表現が、ゴタゴタしていて、判りにくい。 特に子会社の例など質問者の特有のニーズで、丁寧に説明しないと状況がわか啞ない。 A現在データーー>B変わってほしい順のデータ を2列に並べてデータ実例で説明すべきではないか。 あるいは子会社のデータを数を多くしてセルの列に表現して説明すべきだろう。 ーー エクセルのリストボックスを使っているらしいが、 まず、リストボックスをユーザーフォームに乗せているということだね。 エクセル程度のコントロールでは、マウスなどを用いて、アイテム(表示明細)の順序をマウスなどで入れ替える操作は作られていないと思う。 このアイテムはエクセルでは、もとになる明細のあるセル範囲をセル範囲記号で(A1:A10のような文字列)指定する道も作られていてそれがメインのやり方だ。 だからそのセル範囲のデータを並べ替えすれば、仕舞ではないのか。 VBAなどを使えば(特にACCESSで)配列やSQL文を指定して、その実行結果で指定できるようになっている。SQLではOrder Byで結果の順序を簡単に指定できる。 だから順番を入れ替えるには、(1)手動でマウスで並べ替えるや、(2)ソート後には望みの順になるようなソートキーを新たな列に作って絵そこでデータ全体範囲をソートして使うほかないと思う。 ーー セルにあるデータを他の順序に並べ替えるのはワーク列が必要だったりして 非常に煩雑。並べ替えるべき順序数値を別に振って、元データと順序数を 同時に並べ替えるようなことをするほかない。後先がはっきりしているならば プログラムで、初歩的なアルゴリズムで、並べ替えもできそうだが、いづれにしろ、プログラム(VBA以上)ができないとダメ。 ーー エクセルを離れて、処理系により、リストボックスのDataSourceは (1)エクセルのセル範囲指定方式(セル範囲の文字列で) (2)配列 (3)SQL文そのものの指定 などを見かけるが(2)、(3)は順序を変えられる。 その場合もSort(並べ替え)の機能を使うだろう。 ーー 仕事にエクセルを使っているようだが、VBAの駆使が必須ではないか。 色々な考え方や、対処法が拡がると思う。 そうすれば、本件質問は、つまらない質問にと思えるのではないか。