sheet1のデータです。
orange 100
apple 200
With Sheets("test")
Dim flArray As Dictionary
Set flArray = New Dictionary 'Dim flArray As New Dictionaryと、2つをまとめて表記する事も可
For i = 1 To 2
flArray.Add .Cells(i, 1), .Cells(i, 2)
Next
End with
Debug.Print flArray("apple")
データが、格納できないのは何故なのでしょうか?
call flArray.Add (.Cells(i, 1), .Cells(i, 2))
でも、うまくいきません。
txtの場合は、問題なく取り込めるのですが、
ECELのデータを取り込み時は、なにか必要になるのでしょうか?
とすると、セルの値ではなく、キーとアイテムにセルオブジェクトがセットされてしまいます。
下記のようにValueを明示的に指定するようにしましょう。
ただし、.Cells(i, 1).Value に重複がないことが前提です。
重複があるとエラーになります。
ありがとうございました。
.Valueを入れないと、セルの枠を指定することになって、中身が入らないようですね。
あと、.Valueを付ければ取り込めるのですが、
要素がバリアント型として取り込まれているため、
flArray("ほげほげ")では、呼び出せません。
今回は、A列の要素は、すべて文字列だったので、
Dim n as string
n = .Cells(i, 1).value
flArray.Add n, .Cells(i, 2).Value
で逃げ切りましたが、もやもやさま~ずです。
そもそも、データ型が混在している要素が混在してたら逃げ切れないし。
かといって、matchで行数調べて、要素を取り出すのは面倒極まりないわけで。
なにか、良い方法は、ありますでしょうか?
下記で文字列として読み込んだらどうでしょう。
ここはAccessに関する掲示板なので、データベース観点からいれば、
そもそも、テーブルの列にデータ型が混在しているデータはありえないと思います。
xECELシートからの読込なので、データの混在はあります。
データの保存先は、ACCESSになります。
A列には、フィールド名と紐づく要素。
B列には、保存するデータが並びます。
なので、B列の要素は、データ型はバラバラになるのが普通です。
.textで値だけ取ってきて、’yや#を使い分ければよいわけですね。
これなら、inputでテキストファイルを読み込むのと、同じ要領で処理できます。
.textって、便利ですね。
ありがとうございました。
蛇足ですが、テキストファイルをADOで読み込むのは、データ型の問題で使い物になりませんでした。
本当に助かりました。
XECELシートを使うのは、誰でも簡単に入力できるからです。
リストから選択するようにしておけば、間違いも減ります。
しかし、内容は自分で決められないので、
連想配列に取り込んで、吐き出させるのが無難です。
処理速度は求めないし、データの大きさも知れたものだし、
いつ変更されるかも分からないので、専用画面など作りたくはないのです。