- 締切済み
EXCEL-VBAでFormLoad時にListBoxへセルから取得した値を表示させたいのですが・・・
EXCEL-VBAでFormLoad時にListBoxへセルから取得した値を表示させたいのですが、うまく出来ません。 プログラム初心者ですので優しく教えていただけますでしょうか。 <やりたいこと> 3枚目のシートのC5からセルが空でない間、たてにデータを取得していき、それをListBoxに追加してひょうじさせたいのです。 <現状> 以下のように実装すると、「実装時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」となってしまいます。 <現在の実装> Private Sub UserForm_Activate() Dim i As Integer '読み込みセルの開始行 i = 5 'リストに追加するアイテムの初期化 s = "" '指定されたセルが空でない間ループする Do While Sheets(3).Range(Cells(i,3)).Address <> "" '抽出列の初期化 j = 3 '該当列が空でない間ループする Do While Sheets(3).Range(Cells(i,j)).Address <> "" & i < 6 s = s + Sheets(3).Range(Cells(i, j)).Address '列をひとつプラスする j = j + 2 Loop 'リストにアイテムを追加する lstMain.AddItem (s) '追加したアイテム変数をクリアする s = "" '次の行にいく i = i + 1 Loop End Sub どのようにあいたらよいかアドバイスお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 > Private Sub UserForm_Activate() Initializeの方が良いと思います。 例)Private Sub UserForm_Initialize() > Dim i As Integer セルの行に対する操作なので、Longの方が良いと思います。 例)Dim i As Long > Do While Sheets(3).Range(Cells(i,3)).Address <> "" この例ならRangeとAddressを取れば良いと思います。 Addressはセルの範囲参照文字なので""にはなりません。 例)Do While Sheets(3).Cells(i,3).Value <> "" > j = 3 > Do While Sheets(3).Cells(i, j) <> "" & i < 6 > s = s + Sheets(3).Cells(i, j) > j = j + 2 > Loop ↑ちょっと何をされたいのか解りません。(^^; 下記の例は、3枚目のシートのC5~CxxまでのデータをUserForm起動時にListBox(lstMain)に表示します。 Private Sub UserForm_Initialize() Dim myRange As Range With Worksheets(3) Set myRange = .Range("C5:C" & .Range("C65536").End(xlUp).Row) lstMain.List() = myRange() End With Set myRange = Nothing End Sub