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
No.1
- 回答日時:
B3に値入れた後に
sheet1.Range("B4") = sheet1.Range("B2")+sheet1.Range("B3")
これでどうでしょう?
ちなみにopenとcloseはforの外に出した方がいいですよ
あとfreefile(だっけな?)を使うのも
ご返答ありがとうございます。
たしかにその方法ならできるのですが、
自分がやりたいのは、セルに複雑な式が入っていて(B4のような=B2+B3ではなく)
そのようなセルがたくさんある場合に、
それをプログラム側で書くのは厄介なので、セルを更新するようなことができて
その値を取り出すことをやりたいのです。
そのようなプログラム(関数)はあるのでしょうか?
No.2
- 回答日時:
以下のコードをマクロに書いてみてください。
---------------------------------------------
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
ご返答ありがとうございます。
以下のコードで試したのですが駄目でした・・・
たぶんこれは書く場所が間違ってると思うのですが、
どこらへんに書けば良いのでしょうか?
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
No.3
- 回答日時:
#1です。
ダメかもしれませんが、
Dim temp As Stringの前に
DoEventsを入れてみてください
もしこれでだめなら、
マクロ1でB2,B3に値を入力
いったんシートに戻って
B4に反映させてから
マクロ2でファイル出力
これならいけるかな?
エクセル持ってれば試すんですが、
オープンオフィスなもんで・・・
ご返答ありがとうございます。
DoEvents試したのですが、駄目でした・・・
次の提案は、
>いったんシートに戻って
というのは、手動でやるのでしょうか?
forでループさせてやりたいと思ってるので、
できればそのプログラム(関数)があれば教えてもらえないでしょうか?
No.4ベストアンサー
- 回答日時:
次のようにしてみてください。
もしうまくいかなかったら、(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 'ループが終了したらファイルを閉じる
--------------------------------------------
ご返答ありがとうございます。
両方試したのですが駄目でした・・・
うーん、、どうしたいいものか・・・
自分の環境では無理なんですけど、
もしエクセルを使っているのであれば、ape5さんの環境ではできるのでしょうか?
No.5
- 回答日時:
こっちの環境はExcel2007なのですが、できます。
2000でもあると思うのですが、どこかのメニューにオプションというのがあると思うのですが、それを選んで、その中に、再計算を自動でやるっていうような、項目はないですか?
ちょっと確認してみてください。
この回答への補足
すいません。
今、B4のセルの式を見ていたら「=B2+B3」が消えていました・・・
そして、(保存前に再計算)のチェックを外して式を入れなおして試してみたらできました。
自分でもいつから外れたのか記憶に無いので、
何かのプログラムが絡んでいるのか分からないので少し不気味ですが、、
とりあえずできましたので、ありがとうございました。
ご返答ありがとうございます。
オプションの計算方法のタブの
「手動(保存前に再計算)」で今までやってました。
次に
(保存前に再計算)のチェックを外してやってみました。
「テーブル以外自動」
「自動」
と全て試してみたのですが駄目でした・・・
この項目で合ってますか?
http://vista.jeez.jp/img/vi7932717670.jpg
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ドラッグアンドドロップでファ...
-
iniファイルに追記がしたいです。
-
ASP .NETでファイル選択ダイア...
-
WAVファイル同士の結合が可...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
複数ブックの統合について Exce...
-
fopenの"r+"モードで同時に読み...
-
htmlを置換する方法とjsp表示
-
複数のファイルからのデータの...
-
ファイルを開かずにカスタムド...
-
VBAにてEXCEL以外のファイル(テ...
-
Arduinoでのライブラリファイル...
-
大きいサイズのテキストファイ...
-
2つのCSVファイルの比較
-
アドレス帳WABファイルをサンダ...
-
ファイルクローズとメモリ使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報