配列の考え方 | |
---|---|
[195696] 配列の考え方- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ 吉田 -(2023/04/18(17:59)) □U R L/ 配列の次元の考え方ですが、 格納したい要素が@何番目のデータか、Aそしてそこに何を入れるかという場合、 1次元でデータが横に2個(何番目とその中身)というイメージですが、 これでも2次元としないといけないのでしょうか。 2個の内容をくっつけて仕舞えば(例えば「105東京」)間違いなく1次元なのですが、 何番目(105)と中身(東京)はデータ形式を別に持ちたいのです。 もう1点、 上記で、2次元となる場合、実際の定義はどうするのでしょうか。 dim table() as xxxx のxxxx部分です。 longとstringが混在するので、variantとするのでしょうか。 最後に、前段で要素の数が決まるので、 redimを使うことになりますが、 2次元の場合は、redim table (20,20) のようになるのでしょうか。 以上、上手く説明できませんが宜しくお願いします。 ++++++++++++++++++++ OS ⇒OTHER Version⇒Excel 2003 ++++++++++++++++++++ |
[195697] Re[1]: 配列の考え方- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/04/18(19:15)) □U R L/ 1次元でいいんじゃないですか? Sub test() Dim table() As String ReDim table(1 To 200) table(105) = "東京" Debug.Print table(105) '東京 End Sub |
[195698] Re[2]: 配列の考え方- ■記事引用/メール受信=OFF■ □投稿者/ 吉田 -(2023/04/18(20:06)) □U R L/ 半平太様、早速ありがとうございました。 なるほどですね、気が付きませんでした。 ただ、追加で教えてください。 教えて頂いた方法では、 実際にデータが1件だけ(105の東京)の場合は 200個用意したエリアが無駄になるのでしょうか。 それとも使わなければ、(例示の場合は)1個で済むのでしょうか。 また、質問した純粋な2次元の時のデータ形式指定はどうやるのでしょうか。 例えば、1次は数値で2次は文字の場合です。 しつこくてすいません、 宜しくお願いします。 |
[195699] Re[3]: 配列の考え方- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/04/18(20:51)) □U R L/ >実際にデータが1件だけ(105の東京)の場合は >200個用意したエリアが無駄になるのでしょうか。 無駄になります(まぁ、昨今誰もそんな無駄は気にしないですけど)。 そもそも「格納したい要素が@何番目のデータか」ですから、 1から105番までは用意しておかなければ理屈としておかしいです。 「105」と「東京」がセットで1つだけの話なら、 キーが105と言う話にすぎないです。順番の話じゃないです。 ※順番は多分1番目でしょうね >また、質問した純粋な2次元の時のデータ形式指定はどうやるのでしょうか。 >例えば、1次は数値で2次は文字の場合です。 1次とか2次と言うのは次元の話でして、卑近な例としてエクセルのシートで言えば、 行数x列数の配列の広がり(大きさ)を意味するのであって、 1行目のデータ型が何、2行目のデータ型が何と定義する訳ではないです。 実際に、1行目に番号を入れて、2行目に都市名を入れて使う予定であれば、 データ型としてはVariantにするのが普通でしょうね。 Sub test() Dim table() As Variant ReDim table(1 To 2, 1 To 1) table(1, 1) = 105 table(2, 1) = "東京" Debug.Print table(1, 1), table(2, 1) '105 東京 Debug.Print Application.HLookup(105, table, 2, False) '東京 End Sub |
[195700] Re[4]: 配列の考え方- ■ / 記事引用/メール受信=OFF■ □投稿者/ 吉田 -(2023/04/19(03:25)) □U R L/ 半平太様、何回もありがとうございました。 私の大きな考え違いでした。 全く配列を分かっていませんでした。 何次元に成ろうとも、指す場所は1個なのですね。 3次元であっても、縦、横、高さ、で指す箇所は1個しかない。 だから、データ形式は1個でよい、というより1個しかない。 お手間を掛けました。 |
このトピックに書きこむ |
---|