Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2019)
Rangeが動作しない
投稿日時: 23/01/16 13:06:03
投稿者: TomVla

ブルーバックス「Excelで遊ぶ手作り数学シミュレーション」田沼晴彦著
p110に掲載されているプログラムです
ーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub 例4()
  Dim a As Single
 
  For a = -2 To 2 Step 0.01
      Range("a") = a
      Caluculate
  Next a
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーー
y=asinθのグラフを作成する際に使用するものです。
実行すると下記メッセージが現れて先に進めません。
対応方法をご教示いただきたく。よろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
「'Range'メソッドは失敗しました'_Global'オブジェクト」
ーーーーーーーーーーーーーーーーーーーーーーーーーー

回答
投稿日時: 23/01/16 13:29:06
投稿者: WinArrow

>Range("a")
 
セルに「a」というアドレスは存在しませんよね??

投稿日時: 23/01/16 13:46:47
投稿者: TomVla

ご教示ありがとうございます。
VBAの初心者でして、ご指摘の内容が理解できません。
>セルに「a」というアドレスは存在しませんよね??
というのでしたら、具体的にどのようなアドレスを指定すればよいか
お教えいただけないでしょうか。

回答
投稿日時: 23/01/16 14:20:14
投稿者: WinArrow

TomVla さんの引用:
ご教示ありがとうございます。
VBAの初心者でして、ご指摘の内容が理解できません。
>セルに「a」というアドレスは存在しませんよね??
というのでしたら、具体的にどのようなアドレスを指定すればよいか
お教えいただけないでしょうか。

 
セルのアドレスは、
通常「A1」とか「B1」というように表現します。
  
変数:a
の値を、どのせるに入れたいと考えているんですか?
  
「A1」のセルに代入する場合、
コードでは、
Range("A1").Value = a
または
Cells(1, 1).value a '最初の「1」は行、次の「1」は列です。
と記述します。
 
今回、aの値は、変化しますから、
それを考慮して、どのセルに代入するか決めましょう。
  
どのセルに代入するかは、回答者ではありません。
あなたが決めることです。

投稿日時: 23/01/16 14:42:14
投稿者: TomVla

アドヴァイスありがとうございます。下記のように変更しました。
ーーーーーーーーーーーーーーーーーー
Sub 例4()
  Dim a As Single
 
  For a = -2 To 2 Step 0.01
      Range("E1").Value = a
      Caluculate
  Next a
End Sub
ーーーーーーーーーーーーーーーーーー
すると今度は
「SubまたはFunctionが定義されていません」
との応答です。大変恐縮ですが進め方をお教えいただけないでしょうか。

回答
投稿日時: 23/01/16 14:57:44
投稿者: WinArrow

>Caluculate
というメソッドには、Object
が必要です。
掲示されたコードの範囲内では、不要と思いますが、
この結果、別の計算をしている関係で入っているものと思います。
 
2つ、テストしてみてください。
 
1つの方法
Caluculate
を削除する
 
削除しても問題がない場合は、
2つ目の方法
ActiveworkSheet.Caluculate
に変更する。
 

Range("E1").Value
に代入すsると、−2〜2に変化した答えが、
全て「E1セル」に入ることになりますよ。
最終的に「2」が入ります。

回答
投稿日時: 23/01/16 15:21:53
投稿者: WinArrow

アドバイス
今回のループ(For〜Next)の中で
再計算していますが、
ループの中では、再計算しない方がよいです。
再計算が必要ならば、ループを抜けてから行えばよいです。
 

回答
投稿日時: 23/01/16 15:25:05
投稿者: gombohori

 答えは全部その本に書いてあるのでは?
 Caluculateっていうプロシジャがその前のページに書いてあったりしませんか?
 CaluculateはCalculateのタイポだったりしませんか?
 aっていう名前で、セル範囲を名前定義してたりしませんか?

回答
投稿日時: 23/01/16 16:32:41
投稿者: WinArrow

gombohoriさん
のレス通りかもしれませんね??
 
 
VBAについては
本やWEBページなど他の人が作成したコードをつまみ食いして
うまくいかない
ことは、当たり前と考えてください。
 
その全部を理解した上で使うことが大切です。

投稿日時: 23/01/17 04:08:35
投稿者: TomVla

WinArrowさん、gombohoriさん
アドヴァイスありがとうございます。
最終的に「1.99999678134918」が入りました。
「Caluculate」をとっても
「Calculate」に直しても同じ結果が得られました。
Calculateっていうプロシジャは、この本では突然でてきたものです。
まだまだ分からないことはたくさんありますが、一歩進むことができましたので
本件はここで一端クローズさせていただきます。お礼申し上げます。
また別件で質問させていただきますので、その際はまたよろしくおねがいします。