[VBS] 動的配列について教えてください!

このQ&Aのポイント
  • VBS初心者です。リストを読み込んで動的配列に持たせたい方法について教えてください。
  • 動的配列の作成方法や引数として渡す方法などについて詳しく教えてください。
  • どのようなエラーが発生しているのか詳細を教えていただけると助かります。
回答を見る
  • ベストアンサー

[VBS] 動的配列について教えてください!

VBS初心者です。 以下のように、リストを読み込んで動的配列に持たせたいです。 ----------------------------------------------------------------- GET_FILE = "sample.txt" SET objFs = CreateObject("Scripting.FileSystemObject") ' 動的配列セット Call Array_Set("AryVal",GET_FILE) ' 表示 For i = 0 To Ubound(AryVal) msgbox AryVal(i) Next ' 終了 WScript.Quit 0 Function Array_Set(AryName,ReadFile) Set strVal = objFs.OpenTextFile(ReadFile) ' 1行づつ処理 Do While strVal.AtEndOfStream <> True i = i + 1 ReDim Preserve AryName( i - 1 ) AryName( i - 1 ) = strVal.ReadLine Loop End Function ----------------------------------------------------------------- 見て頂くと分かるとおり、動的配列として持たせたい変数名を Functionの引数として渡しています。(当然のごとくエラー、、、) Functionの引数として渡した値に動的配列が格納される方法があれば教えてください。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

変数をパブリック宣言しておいて 名前ではなく変数そのものを渡してあげれば。 Public AryVal() GET_FILE = wscript.scriptfullname '"sample.txt" SET objFs = CreateObject("Scripting.FileSystemObject") ' 動的配列セット Call Array_Set(AryVal,GET_FILE) ・・・以下は冒頭の質問と同じなので省略しました。

wansui
質問者

お礼

Public AryVal() 完全に忘れてました、、、!!! 思い通りの処理を行うことが出来ましたぁ! まぢありがとうございますうううううううううううう!!w

その他の回答 (1)

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

あまり詳しくありませんが Call Array_Set("AryVal",GET_FILE) の第一引数は単なる文字列ですから、呼び出し側で配列を定義して、 その配列名を直接入れればいいと思いますが。

wansui
質問者

お礼

Execute関数を利用すると、引数で渡した文字列に値が格納される事が出来ましたが Callを抜けるとと、配列が空になってしまいます、、、。 初歩的な事かもしれませんが、引き続きご教示頂ければと思います。 ----------------------------------------------------------------- GET_FILE = "sample.txt" SET objFs = CreateObject("Scripting.FileSystemObject") ' 動的配列セット Call Array_Set("AryVal",GET_FILE) ' 表示 For i = 0 To Ubound(AryVal) msgbox AryVal(i) Next ' 終了 WScript.Quit 0 Function Array_Set(AryName,ReadFile) ' 動的配列宣言 Execute(" Dim " & AryName & "()" ) Set strVal = objFs.OpenTextFile(ReadFile) ' 1行づつ処理 Do While strVal.AtEndOfStream <> True i = i + 1 Execute(" ReDim Preserve " & AryName & "(" & i - 1 & ")" ) Execute( AryName & "(" & i - 1 & ") = strVal.ReadLine " ) Loop End Function -----------------------------------------------------------------

関連するQ&A

  • 合計金額を出すには動的配列?

    初投稿です。ASPで見積スクリプトを作っています。 ソースは・・・ Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject") Set ObjTS = ObjFSO.OpenTextFile(data_file) Do Until ObjTS.AtEndofStream Arr = ObjTS.Readline Arr1 = split(Arr,"::") tanka = FormatCurrency(Arr1(1)) goukei = Arr1(1) * Arr1(2) Loop ObjTS.Close Set ObjTS = Nothing Set ObjFSO = Nothing ================================ この、変数:goukeiを全て加算して、 最後に見積合計を出したいんですが、 これを出すには Redim Preserve goukei() のような、動的配列を使うのですか? それとも使わなくても出来るものなんでしょうか? プロの方にとっては、簡単すぎる質問でしょうが、 分かる方、ぜひご教授お願いします。

  • VBSでカンマ区切り

    お世話になっております。 VBSで、CSVファイルをカンマ区切りで配列にし、 ファイルに書き出したいです。 下記のスクリプトを実行すると3行の改行と これ⇒ ---------------- だけ出力されます。 Splitは使用できないのでしょうか? どこが間違っているのかわかりません。 ご教授いただけませんでしょうか。 '--------------------------------------------------------------- On Error Resume Next Set OBJFS01 = CreateObject("Scripting.FileSystemObject") Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log") Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False) '--------------------------------------------------------------- i = 0 Dim HAIRETU(27) Do While i < 6 HAIRETU(27) = Split(CSVTEXT01, ",") LOGTEXT01.WriteLine(HAIRETU(2)) LOGTEXT01.WriteLine(HAIRETU(3)) LOGTEXT01.WriteLine(HAIRETU(4)) LOGTEXT01.WriteLine("----------------") i = i + 1 Loop LOGTEXT01.close CSVTEXT01.close

  • VBScripの2次元動的配列

    下記VBScripサンプルで2次元動的配列をつかっているのですが redim preserveでエラになります。 (インデックスが有効範囲にありません) 原因をご伝授ください。 環境 IIS 5.0 Windows XP index.asp <%@ LANGUAGE="VBScript" %> <% 'option explicit %> <!-- #include file="test.asp" --> <% Dim Order() Dim dat() call test(Order,dat) response.write("dat=" & dat(1,2)) %> test.asp <%'Option Explicit%> <% function test(Order_info,dat) Dim i redim dat(0,7) for i=0 to 1 <- iが0の時はOK,iが1になるとエラー redim preserve dat(i,7) dat(i,1)="1" dat(i,2)="2" dat(i,3)="3" dat(i,4)="4" dat(i,5)="5" dat(i,6)="6" next End function

  • AccessVBAで、二次元配列を動的に設定したい

    以下のコードにあるattrという配列に、DB上のとあるコードと名前を設定したいと思います。 DB上のデータ量は可変なので、データを取得するごとに動的に配列attrの要素数を動的に増やしたいと思っています。 検索等で色々と調べながら以下のコードを書いてみたのですが、どうもうまく動きません。 ご教授願います。 --------------------------------------------------- Dim attr() As String [loop start] ReDim Preserve attr(i, 0) ReDim Preserve attr(i, 1) attr(i, 0) = コード attr(i, 1) = 名前 [loop end]

  • VBAでJavaのように関数の引数に関数を渡す方法

    やりたいことは、テキストファイルを読み込んで「一行ずつ何か処理」をさせたいです。 この、「一行ずつ何か処理」の部分を引数に渡し、関数の中身で「ファイルを1行ずつ読み込む」部分を実装する方法はないでしょうか。 <イメージ> Function ReadFile(path As String, eachFunc As Fcuntion)  Set fso = CreateObject("Scripting.FileSystemObject")  Set tso = fso.OpenTextFile(path)  Do Until tso.AtEndOfStream   Call eachFunc(tso.ReadLine)  Loop End Function 予め一行ずつ読み込む処理を作っておきモジュールとして使いたいです。 よろしくお願いします。

  • Visual Studio 2003での2次元可変長配列でエラー

    Visual Studio 2003での2次元可変長配列でエラーが発生します。 エラー内容 'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソースは dim return_array()() For i As Integer = 0 To 5 Step 1 ReDim Preserve return_array(i)(6) Next のような感じです。 ループを使う必要があるのはreturn_array()()が状況に応じてサイズを変更が必要なためです。

  • Excel VBA配列をFunctionに渡す

    こんばんは、引数について教えてください。 Excel VBAの関数を作っていましたが、 1.Function ColumnArrayの部分でコンパイルエラーが発生し、  「配列がありません」と表示されます。  引数を配列のみで渡した場合、問題なく渡せるようですが、  他の引数と、CriteriaArrsの配列と一緒に渡せないのでしょうか。  すべて配列として1つにまとめて渡さなければならないのでしょうか。 2.CriteriaArrs = Array("田中", "鈴木")の部分は、文字列の増減が発生しますので  配列はParamArray  CriteriaArrs()とした方がよいのでしょうか 説明が不足している点があるかもしれませんが宜しくお願いいたします。 Function ColumnArray(SheetName As Worksheet, _ StartCell As Range, _ FieldColumn As Long, _ CountColumn As Long, _ CriteriaArrs As Variant _ ) As Long ・・・ End Function ------------------------------------- sub test() Dim CriteriaArrs() As Variant Dim SheetA As WorkSheet DIm RangeA range CriteriaArrs = Array("田中", "鈴木") set SheetA =Worksheet(1) set RangeA=Range("B3") FilterCount = ColumnArray(SheetA, RangeA, 3, 2, CriteriaArrs) end sub

  • 動的配列の賢い使い方

    動的配列について質問です。 構造体を動的配列で今ボタンを押すたびに値を追加しています。 i = i+1 Redim preserve a(i) as ユーザ定義 ただこの方法だと追加するだけならよいのですが、 削除の時に問題があります。 例えば、配列が5つあるとします。 削除のボタンをクリックし2番目の配列を削除したとします。次に追加ボタンをクリックすると6番目に追加します。 これですと、2番目の値がないのに(5つしかないのに)6つ分のメモリを確保することになると思います。 上手はメモリ確保方法はないでしょうか? 構造体のデータは、 ・index ・文字列 ・数値 をそれぞれ持っており、indexは一応追加するごとに増えていくようになっています。 うまく説明できませんが、よろしくお願い致します。

  • 配列プロパティをREDIMする方法はないのでしょうか?

     タイトルの通りなんですが、 配列として持っているプロパティがあります。 そのプロパティをREDIMしたいのですが、 これは可能なのでしょうか? VB6.0の話になります。  『クラスモジュールに表記しています』 '詳細クラス Public Property Get PK_SYOUSAI() As clsSyousai PK_SYOUSAI = K_SYOUSAI() End Property Public Property Let PK_SYOUSAI(ByVal strValue As clsSyousai) K_SYOUSAI = strValue End Property  『標準モジュールに表記しています』 ReDim Preserve clsKouSei_K(0).PK_SYOUSAI(i) clsKouSei_K(0).PK_SYOUSAI(i) = cls_S  上記のREDIMの部分でエラーが起こり、処理が進みません。 どうすればよいのでしょうか?

  • 関数の引数に配列を初期化なしで。

    関数の引数に配列を初期化して渡しているプログラムを目にします。 関数の引数に配列を初期化なしで渡す場合とどう違うのでしょうか? 例 <?php echo tesutoFunc(array('reservation' => 'a','user' => 'b')); function tesutoFunc($arrays=array()){ //ここをなぜtesutoFunc($arrays)と書かないのか? print_r($arrays); } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう