- ベストアンサー
ExcelVBA リストボックスの複数選択処理で問題発生
- ExcelVBAでリストボックスの複数選択処理を実装していますが、うまくいきません。
- 選択した行の特定のセルを変更するという処理がうまく機能していません。
- 試したコードの一部をコメントアウトしてデバッグしたところ、選択した行の状態が正しく反映されていないことがわかりました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
リストボックスへのアイテムの追加をどのようになさっているのでしょう 私は簡易的に 4列8行程度の仮のデータテーブルシートに作って その領域をRowSourceに設定して実行しております バラバラのセルから1行のの項目を構築する場合 ListBox1.AddItem ListBox1.Item( n, 0 ) = Cells( r1, c1 ) ListBox1.Item( n, 1 ) = Cells( r2, c2 ) ListBox1.Item( n, 2 ) = Cells( r3, c3 ) ListBox1.Item( n, 3 ) = Cells( r4, c4 ) といった具合にしませんか? この手法なら セルに書かれている左右はされないはずですが ・・・
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
VirtualPC2007上の WinVista Ultimate + Excel2007で同様のコードを実行してみましたが 意図したとおりの動作でしたよ … データをインポートした際などに リストボックスの A/Bに 余分なスペースとかが混入していたりしませんでしょうか if Listbox1.List(ListRow, 3) = "A" then を if Trim(Listbox1.List(ListRow, 3)) = "A" then としてやるとか 07.5 if Len(ListBox1.List(ListRow))=1 then 08 If Listbox1.List(ListRow, 3) = "A" Then 09 Cells(4, Retsu).Value = "B" 10 Else 11 Cells(4, Retsu).Value = "A" 12 End If 12.1 else 12.2 MsgBox "設定不良" 12.5 end if などと検査してみるとか …
お礼
たびたびありがとうございます。 いろいろ検証しましたが、うまくいかない原因が判明しました。 実は、 リストボックスの4列目の"A"/"B"ですが、 参照しているセルは"A"/"B"の直接の値ではなく、 Cells(4, Retsu)のセルから参照している(=C3とか=G3にしている)ことが原因みたいです。 "A"/"B"の直接の値にすれば、問題なく動きました。 ただ、やりたいことは Cells(4, Retsu).Value = "A" Cells(4, Retsu).Value = "B" と入力されたものをリストボックスに改めて表示させて、 それを元にユーザーフォームで変更させるかどうか判断基準とさせたいのですが。。。。 このようなことは、仕様上不可能なのでしょうか? たびたびすみませんが、宜しくお願いします。
- redfox63
- ベストアンサー率71% (1325/1856)
7と8の間に Debug.Print ListRow, Retu, ListBox1.List(ListRow,3), Cells(4,Retu) と記述して 選択した行が出力されるの確認しましょう WinXP SP3 + Excel2003(SP3) では正常に動作していますよ
お礼
redfox63さん、早速のご回答ありがとうございます。 Drbug.Print試してみました! が、同じ現象が出てしまいます>< 2003で正常に動き、2007で動かないとなると、 あきらめるしかないですかね。。。 単純なコードなだけに、見落としているところが見つからないです。
お礼
当初は、リストボックスへのアイテムの追加は、 値が入っているバラバラのセルを参照して、 別テーブルを作成し、その領域をRowSourceに設定してました。 (これでは単一選択OK、複数選択はダメでした) が、 ご教授いただきましたバラバラのセルから直接項目を構築する方法で、 無事に複数選択でもOKで、すべて意図した通りに動きました!! 何がよくて、何が悪かったのかはまだ不明なのですが、 半分諦めていた中、数日間お付き合いいただきまして、誠にありがとうございます。 非常に助かりました。