配列の基本を教えてください | |
---|---|
[194595] 配列の基本を教えてください- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ おかめ -(2022/01/11(19:18)) □U R L/ おせわになります。 A列に以下のような文字列のデータがあります。これを配列に格納して作業をしたいのですが、何が間違っているのかわかりません。わかりやすく指導をしていただけませんでしょうか。 タイトル A B C D Sub test() Dim 範囲 As Variant 範囲 = Range(Range("A2"), Range("A5")).Value Debug.Print 範囲(2) '←ここで、インデックスが有効範囲にありませんとなります。 End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194596] Re[1]: 配列の基本を教えてください- ■記事引用/メール受信=OFF■ □投稿者/ OK -(2022/01/11(19:31)) □U R L/ 回答ではありません。 Sub test2() Dim 範囲 As Range Set 範囲 = Range(Range("A2"), Range("A5")) MsgBox 範囲(2) End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194597] Re[2]: 配列の基本を教えてください- ■記事引用/メール受信=OFF■ □投稿者/ おかめ -(2022/01/11(19:43)) □U R L/ OKさん ありがとうございます。Rangeですか...Variantではないのですね。でもなぜVariantがダメなのか、もしこういうときにVariantを使うことができるのであればどう書き換えたらいいのか、ご教示くださるとうれしいです。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194598] Re[3]: 配列の基本を教えてください- ■記事引用/メール受信=OFF■ □投稿者/ ひまじん -(2022/01/11(20:34)) □U R L/ Variantでも良いんですよ。 ただ配列がどのような状態になっているのか理解できてないだけです。 範囲 = Range(Range("A2"), Range("A5")).Value 上記の場合、配列の状態は下記となります。 範囲(1, 1) 範囲(2, 1) 範囲(3, 1) 範囲(4, 1) よって範囲(2)なんて指定してもそんなものは存在しないんです。 |
[194599] Re[4]: 配列の基本を教えてください- ■ / 記事引用/メール受信=OFF■ □投稿者/ おかめ -(2022/01/11(21:27)) □U R L/ ひまじんさん ご教示いただき、ありがとうございます。動画やサイトを見てもDebug.Print(1)といった記述があったので、てっきりそれで大丈夫だと思っていました。一列まとめてオブジェクトに放り込む場合でも、範囲(2, 1)のように後者(カンマ1)が必要なんですね。 Sub test() Dim 範囲 As Variant 範囲 = Range(Range("A2"), Range("A5")).Value MsgBox 範囲(2, 1) End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194600] Re[5]: 配列の基本を教えてください- ■ / 記事引用/メール受信=OFF■ □投稿者/ おかめ -(2022/01/11(22:27)) □U R L/ 大事なことをうかがっていませんでした。申し訳ありません。ひまじんさんのコードをみますと、0という数字がありません。 範囲 = Range(Range("A2"), Range("A5")).Value 範囲(1, 1) 範囲(2, 1) 範囲(3, 1) 範囲(4, 1) 配列は0から始まると聞いたことがあるのですが、なぜこれは1から始まるのでしょうか?なにかルールみたいなものがあるのでしょうか? この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194601] Re[6]: 配列の基本を教えてください- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/01/11(23:25)) □U R L/ 始まりなんてプログラマーは何とでもできます。 Dim 範囲(1, 1) と定義すれば 範囲(0, 0) 範囲(0, 1) 範囲(1, 0) 範囲(1, 1) ですけど、 Dim 範囲(100 To 100, 1 To 1) と定義すれば 範囲(100, 1) のみです。 でもこれは、RangeのValueプロパティさんが勝手に(?)お作りになった配列を格納しただけです。 ↓ >範囲 = Range(Range("A2"), Range("A5")).Value Valueプロパティは、そう言う始まりの配列を作る仕様だってことです。 |
[194602] Re[7]: 配列の基本を教えてください- ■記事引用/メール受信=OFF■ □投稿者/ ひまじん -(2022/01/12(06:02)) □U R L/ 本当にそうなのかはさておき、 セルの範囲って行と列で表現されるじゃないですか。 よって範囲(行, 列)でアクセスするといったイメージで私は理解しています。 例えば Range(Range("A2"), Range("A5")).Cells(2, 1).Value とやると範囲(2, 1)の値が取れるので、この「Cells」と同様の挙動なんですよね。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194603] Re[8]: 配列の基本を教えてください- ■ / 記事引用/メール受信=OFF■ □投稿者/ おかめ -(2022/01/12(08:39)) □U R L/ 半平太さん、ひまじんさん お返事が遅くなり申し訳ありません。動画などでは0が始まりなので注意しなさい、と言われるのですが、そうではないのですね。お二人の解説、とてもよくわかりました。ありがとうございました。 |
このトピックに書きこむ |
---|