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を見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRSAのeの実際値について

RSAの公開指数eは固定値(主に65537)でもセキュリティ的な問題は
発生しないとの事ですが、それはなぜでしょうか?

要は、eから2つの素数pとqを推測する事が難しいので、eが固定値
でも問題ないと言うことでしょうか?

よろしくお願いします。

Aベストアンサー

それは公開する鍵がeの場合です。
そもそも公開する鍵なので固定値でも問題ないのです。
デジタル署名にRSAを用いる場合はeは固定値ではいけません。

>要は、eから2つの素数pとqを推測する事が難しいので、eが固定値
でも問題ないと言うことでしょうか?

これが成り立っていないと公開鍵暗号方式としては失格ですね。

Qオートフィルで下に「Aシート!A1:A5」「=Aシート!A6:A10 」と続けさせたい

スプレッドシートで別のシートにあるセルを複数参照して、そこからオートフィルで数字を連続させたいです。

Bシートに「=Aシート!A1:A5」を入力して、AシートのA1:A5を参照します。

そこから「Aシート!A1:A5」を入力したセルの下に「=Aシート!A6:A10 」といった具合に数字を連続をさせたいのですが、オートフィルでは上手くいきません。手入力で、6~10、11~15とやっていくのには限界があります。
どうしたら連続させることができるでしょうか?

イメージは添付した画像です。

Aベストアンサー

=SUMPRODUCT(('Aシート'!A3:A12="果物"))の場合
3行目から10行飛び
=SUMPRODUCT((OFFSET(Aシート!A$3,(ROW(A1)-1)*10,,10)="果物"))
Offset関数
=OFFSET(基礎となるセル,何行すらす,何列ずらす,範囲とする行数,範囲とする列数)です。

QEXCELの条件付き書式で、各行のE列よりも当該セルの値が大きい場合は

EXCELの条件付き書式で、各行のE列よりも当該セルの値が大きい場合は塗りつぶしを赤、小さい場良いには青にするには?

条件付き書式で、例えば
E15セルよりも値の大きいF15は赤、小さい場合は青
E16セルよりも値の大きいF16は赤、小さい場合は青
以下、同様
という書式絵っていをF列に等に設定したい場合に
条件記述の上手い方法が分かりません。
Exxのxxの部分が自動的にインクリメントされない気がするのですが
どうしたら、上記を実現できますか?

Aベストアンサー

添付画像のようにF15に対して条件付書式を設定します。

式入力の際にセル選択を普通にマウスクリックで行うと$E$15のように絶対セル表現になってしまうので、$が付かないセル表現にするのがポイントです。

これで、F15に書式設定できましたので、F15をコピーして
F16以降を選択して、
「編集メニュー→形式を選択して貼り付け」
を行い、書式だけを貼り付ければご所望の状態になると思います。

Qエクセルで、=IF(A12="a",TRUE)は =A1="a"  ???

エクセルで、
=IF(A12="a",TRUE)

=A1="a"
と省略できるのですか?

やってみるとまったく同じようなのですが、いまいち不安です。

また、=IF(D4=TRUE,"OK!","No!")も、日頃=IF(D4,"OK!","No!")と略してますが、これも正しいんですよね?
気になったものですから確認させてください。

Aベストアンサー

こんにちは。maruru01です。

IF関数について、少し補足説明します。
IF関数は、No.1にもあるように、

=IF(条件式,真の場合,偽の場合)

という書式ですが、

=IF(条件式,真の場合)

と、偽の場合を省略することが出来ます。
ここで偽の場合は、FALSEという論理値を返します。
つまり、質問欄の1つ目の例に当たります。
なお、

=IF(条件式)

と、真の場合も省略することは出来ず、

=IF(条件式,,偽の場合)

と、空欄にすると、真の場合は数値の「0」を返すことになります。
ちなみに、偽の場合も、

=IF(条件式,真の場合,)

と、引数区切りのカンマだけ付けると、空欄と見なされて(省略とは異なる)数値の「0」を返します。

次に、条件式についてですが、
条件式は、

「左辺」+「比較演算子」+「右辺」

の書式になっているものを指します。
ここで、比較演算子とは、
「=、>、<、>=、<=、<>」
を指します。
条件式は、成立/不成立の結果、TRUE/FALSEという論理値を返します。
つまり、

=A1="a"

は、条件式の戻り値そのものを表示していることになります。
それに対して、IF関数の方は、条件式を判定した結果、真の場合と偽の場合をそれぞれ実行して表示しています。
その真の場合と偽の場合が、条件式の戻り値とちょうど一致しているということです。

さて、IF関数の第1引数は、通常は上記の条件式を指定しますが、実際はIF関数は第1引数を数値として判断しています。
その判定基準は、第1引数が、
0 → 偽の場合を実行
0以外 → 真の場合を実行
となります。
そして、第1引数が条件式の場合に限り、戻り値の論理値を、
TRUE → 1
FALSE → 0
と数値に変換して判定しているのです。
これが、質問欄の後半の2つの数式の挙動の違いの原因なのです。

=IF(D4=TRUE,"OK!","No!")

は、第1引数は「D4=TRUE」という条件式です。
この場合、戻り値は必ずTRUE/FALSE(=1/0)です。
(ただし、D4にエラーが入っている場合を除く)
一方、

=IF(D4,"OK!","No!")

の方は、第1引数は「D4」で、これはセルD4の値そのものです。
で、前述のように、IF関数は第1引数を数値として判定するので、このD4が数値(と論理値)以外の場合(文字列など)はエラーになります。
D4が数値(と論理値)の場合は、前述のように、「0」かそれ以外かで判定され、真/偽の場合のいづれかを実行して表示します。

このIF関数の第1引数が数値として判定されているということを利用した例が以下のようなものです。
例えば、A列に数値が1つでもあれば"OK"、1つもなければ(つまり0)"NG"を表示する場合、意味を考えれば、

=IF(COUNT(A:A)>0,"OK","NG")

ですが、これを、

=IF(COUNT(A:A),"OK","NG")

と、A列の数値の個数(COUNT関数の戻り値)そのもので判定することが出来るわけです。

以上、長くなりましたが、補足説明でした。

こんにちは。maruru01です。

IF関数について、少し補足説明します。
IF関数は、No.1にもあるように、

=IF(条件式,真の場合,偽の場合)

という書式ですが、

=IF(条件式,真の場合)

と、偽の場合を省略することが出来ます。
ここで偽の場合は、FALSEという論理値を返します。
つまり、質問欄の1つ目の例に当たります。
なお、

=IF(条件式)

と、真の場合も省略することは出来ず、

=IF(条件式,,偽の場合)

と、空欄にすると、真の場合は数値の「0」を返すことになります。
ちなみに、偽...続きを読む

Qこんにちは! エクセルの条件付き書式について質問す。 e列のどこかに値が入ったら、その行全体をグ

こんにちは!

エクセルの条件付き書式について質問す。

e列のどこかに値が入ったら、その行全体をグレーアウトするというルールを「e列全体に対して」作成したいです。
例)e4に値が入ったら、a4-e4までをグレーにする など
しかし、どうしてもルールをe列全体に適用できません!

どなたか、手動でコピペする以外に適用範囲を拡大する方法をご教示いただけないでしょうか?

お手数ですがご回答お待ちしています。

Aベストアンサー

たぶん、e4を$e$4にしてるんでしょう。
絶対参照やめて相対参照にしましょう。

Qウォッチウインドウで確認すると、「Range("a1").Value」は「十」ボタンができる

Sub test()
Dim Strmoji As String
Strmoji = "a"
MsgBox Range("a1").Value
MsgBox Strmoji
End Sub

Range("a1").ValueとStrmojiをウォッチ式に追加して
このコードをF8でデバッグしていくと
Range("a1").Valueの方だけ「十」ボタンが付き、
クリックすると広がりたくさんの情報が表示されています。

これはRangeだからですか?Cellも試してみたけど同じでした。
しかしなぜ、Strmojiは「十」ボタンがでないのでしょうか?

「十」ボタンがでるのとでないのでは何が違うのですか?
よろしくお願いします。

Aベストアンサー

こんにちは。

端的に言って、ウォッチ式の登録が間違ってはいませんか?
添付の図をみてください。

 Range("A1")+....Object/Range
 .Value .........Variant/String
 Strmoji.........String

この前も別の方の質問でも、ウォッチウィンドウがありましたが、値を確認するなら、ローカルウィンドウでも良いと思うのですが……。プラス(+)が右隣に出るのは、オブジェクト・配列・コレクションということになるのだろうとは思うのですが、それは、開ければ分かると思います。

Qe^log(log3) の値は?(logの底はe)

数学で、e^log3 の値は、logの底がeなら、3だということは分かるのですが、

e^log(log3) の場合は、どのような値になるのでしょうか?

log3 になるのですか?

Aベストアンサー

 y=e^log(log3)
とおいて両辺の自然対数をとると
 log(y)=log(log3)
真数同士比較して
 y=log3
これから y=e^log(log3) のyが
 y=log3
のyすなわち
 e^log(log3)=log3
と分かります。

QRange(Cells(32, 14)).Value = "S" がエラーになります

よろしくお願いします。いつもgooの皆さんに大変お世話になっています。
エクセルは2013です

Range(Cells(32, 14)).Value = "S" がエラーになります
メッセージは「Range メソッドは失敗しました Worksheet オブジェクト」です

32行目の14列にSを書き込みたいので、ネットで調べてやってみたのですが
よく理解できません

14という数値を使って書きたいのですが、どう書き換えたら良いでしょうか
どなたか教えてください

Aベストアンサー

この場合一つのセルですから
Cells(32, 14).Value = "S"
これだけです。Rangeは不要です。

Q(1+(1/n))^nの極限でeの値を求める

lim_n→∞ (1+(1/n))^nのとき値がeに近づいていくということは知っていますが、(1+(1/n))^nを計算機に入力し、nの値をだんだん大きくしていくと(1+(1/n))^nがeより大きくなってしまいます。

何故このようなことが起こっているのか詳しく説明してくれる方いませんか?

Aベストアンサー

大きくなる原因をより詳しく言うと
2進数で表現すると n=10^p に対する 1+1/n の値は正確に表現できず, 常に 0.5 ulp 程度の誤差は考えられる. IEEE754 の倍精度実数であれば 2^-53 程度. つまり, もとから (1+1/n)^n の真の値を計算しているわけじゃなくて (1+1/n+ε)^n の計算をしている (手元計算機における ε は絶対値でだいたい 10^-16 くらい).
この ε の存在は n が小さいときには ((1+1/n)^n の値が e から離れているので) 無視できるが, n が大きくなると無視できなくなる. で, n=10^9 のときに破綻した, と.
実際, n を 2 のべきにすると p=52 まできちんと計算していくはずです.

QVBA .Value=.Value ?

とある質問の回答の中で
With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With
というものがありました。これは一体どういう働きをするのでしょうか?With を使わずに書くと
Range("A1:C3").Formula="=~"
Range("A1:C3").Value=Range("A1:C3").Value
初めて見ました。

Aベストアンサー

こんにちは。

With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With

OkWaveとの分離前に、こういうのを好んで書く人がいましたね。
ループとどちらが速いか、複雑なものでは、こちらの方が速いかもしれません。これは、一種の裏ワザなのです。

#1の方が、mougでの紹介をしていますが、ちょっと違うというか足らないです。(私が、このテクニックを、代弁するというのもおかしな話しなのですが、私も使わないというわけではありません。ただ、あまり格好のよいテクニックでもありません。)

>Range("A1:C3").Formula="=~"  '←ここに複雑な数式を置きます。
>Range("A1:C3").Value=Range("A1:C3").Value

複雑な計算を、Excelのスプレッドシート側にまかせてしまい、後は、その数式が揮発性だったり、そのために重く重くなるのを防ぐために、値貼り付けにしてしまう、という目論見なのです。マクロで、その数式の役割をさせるよりも、実際の数式のほうが楽だからということもあります。例えば、配列数式などが使われたりします。

「Range("A1:C3").Value」の右辺の値を変数で受けて、中身を調べれば分かりますが、配列の中は、数式ではなく、数値または文字列として、格納されています。Rangeオブジェクトにして初めて、数式を格納できるわけです。そして、右辺の値は、2次元配列になって、同じ構造を持つ左辺の範囲に出力されるというわけです。

こんにちは。

With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With

OkWaveとの分離前に、こういうのを好んで書く人がいましたね。
ループとどちらが速いか、複雑なものでは、こちらの方が速いかもしれません。これは、一種の裏ワザなのです。

#1の方が、mougでの紹介をしていますが、ちょっと違うというか足らないです。(私が、このテクニックを、代弁するというのもおかしな話しなのですが、私も使わないというわけではありません。ただ、あまり格好のよいテク...続きを読む


人気Q&Aランキング

おすすめ情報