アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2000でVBAをやってます。
よろしくお願いします。

for文を使って毎回ランダムな値をB2とB3に入れます。
B4には式(=B2+B3)が入っています。
これをファイルに追加書き込みしたのですが、
B2とB3はその都度ランダムな値が入っているのですが、
B4だけは「0」です(つまり更新されていません)
どのようなプログラムならその都度更新されるようになるのでしょうか?


For I = 1 To 10
sheet1.Range("B2") = Int((10 * Rnd) + 1)
sheet1.Range("B3") = Int((10 * Rnd) + 1)
Dim temp As String
temp = str(sheet1.Range("B2")) + "," + str(sheet1.Range("B3")) + "," + str(sheet1.Range("B4"))

Open "C:\test.txt" For Append As #1
Print #1, temp
Close #1
Next I

A 回答 (5件)

B3に値入れた後に


sheet1.Range("B4") = sheet1.Range("B2")+sheet1.Range("B3")
これでどうでしょう?

ちなみにopenとcloseはforの外に出した方がいいですよ
あとfreefile(だっけな?)を使うのも
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
たしかにその方法ならできるのですが、
自分がやりたいのは、セルに複雑な式が入っていて(B4のような=B2+B3ではなく)
そのようなセルがたくさんある場合に、
それをプログラム側で書くのは厄介なので、セルを更新するようなことができて
その値を取り出すことをやりたいのです。
そのようなプログラム(関数)はあるのでしょうか?

お礼日時:2007/05/15 23:36

以下のコードをマクロに書いてみてください。


---------------------------------------------
ActiveSheet.EnableCalculation = True
---------------------------------------------
それとNo1の方も書いてますが、ループの中で毎回ファイルをオープンしてすぐ閉じて、また次で同じファイルをオープンするというのはやめた方がいいです。
というのは、ファイルをオープンしたり閉じたりするのは、オーバーヘッドが伴い、時間がかかるのです。なのでループの中で同じファイルに毎回書き込むのであれば、次のように直すといいと思います。
--------------------------------------------
Open "C:\test.txt" For Append As #1 'ファイルをループの前でオープン

For I = 1 To 10
sheet1.Range("B2") = Int((10 * Rnd) + 1)
sheet1.Range("B3") = Int((10 * Rnd) + 1)
Dim temp As String
temp = str(sheet1.Range("B2")) + "," + str(sheet1.Range("B3")) + "," + str(sheet1.Range("B4"))

Print #1, temp
Next I

Close #1     'ループが終了したらファイルを閉じる
--------------------------------------------

<<参考URL>>
http://www.moug.net/tech/exvba/0040055.htm
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
以下のコードで試したのですが駄目でした・・・
たぶんこれは書く場所が間違ってると思うのですが、
どこらへんに書けば良いのでしょうか?


Open "C:\test.txt" For Append As #1
For I = 1 To 10
sheet1.Range("B2") = Int((10 * Rnd) + 1)
sheet1.Range("B3") = Int((10 * Rnd) + 1)
ActiveSheet.EnableCalculation = True
Dim temp As String
temp = str(sheet1.Range("B2")) + "," + str(sheet1.Range("B3")) + "," + str(sheet1.Range("B4"))
Print #1, temp
Next I
Close #1

お礼日時:2007/05/16 15:48

#1です。



ダメかもしれませんが、
Dim temp As Stringの前に
DoEventsを入れてみてください
もしこれでだめなら、

マクロ1でB2,B3に値を入力
いったんシートに戻って
B4に反映させてから
マクロ2でファイル出力

これならいけるかな?

エクセル持ってれば試すんですが、
オープンオフィスなもんで・・・
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
DoEvents試したのですが、駄目でした・・・
次の提案は、
>いったんシートに戻って
というのは、手動でやるのでしょうか?
forでループさせてやりたいと思ってるので、
できればそのプログラム(関数)があれば教えてもらえないでしょうか?

お礼日時:2007/05/16 20:58

次のようにしてみてください。


もしうまくいかなかったら、(1)のところを
--------------------------------------------
Worksheets("sheet1").Calculate
--------------------------------------------
にしてみてください。
--------------------------------------------
Open "C:\test.txt" For Append As #1 'ファイルをループの前でオープン

For I = 1 To 10
sheet1.Range("B2") = Int((10 * Rnd) + 1)
sheet1.Range("B3") = Int((10 * Rnd) + 1)

Calculate '強制的に再計算-------(1)

Dim temp As String
temp = str(sheet1.Range("B2")) + "," + str(sheet1.Range("B3")) + "," + str(sheet1.Range("B4"))

Print #1, temp
Next I

Close #1     'ループが終了したらファイルを閉じる
--------------------------------------------
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
両方試したのですが駄目でした・・・
うーん、、どうしたいいものか・・・
自分の環境では無理なんですけど、
もしエクセルを使っているのであれば、ape5さんの環境ではできるのでしょうか?

お礼日時:2007/05/16 22:16

こっちの環境はExcel2007なのですが、できます。


2000でもあると思うのですが、どこかのメニューにオプションというのがあると思うのですが、それを選んで、その中に、再計算を自動でやるっていうような、項目はないですか?
ちょっと確認してみてください。

この回答への補足

すいません。
今、B4のセルの式を見ていたら「=B2+B3」が消えていました・・・
そして、(保存前に再計算)のチェックを外して式を入れなおして試してみたらできました。
自分でもいつから外れたのか記憶に無いので、
何かのプログラムが絡んでいるのか分からないので少し不気味ですが、、
とりあえずできましたので、ありがとうございました。

補足日時:2007/05/17 00:54
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
オプションの計算方法のタブの
「手動(保存前に再計算)」で今までやってました。
次に
(保存前に再計算)のチェックを外してやってみました。
「テーブル以外自動」
「自動」
と全て試してみたのですが駄目でした・・・
この項目で合ってますか?

http://vista.jeez.jp/img/vi7932717670.jpg

お礼日時:2007/05/16 23:54

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