締切済み 配列の型について 2006/02/01 11:58 VBScriptで配列を宣言してVariant型となっているのをLong型の配列として扱いたいのですが可能か教えてください。 よろしくお願いいたします。 みんなの回答 (1) 専門家の回答 みんなの回答 BLUEPIXY ベストアンサー率50% (3003/5914) 2006/02/01 13:02 回答No.1 VBScript のリファレンスにも書かれていますが、 VBScript では、変数は常にVariantです。 (型)タイプを指定して宣言(Dim)は、VBなどと違ってできません。 ただし、 CLng 関数を使ってLong の Variant にすることはできます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Visual Basic 関連するQ&A 配列の参照渡しで型が一致しません。 エクセル2003です。 いつもお世話になります。 以下のコードを実行すると「配列の型が一致しません。」というエラーが出ます。 typeNameで確認しても配列の型はvariant()で正しいと思うのですが。。。 皆様のお知恵を拝借させていただけないでしょうか。 -------------------------------------- Sub main() Dim e As Variant e = fuN() Call pRo(e) '←ここでエラーになる。 End Sub Function fuN() As Variant Dim a(0) As Variant a(0) = "zero" fuN = a End Function Sub pRo(ByRef c() As Variant) '処理っす End Sub -------------------------------------- Variant型の宣言について 教えてください。 もし整数型とString型混在のCSVデータをsplit関数で読み込んで 配列変数に格納する場合、その変数はVariant型で宣言しなければならないのでしょうか? 因にvbscript(クラシックasp)でのプログラミングです。 [VBA] 型宣言の順番について こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) 私はVBAのレベルとしては初級で、具体的には配列内で処理をしたり、連想配列のコードが書けるぐらいで、クラスモジュールはわかりません、ぐらいの感じです。(分かりづらくてすみません) 私はいつも宣言の文を書くときに、プロシージャの一番上に全て書き、順番もだいたい大きい(と感じる)型のものから書いています。 例: Sub test() Dim FSO As Object Dim oDic As Object Dim wbSour As Workbook, wbDest As Workbook Dim wsSour As Worksheet, wsDest As Worksheet Dim r as Range Dim tmp As Variant Dim destDir As String Dim i As Long, j As Long, k As Long ~ ~ ~ ~ ~ ~ End Sub みたいな感じです。 いつもこれでいいのかなぁ?と思いながら宣言文を書いてるんですが、ネットに転がっている他のソースコードを見ると、変数を使う直前で都度宣言しているものもあったりするので、正しい(とされている)宣言のしかたってあるのでしょうか? そんなの人と場合によるって感じだと思うのですが、こういう理由で自分はこう宣言している、とか、これからのことを考えるとこうしたほうがいい、みたいなのがあれば教えてください。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 配列を初期化する時ってどうすればいいですか? Dim test() As String や Dim test As Variant で、宣言した配列を初期化する時ってどうすればいいですか? test="" test=Null test= Empty test= = Nothing は、エラーになります。 バリアント配列ってなんですか? バリアント配列って何ですか?何を入れるの? ExcelVBAで配列に一気にデータを入れる かすかな記憶で申し訳ありませんが、変数をVariant型で宣言しておくと、","で区切られた文字列は、一気に配列として代入出来ると聞いた気がしています。色々と試してみたのですが、よくわかりません。よろしくお願いいたします。 Dim a as Variant dim myText as string myText = "月曜,火曜,水曜,木曜,金曜,土曜,日曜" のような感じで(実際のカンマで区切られた文字列は100個ぐらい要素があります)一気に代入して、aを配列として扱いたいのです。 よろしくお願いいたします。 型エラーについて 環境 IIS4.0 WIN NT VB6.0 ASPからDLLを使用して処理を行っている際に 以下のような事象が発生しました。 VB(DLL)側で処理を行い、その結果をASPで受け取る時に エラーが出ております。 ASPではすべてVariant型なのでVBでもVariant宣言しているのに 何故か型エラーが出ています。 ASP部分をVBで記述すると問題なく動作します。 解決方法など分かりましたらご教授願います。 以下コードの一部分を抜粋いたしました。 ▼▼▼▼▼▼▼▼▼ASP▼▼▼▼▼▼▼▼▼ Dim DBErrField() DBErrField = clsSEND_SCHEDULE_T.DBErrField ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▼▼▼▼▼▼▼▼▼VB(DLL)▼▼▼▼▼▼ Private mDBErrField() As Variant Public Property Get DBErrField() As Variant() DBErrField = mDBErrField End Property ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▼▼▼▼▼▼▼▼▼エラー▼▼▼▼▼▼▼▼▼ Microsoft VBScript 実行時エラー (0x800A000D) 型が一致しません。 ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ジャグ配列生成時の1オリジン ExcelVBAで、CSVFileを取込み、シートを介さずに 配列へ格納する処理をしています。 尚、一行のデータの数が変わる可能性があるため、 ジャグ配列にしています。 Dim FileNamePath As Variant 'CSVファイルパス Dim CSVFile() As Variant Dim ch1 As Long Dim RowCnt As Long ~略~ ch1 = FreeFile Open FileNamePath For Input As #ch1 RowCnt = 1 Do While Not EOF(ch1) ReDim Preserve CSVFile(RowCnt) Line Input #ch1, CSVFile(RowCnt) CSVFile(RowCnt) = Replace(CSVFile(RowCnt), """", "") CSVFile(RowCnt) = Split(CSVFile(RowCnt), ",") RowCnt = RowCnt + 1 Loop ~略~ この時、後の処理でやりやすくするために配列の添字を 1からにしたく、行の添字となるRowCntを1としています。 同様に列となる添字も1からとしたくて、モジュールの宣言にて 「Option Base 1」としましたが、上記コードでジャグ配列を 生成すると、(多次元配列で言う)2次元目の添字は 0からとなってしまいます。 例:CSVFile(1)(0) このような状況で、ジャグ配列でも1オリジンとするには どのようにすれば良いのでしょうか。 宜しくお願い致します。 VBScript 配列の宣言に変数を使用 VBScript初心者です。 配列を宣言する際に変数を使用することは出来ないでしょうか。 例えば下記のようにするとエラーになります。 Dim intCnt intCnt = 9 Dim strArray(intCnt) どなたかご存知の方がいらっしゃいましたらお教え下さい。 よろしくお願い致します。 vbaで配列に値を格納する場合 vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか? C言語の型と配列 char* str[10]={"a","b"}; char* str2="c"; としたときにstr=str2とすると 型が合わないといったエラーが出ます。 でもstrって結局はポインタの配列の先頭要素のアドレスですよね。 ポインタにポインタを入れているので通るのかなと思ったんですけど、 配列で宣言するとポインタにも型がつくのでしょうか? この例だと strは char * を10個持つ配列をさすポインタ で、 str2はchar *をさすポインタ みたいなかんじです。 質問の意味がわかりにくいですが、ご指摘をいただければ補足しますので よろしくお願いします。 VBAで配列のある部分だけをを配列に入れたい VBAを勉強をしております。 例えばA1からG20までをある配列に入れているとします。 その配列のある部分(例えばB1からC20)を、別の配列にいれるにはどうすれば良いのでしょうか。 以下の方法で試してみましたが、上手くいきません。 Dim A() As Variant Dim B() As Variant A = Range("A1:G20") B = Range(Cells(A(1,2),Cells(A(20,3))) AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 【緊急】インクルードファイルに配列変数を使用することができない??? ASPでVBSCRIPTを使っています。 多くのASPで使う部分を共通化して インクルードファイル(.inc)にして それを読み込んでいるのですが、 インクルードファイルに Dim gsAAA と宣言すると、 普通に使えるのに Dim gsAAA(9) とすると使えません。 配列の変数はインクルードにおくことが できず、かならずローカルのASPで 宣言してやらないとダメなのでしょうか? どのASPでも同じ宣言が必要になってきたので。 どなたか、少しでも分かることがあれば 教えて下さい。お願いします。 配列について。 配列について質問なんですが int a[6]={1,2,3,4,5,6}; int b[3]={6,32,4}; という配列を宣言し、この二つの配列を足す方法はどのようなやりかたがあるのでしょうか? つまり cc[]という新たな配列を作り cc[9]={1,2,3,4,5,6,6,32,4}; とするにはどのように記述すればいいのでしょうか? 教えて頂ければ幸いです。 2次元配列の宣言について 文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、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 配列に関してです。 Dim a(,) As Integer a= New Integer(,) {0,300,400,400,500,600,700,800} {400,500,700,800,1000,1200,1300,1500} {700,1000,1300,1600,2000,2000,2000,2000} {1300,2000,2000,2000,2000,2000,2000,2000} ローカルレベルでこのように配列を宣言したのですが ・配列初期化子の次元が少なすぎます。 ・構文エラーです。 とエラーが出てしまいます。 この宣言、初期化の仕方のどこがおかしいのでしょうか? VBAの動的配列について いつもお世話になっております。 エクセルVBAを学習中の者です。 動的配列についてお伺いします。 添付資料を見て頂きたいのですが、 シート名1~4に同一レイアウトの表があります。 これらの表をを2次元配列に格納し、その後、同一レイアウトのシートに一括転記したいと考えています。 転記の事を考えて、条件としては、 シート1から2行目以降のデータを配列『data』に格納、変数『dataCnt』が転記先の行番号と同じになるように考えています。 当初は、配列の定義を『Dim data(100,3) As Variant』と、多めに要素数を定義して、コードを記述していました。 正直、凄く気持ちが悪い感じでした・・・ 最近、動的配列を学習しまして、 シートごとにデータの行数を変数『lastRow』に格納して、配列を再定義して【データ数=要素数】とならないか? と思い、下記のようなコードを書いてみました。 が、『ReDim Preserve~』で実行エラーが発生してしまいます。 原因がなぜかわかりません! そもそも、動的配列はこのような使い方は出来ないのでしょうか? Sub テスト() Dim data() As Variant Dim x As Long Dim i As Long Dim ii As Long Dim lastRow As Long Dim dataCnt As Long dataCnt = 2 For x = 2 To 5 Worksheets(x).Activate lastRow = Cells(Rows.Count, 1).End(xlUp).Row If x = 2 Then ReDim data(2 To lastRow, 3) Else ReDim Preserve data(2 To dataCnt + lastRow - 1, 3) End If For i = 2 To lastRow For ii = 1 To 3 data(dataCnt, ii) = Cells(i, ii) Next ii dataCnt = dataCnt + 1 Next i Next x End Sub どなたかご指導をよろしくお願いいたします。 C++配列の型に関するC++規格について教えていただきたいです。 C++配列の型に関するC++規格について教えていただきたいです。 以前にYahoo知恵袋でも質問しましたが、答えが得られませんでしたので、こちらでも質問させていただきたいと思います。 ※以下、質問になります。(分かり難いかも知れませんが宜しくお願い致します。) 環境は、Visual Studio 2010 (C++) です。 std::fill_n() で次のような警告がでましたので、調べていましたところ、 ...\xutility(2801): warning C4996: 'std::_Fill_n': Function call with parameters that may be unsafe - ... 次のような定義方法を見つけました、 typedef char (&std::tr1::_No)[1]; ↑このような定義方法があることを初めて知りました。 ちなみに、std::fill_n() は次のようになりました。 long data[32]; std::fill_n(data, 32, 0); ←正常 long* p_data = data; std::fill_n(p_data, 32, 0); ←warning long (&a_data)[32] = data; std::fill_n(a_data, 32, 0); ←正常 知りたいのは、配列を関数に渡すときに、 通常は、void func(long* pd); のようにポインタで渡すと思います。 また、void func(long pd[]); や void func(long pd[32]); もポインタの場合と同じになりますが、型保証がありません。 これはC++規格で規定されていることだと思います。 次のようにすると、型保証がされますが、この記法がC++の規格として規定されているかを知りたいです。 1. void func(long (&ad)[32]); // 関数呼び出しは、func(data); 2. void func(long (*pd)[32]); // 関数呼び出しは、func(&data); また、通常のポインタで配列を渡すことを、配列の参照渡し?と言うと思いますが、 この1,2,は何渡し?と言われるのでしょうか? #長い文になって申し訳ありませんが、宜しくお願い致します。 二次元配列が、勝手に一次元配列になってしまう Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など