[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA:SPLIT関数について』(BB)
SPLIT関数を用いて下記のデータを配列に組み込みたいのですが 型が一致しないとでます。 なぜなのかわかりません。どなたか教えて下さい。
Data="A DATA,010,020, 30,40,50"
Sub yomi() Dim kariH() As Variant ReDim honH(12, 0) As Variant Dim myRng As Range Set myRng = ActiveSheet.Range("A1") i = 0 Open "C:\WINDOWS\デスクトップ\Book1.txt" For Input As #1 Do While Not EOF(1) Line Input #1, Data kariH() = Split(Data, ",") ReDim Preserve honH(12, i) For j = 0 To 12 honH(j, i) = kariH(j) Next i = i + 1 Loop Close #1 myRng.Resize(UBound(honH(), 2), UBound(honH(), 1)) = honH Set myRng = Nothing End Sub
これではどうなりますか。 Dim kariH As Variant kariH = Split(Data, ",")
(川野鮎太郎)
あっ、ちゃんといきました。 でも、原理がわかりません。 解説していただくと嬉しいのですが。 (BB)
Dimステートメントで()を使うと、動的配列として宣言されます。 Dim kariH() As Variant でヴァリアント型の動的配列として宣言しています。 (要素の一つ一つがヴァリアント型) 動的配列はReDimでその要素数を再定義しなければなりません。 下記のようにやればできますが、 Dim kariH() As Variant ・ ・ ReDim kariH(0) kariH(0) = Split(Data, ",") この場合は kariH(0)(0)〜kariH(0)(12) と二次元の配列構造になりますが、 一組しかない配列を一次元目がひとつしかない二次元の配列変数へ格納している 形になります。できるできない、というより、わざわざコードをややこしくする だけです。kariH(0)(0)〜kariH(0)(12) の取得の仕方も変わってますしね。 ヴァリアント型変数はそれ自身一次元の配列の格納が可能ですから、 kariH = Split(Data, ",") でSplit関数の結果に応じた配列を格納し、 kariH(0)〜kariH(12) の インデックスを使って格納された値を取得します。 また、つぎの構文でも有効です。 Dim kariH() As String ・ ・ ReDim kariH(12) kariH() = Split(Data, ",") とすると、 kariH(0)〜kariH(12) の文字列型の動的配列が作成されます。 ちなみに、静的配列として宣言するとどうかというと、 Dim kariH(12) As String これは要素を一個ずつ変数に格納する必要があり、For〜Nextでループできるような 場合では良いのですが、Split関数の1ステートメントで配列を格納することは できません。 (みやほりん)(-_∂)b
みやほりんさん、丁寧な解説ありがとうございます。 未だに配列変数が理解しきれていない(川野鮎太郎)
なるほどー わかりやすく教えていただいてありがとうございます。 動的配列の宣言は、redimでしかできないと勘違いしておりました。 みやほりんさん、川野鮎太郎さん ありがとうございました。 (BB)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.