プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

下記のコードを 配列にしたいのですが
わかる方教えてくれませんでしょぅか

With ListBox1
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
.AddItem ""
.List(.ListCount - 1, 0) = Cells(i, 1).Value
.List(.ListCount - 1, 1) = Cells(i, 2).Value
Next
End With

質問者からの補足コメント

  • うーん・・・

    できれば下記のコードにredimかredimpreserve利用したもの
    でお願い申し上げます
    Dim val As Variant
    val = Range("F3").CurrentRegion.Value
    With ListBox1
    .ColumnCount = 2
    For i = LBound(val) To UBound(val)
    .AddItem ""
    .List(.ListCount - 1, 0) = val(i, 1)
    .List(.ListCount - 1, 1) = val(i, 2)
    Next
    End With

      補足日時:2021/09/06 22:52

A 回答 (2件)

こんばんは、横から失礼します。


val = Range("F3").CurrentRegion.Value
として配列の大きさを設定(確定)しているので、ご質問例のコードで
ReDimの必要があるようには思えません。
redimpreserveを使うケースの多くは、条件により配列操作を必要とする場合ですね

ちなみに
Dim val As Variant
val = Range("F3").CurrentRegion.Value
Debug.Print UBound(val, 1); "<-R:C->"; UBound(val, 2)
次元方向の大きさも分かると思います。

配列範囲をListBox1に登録するのであれば、
Dim i As Long, j As Integer
With ListBox1
.ColumnCount = UBound(val, 2)
For i = LBound(val, 1) To UBound(val, 1)
.AddItem ""
For j = 1 To UBound(val, 2)
.List(.ListCount - 1, j - 1) = val(i, j)
Next
Next
End With
    • good
    • 0
この回答へのお礼

いつもお世話になっております。
配列の大きさを設定(確定)している
なるほど です。
ありがとうございます。
こういう書き方があるのですね
.ColumnCount = UBound(val, 2)
ありがとうございました。

お礼日時:2021/09/07 08:14

>val = Range("F3").CurrentRegion.Value



最初のコードで使用するセル範囲と後のコードで使用するであろうセル範囲が違いますけど、どちらが正解なのか?

CurrentRegion は確かによく使われますがセル範囲の中間を基準として指定したつもりでも上や左もセルに値があれば有効になってしまい、
抜き出そうとする列や行に影響を与えると思います。

なのでコードだけで判断は出来ませんけど、

>できれば下記のコードにredimかredimpreserve利用したものでお願い申し上げます

何の為に必要だと思うのですか?
    • good
    • 0
この回答へのお礼

いつもありがとうございます
参考にいたします。
ありがとうございました。

お礼日時:2021/09/07 08:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!