• ベストアンサー

2次元配列の初期値

こんにちは VBで2次元配列に初期値をまとめて入れる方法がわからなくて困っています。 簡単なはずなのにわかりません。 教えてくれるようお願いします。

  • lmi
  • お礼率17% (17/95)

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

田吾作7です。 あぁーすいません。 初期化だと思ってて、勘違いしてました。すいません。。。 初期化ではなく、初期値のセットですね。。。 Variant型でもよければ   dim wkAry as Variant 'バリアント宣言   wkAry = Array(Array(10, 100, 42, 90), Array(50, 30, 60, 30)) といった形でできます。 もし何度も同じ初期値をセットする必要があるのであれば、メモリコピーをお勧めします。 それが一番リソースを消費しない方法だと思います。 以下にソースを記します。 手順1.二次元配列の初期値のマスタを作成(CreAryMst) 手順2.ワークの二次元配列に初期値をセット(InitAry) 手順3.ワークを使用したロジックの実行(ユーザの処理) 手順4以降は手順2または手順3の処理の繰り返し Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private mstAry(1, 3)  As Long '二次元配列の初期値のマスタ Private matrixCount   As Long '配列要素数 Sub Main()   Dim wkAry(1, 3)   As Long '実際に操作する二次元配列      '二次元配列の初期値マスタを創生   Call CreAryMst      '変数に初期値をセットする   Call InitAry(wkAry(0, 0))    End Sub '二次元配列の初期値マスタを創生 Sub CreAryMst()   Dim dmyAry As Variant   Dim i    As Long   Dim j    As Long      Dim min1  As Long   Dim max1  As Long   Dim min2  As Long   Dim max2  As Long      min1 = LBound(mstAry, 1)   max1 = UBound(mstAry, 1)   min2 = LBound(mstAry, 2)   max2 = UBound(mstAry, 2)      '配列要素数を取得   matrixCount = (max1 - min1 + 1) * (max2 - min2 + 1)      '初期値をダミー変数にセット   dmyAry = Array(CLng(10), CLng(50), CLng(100), CLng(30), CLng(42), CLng(60), CLng(90), CLng(30))      '初期値をセットする   For i = min1 To max1     For j = min2 To max2       mstAry(i, j) = dmyAry(i * max2 + j)     Next j   Next i End Sub '変数に初期値をセット Sub InitAry(inLngAryTop As Long)   Call CopyMemory(inLngAryTop, ByVal VarPtr(mstAry(0, 0)), ByVal LenB(inLngAryTop) * matrixCount) End Sub こうすることにより、初期値のセットが一瞬で済むので、初期値セット毎にかかる負荷が抑えることができます。

その他の回答 (3)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

再度投稿します。田吾作7です。 imogasiさんが >前の方の回答は、JAVA言語などで言う初期化の回答で はないかとおもいます。 とありますが、VBですよ(^^;) MSDNでVBのEraseの説明が見当たらなかったのですが、VBScriptのページで見つかりましたのでアドレスを記します。 http://www.microsoft.com/JAPAN/developer/library/vbscrip5/vsstmerase.htm lmiさんは >VBで2次元配列 と言ってましたが、宣言はどのような形でしてるのでしょう? 考えられる2次元配列の創生方法は3つあります。 (1) Dim 変数名(5,10) As Long (2) Dim 変数名() As Longとしておいて Redim 変数名(5, 10) As Longと再度配列要素を再宣言 (3) Dim 変数名 as Vaiant 変数名 = Array(Array(3, 5, 9), Array(1, 6, 4)) として、二次元配列を創生しながら値をセット Erase 二次元配列の処理結果は それぞれDimで宣言したときの状態に戻ります ですので (1)は全て0が入ります。 (2)は配列要素未宣言の変数になります。 (3)は単なるVariant型の変数になります メモリの開放にもつながるので、初期値が「0」もしくは、文字列なら「""」とするならEraseをお勧めします。

参考URL:
http://www.microsoft.com/JAPAN/developer/library/vbscrip5/vsstmerase.h
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

前の方の回答は、JAVA言語などで言う初期化の回答で はないかとおもいます。質問者は 「自分の思うリテラル値に設定したい」というのが、質問の真意では?私も初心者ですが、勘違いであればお許し下さい。実例を書きます。ご参考に。   ・Optin Base 1は Subの外に書く   ・下記はArray関数を使ったもの   ・Array関数は1次元しか使えない   ・下記プログラムはフォームをクリックして実行    してください   ・---は区切りに表示しただけ  Option Base 1 Private Sub Form_Click() Dim a(3, 4) As String b = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", _ "10", "11", "12") For i = 1 To 3 For j = 1 To 4 a(i, j) = b(4 * (i - 1) + j) Next j Next i Rem-------- For i = 1 To 3 For j = 1 To 4 Form1.Print a(i, j) Next j Form1.Print "---" Next i End Sub 初級中級のVBの解説書には案外、初期化や2次元配列の ことを解説してないですね。2-3日前にも類似質問 が有りました。2、3次元配列の内容を1次元配列a=Array(....)で表せると思います。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

Erase 二次元の変数名 ↑ これで初期化

関連するQ&A

  • 3次元配列について!!

    本をみても例とかあまり載ってないから、vbで3次元配列はできるのか、できるのであればその方法も教えてください。

  • 4次元配列を2次元配列にするには?

    多次元配列を1次元配列に組み替える方法をよく目にするのですが、4次元配列を2次元配列にする方法がわかりません。 4次元配列で表したものを連立一次方程式で解きたいので2次元配列に置き換えなければなりません。 配列の中はどういう風におけばいいのでしょうか。 よろしくお願いします。

  • 二次元配列の初期化の方法。

    java初心者です。 二次元配列(9×9)の要素すべてに同じ値で初期化したいのですが、どういった方法があるのでしょう? {{0,0,0,0,0,0,0,0,0,},{0,0,・・・ という方法しか分からないのですが、やたらと大変だなぁと思ったのですが・・・ よろしくお願いします。

    • ベストアンサー
    • Java
  • 2次元配列の配列

    VisualBasic.NETでプログラムを作っているのですが、2次元配列の配列で行き詰って困っています。 配列1~3を別に定義して、その2次元配列を配列Xという配列にひとまとめにしたいのですが、エラーが出てしまいます。 エラー内容は「配列初期化子の次元が少なすぎます」で、場所は配列Xの第1要素です。 配列1~3以降もどんどん配列を追加していく予定なので、なるべく以下の方法で書いていきたいのですが、解決法はないでしょうか? また、他にいい方法があればご教授ください。 ソースです。 ---------------------------------------- Public 配列1(,) As Integer = _ { _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1} _ } Public 配列2(,) As Integer = _ { _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2} _ } Public 配列3(,) As Integer = _ { _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3} _ } Public 配列X(,)() As Integer = { _ 配列1, _     ←ここにエラーが出る 配列2, _ 配列3 _ } ---------------------------------------- 回答よろしくお願いします。

  • VB.NET2010 の多次元配列について

    すいません、教えてほしいです! VB.NET2010開発環境を利用しています。 多段配列を多次元配列に入れる方法を教えていただきたいです。 多段配列 Dim myArr1()() ↓ 多次元配列 Dim myArr2( , )

  • VBで配列の初期化について

    VBやVBAで1次元・2次元配列を、プログラムの中の 値の(リテラル的)記述で初期化する方法はどうすれば良いのでしょうか。1次元配列にはx=Array()で代用してきましたが、さて、行と列がある表のような、値データを2次元配列にセットしようとして、ハテナと行き詰まりました。配列名(要素)=値を要素数だけ繰り返す方法以外に、例えば A[][]={(a、b、c)(d、e、f)(g,h,i)}のような、書き方は出来ないのでしょうか。 複数のArrayをArreyの()内に入れてみましたがも上手く行かないようですが。 有り無しについて教えていただけたらと思います。 市販の解説書数書には触れた記述は見つかりませんでした。

  • コントロール配列の多次元配列

    http://dobon.net/vb/dotnet/control/buttonarray.html のサイト内の、「"特定の名前" + "1から連続する数字"」という名前を持つコントロールを配列にするメソッドを使用してのコントロール配列の多次元配列の方法はどのようにすれば良いでしょう?今現在調べている最中ですがよくわかりません。よろしくお願いいたします。

  • 3次元配列の記述

    VB6.0を使っています。 2次元配列は以下の様になりますが、3次元配列はどう記述すればいいのでしょうか? Dim phrase(1) As Variant phrase(0) = Array("0-0", "0-1", "0-2") phrase(1) = Array("1-0", "1-1", "1-2")

  • 二次元配列の初期化が出来ません

    今取り組んでいるC言語の課題の中で、 二次元配列"map[100][100]"を初期化するようにしたいのですが、 intでcomx,comyという二つの変数を宣言して、 for(comy=0;comy<100;comy++){   for(comx=0;comx<100;comx++){     map[comx][comy]=0;   } } のように初期化を図ったのですが、実行するとなぜか初期化が終わらず、 計算しっぱなしで止まってしまいます。(コンパイルは出来ます) 解る方、どこがおかしいのか指摘お願いします。。

  • 二次元配列のインデックスについて

    基礎的な質問かもしれませんが、ネットで調べたのですが、うまく回答が見つからなかったので、教えて下さい。 VB.netで二次元配列を扱っているのですが、この要素はどこにあるのかを知りたいのです。 一次元配列でしたら、Indexof を使えば、どこのインデックスに配置されているかが分かると思うのですが、 二次元配列の場合は、どうすればインデックス数が分かるのでしょうか。 例えば、列は0で固定だけど、どこの行にこの要素が格納されているか分からないから、行番号を知りたいと言うときです。 よろしくお願いいたします。

専門家に質問してみよう