『Variant型配列のカウント方法』(訓練中)
A1セル〜F4セルまで以下のようなサンプルデータを作りました。
001 A 1 2 3
002 B 4 5 6
003 C 7 8
004 D 9 10 11 12
以下のようなコードを作りました。
実行結果は思った通りなのですが、
実データで使うときには、
lngLastCol - 2
という求め方ではなく
varDataの個数分だけ
というコードにしたいです。
1行目は3
2行目は3
3行目は2
4行目は5
Variant型配列のカウント方法を調べてみたのですが、
UBound(varData)
でも
UBound(varData) - LBound(varData) + 1
でも
1しか返ってきません。
配列の数を取得する方法をご存じの方
教えていただけないでしょうか。
よろしくお願いいたします。
Sub test()
Dim varData As Variant Dim lngLastCol As Long
For lngRow = 1 To 4 lngLastCol = Cells(lngRow, Columns.Count).End(xlToLeft).Column varData = Range(Cells(lngRow, "C"), Cells(lngRow, lngLastCol)).Value Range("C" & lngRow + 10).Resize(, lngLastCol - 2).Value = varData Next lngRow
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
二次元配列の場合 UBound(varData, 2) (jindon) 2025/08/12(火) 12:22:47
既に適切な回答がありました。追記します。
UBOUND関数のヘルプをよく読まれることですね。(UBOUNDの上にカーソルを置いてF1キーを押します) dimension引数の意味を調べて下さい。 (xyz) 2025/08/12(火) 12:35:18
配列の要素数の取得方法については、お二人のご回答を参考に勉強していただくとして、 今回の場合「別に配列を使用せずとも・・・」と思いました。 ↓一案としてご参考。
Sub test2() Dim DataRange As Range Dim lngLastCol As Long Dim lngRow As Long
For lngRow = 1 To 4 lngLastCol = Cells(lngRow, Columns.Count).End(xlToLeft).Column Set DataRange = Range(Cells(lngRow, "C"), Cells(lngRow, lngLastCol)) DataRange.Offset(10).Value = DataRange.Value Next lngRow End Sub (ん〜) 2025/08/12(火) 17:09:48
質問者さんは、1行分を配列にしているのだから、一次元配列になると勘違いされていませんか? 矩形状に連続したセル範囲を指定して配列に格納する場合、 1行(又は1列)だとしても二次元配列になります。 (unknown) 2025/08/12(火) 17:47:55
UBound(varData, 2)でできました。
頭が悪くてすみません。
varDataは
1行目ならC1セル〜E1セルまでが配列になるのではと思ったのです。
varData(1 to 3)
みたいに。。。
なのでUbound(varData) ※Ubound(varData, 1)の1を省略
で行けるかなと思ったのですが、1しか返ってきませんでした。
ネットで調べて
UBound(varData) - LBound(varData) + 1
でも1しか返ってきませんでした。
>1行分を配列にしているのだから、一次元配列になると勘違いされていませんか?
まさに仰る通りです。
varDataをローカルウインドで確認したところ、
varData(1 to 1, 1 to 3)
となっていました。
(1 to 1, 1 to 3)になっているのなら、
Demensionに2を入れる事で
3が返ってくるのはわかるのですが、
1 to 1の部分が、なぜできるのか、
どういうことなのか理解できません。
申し訳ありませんが、この部分の解説も頂けないでしょうか。
追加質問になりますが、
何卒よろしくお願いいたします。
(訓練中) 2025/08/12(火) 19:06:15
これはシートの範囲が元々二次元配列構造になっているからだと思います。 連続した2セル以上のデータを配列に格納した場合、その範囲が一列又は一行のみでも二次元配列になります。 (jindon) 2025/08/12(火) 20:18:40
つまり、
縦方向に1 to 1
横方向に1 to 3
になるってことですね。
そして、
縦方向が1つ目のDemension
横方向が2つ目のDemension
になるのですね。
改めにご回答くださった皆様に感謝いたします。
(訓練中) 2025/08/12(火) 20:33:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.