• ベストアンサー

セルのデータをListBoxに表示したい。

エクセルVBAで作りたいのですが A列に同じ文章が13行、その下に違う文章で13行、又その下に違う文章で13行・・・・・と入っています。この文章の各先頭行だけ集めてUserFormの中のListBoxに表示させたいのです。わかりづらいかもしれませんがよろしくお願いします。 A列 あ あ  13行 あ ・ ・ い い  13行 ・ ・ う う  13行 ・ ・   ListBoxに あ い う え お ・ ・ と表示したいのです。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.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

260314
質問者

お礼

早速の回答有難う御座います。お陰様でコードを貼り付けた所表示する事ができました。今後ともよろしくお願いします。

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

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)
回答No.1

完全に表の書式が固まっていて、それが絶対にずれることがないとかで決め打ちでいいというのであれば 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 本来は各ブロックの先頭に何かの目印を置いて、その行もしくはその次の行のデータを取り込むという形にする方が良いかと思います。

260314
質問者

お礼

申しわけ有りません。データが増減する事を書き忘れました。ja7awuさんのコードを採用させて頂きます。有難問う御座いました。