- ベストアンサー
セルのデータをListBoxに表示したい。
エクセルVBAで作りたいのですが A列に同じ文章が13行、その下に違う文章で13行、又その下に違う文章で13行・・・・・と入っています。この文章の各先頭行だけ集めてUserFormの中のListBoxに表示させたいのです。わかりづらいかもしれませんがよろしくお願いします。 A列 あ あ 13行 あ ・ ・ い い 13行 ・ ・ う う 13行 ・ ・ ListBoxに あ い う え お ・ ・ と表示したいのです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2ですが、指定したシート名を反映させるのを忘れました。 13行に限らず、同じデータが続いているのを1つとする場合の例ですが、 フォームのInitializeイベントに次のように記述します。 指定した範囲内に空白セルがあれば、その直前までをリスト範囲とします。 これで如何でしょうか。 Private Sub UserForm_Initialize() Const ShName = "Sheet1" ' <---- RowSoruceのシート名指定 Const Hani = "A2:A100" ' <----- 〃 の範囲を指定 Dim Rng As Range For Each Rng In Worksheets(ShName).Range(Hani) If Rng.Text = vbNullString Then Exit For If Rng.Value <> Rng.Offset(1).Value Then ListBox1.AddItem Rng.Value End If Next Rng End Sub
その他の回答 (2)
- ja7awu
- ベストアンサー率62% (292/464)
13行に限らず、同じデータが続いているのを1つとする場合の例ですが、 フォームのInitializeイベントに次のように記述します。 指定した範囲内に空白セルがあれば、その直前までをリスト範囲とします。 これで如何でしょうか。 Private Sub UserForm_Initialize() Const ShName = "Sheet1" ' <---- RowSoruceのシート名指定 Const Hani = "A2:A100" ' <----- 〃 の範囲を指定 Dim Rng As Range For Each Rng In Range(Hani) If Rng.Text = vbNullString Then Exit For If Rng.Value <> Rng.Offset(1).Value Then ListBox1.AddItem Rng.Value End If Next Rng End Sub
- popesyu
- ベストアンサー率36% (1782/4883)
完全に表の書式が固まっていて、それが絶対にずれることがないとかで決め打ちでいいというのであれば ListBox1.Clear ListBox1.AddItem (Range("A1")) ListBox1.AddItem (Range("A14")) ... もうちょっとスマートにするなら For x = 1 To UsedRange.Rows.Count Step 13 Me.ListBox1.AddItem (Cells(x, 1)) Next x 本来は各ブロックの先頭に何かの目印を置いて、その行もしくはその次の行のデータを取り込むという形にする方が良いかと思います。
お礼
申しわけ有りません。データが増減する事を書き忘れました。ja7awuさんのコードを採用させて頂きます。有難問う御座いました。
お礼
早速の回答有難う御座います。お陰様でコードを貼り付けた所表示する事ができました。今後ともよろしくお願いします。