ID登録せずに、無料で質問できる♪ 教えて!gooアプリ>>

ExcelもVBAも初心者です。
配列を使ってセルの値を取得したいです。

Range(A1:A5).Value=a
は出来るようですが、
dim a(4) as date
a = Range(A1:A5).Value
は出来ないみたいです?(謎

明日までには完成しなければならないので、
どなたかヒントだけでもいただけませんでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Range("A" & i)


がダメみたいです…

最初にi=0としていますので、「"A" & i」の部分が、"A0"と等価なんですね。
もちろん、A0のセルなんてありませんから、エラーになるわけです。

例えば、A1:A3のセルの中身を、C2:C4にコピーするんであれば、
---------------------------------------
Dim i As Long, a(2) As Date

'A1:A3の内容を配列にセット
i = 0
Do Until i = 3
  a(i) = Range("A" & i + 1).Value
  i = i + 1
Loop

'配列の内容をC2:C4にセット
i = 0
Do Until i = 3
  Range("C" & i + 2).Value = a(i)
  i = i + 1
Loop
---------------------------------------
のように書けますね。
もっと単純に行くんであれば、
Range("C2:C4").Value = Range("A1:A3").Value
とまぁ、1行で書けるんですが。

別のやり方として、配列に保存せずに
---------------------------------------
Dim i As Long
For i = 1 To 3
  Range("C" & i + 1).Value = Range("A" & i).Value
Next i
---------------------------------------
のようにしてもOKかと。

あ、それと、ループ用の変数(iのこと)はBYTE型よりもLONG型の方がいいと思います。
WindowsはOSもCPUも32bitに最適化されてるんで、同じく32bitであるLONG型が、速度面でも有利なんですね。
特にメモリ関係の制限がシビアでないのでしたら、頻繁にアクセスする変数にはLong型を使っておく方が無難かと(^^;
    • good
    • 0
この回答へのお礼

再びの回答、本当にありがとうございます。
セルの空欄が埋まったときは、感動でした。(T_T)

しかし、よくみたら全部同じ数値になっていました。
こんな感じに
Range("C2:C4").Value = a
値を確認したら、ちゃんと違う値を還しているのに、
このコマンドでは、だめでしょうか?

P.S.
質問には関係ありませんが、さっきなぜかExcelが勝手に保存されないまま落ちて、今夜いままでの苦労が水の泡です。
号泣(>_<)

お礼日時:2003/10/25 01:51

Range("C2:C4").Value = a


だと、C2:C4のセルにa(0)の値を入力するって意味になってしまうみたいですね。

セルの値をコピーするのであれば、#2で書いたやり方をお試しくだされ。
書式等も含めてコピーするのであれば

Range("A1:A4").Copy Range("C2:C5")

ってな書き方も出来たりするみたいです。

>さっきなぜかExcelが勝手に保存されないまま落ちて、
ご愁傷様です(;_;)/~~~
Excelのアドインで自動保存ってのもありますので、それを有効にしておけば、ある程度対策になるかもしれませぬ。
でわ。
    • good
    • 0
この回答へのお礼

本当に度々ありがとうございました。
最後の補足は質問と言うより、泣き言ですけど、
それにも丁寧に答えて下さるなんて、
本当にありがとうございます、
何とか今朝の提出に間に合いました。
とても勉強になりました。
またの機会がありましたら、よろしくお願いします。

お礼日時:2003/10/25 12:54

Dim i As Long


Dim a(4) As Date
For i = 1 To 5
 a(i - 1) = Range("A" & i).Value
Next i
ってな感じで出来るかと思います。
    • good
    • 0
この回答へのお礼

夜遅くありがとうございます。(^^;)
Dim i As Byte, a(2) As Date,
i = 0
Do Until i = 2
a(i) = Range("A" & i).Value
i = i + 1
Loop
Range("C2:C4").Value = a
アドバイス頂いて、こんな風に直しましたが、エラーでした。
「'Range'メソッドは失敗しました:'_Global'オブジェクト」

私何か勘違いしているのでしょうか?

お礼日時:2003/10/24 23:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング