VBAでデータを処理しようとしているのですが、Excelシートの関数がVBAの処理に追いついていません。
やりたいことは下記になります。
①関数が記入されているExcelシートにダウンロードしたデータを貼り付ける
②貼り付けたデータの内容で関数の結果が変更される
③変更された関数の結果をVBAの変数に代入
④代入された変数を用いて次の処理を行う```VBA
コード
' 準備シートの関数をコピペ range1 = Workbooks("a.xlsm").Sheets("準備").Range("D1").Value Workbooks("a.xlsm").Sheets("準備").Range("E1:R1").Copy Workbooks("a.xlsm").Sheets("準備").Range("E3:E" & range1 + 2).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ' 関数計算 Workbooks("a.xlsm").Sheets("準備").Calculate Workbooks("a.xlsm").Sheets("次").Calculate ' 次シート更新 range1 = Workbooks("a.xlsm").Sheets("次").Range("B1").Value Workbooks("a.xlsm").Sheets("次").Range("D20").Copy Workbooks("a.xlsm").Sheets("次").Range("D20:D" & (19 + range1 * 9)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
しかし、③で代入される変数が正しい結果で代入されず、計算途中もしくは計算前のデータで代入されてしまいます。
(コードで言う「次シート更新」部分のrange1の値が正しく反映されません。)
VBAを途中で停止し、続きから再度同じコードを実行すると求めている変数が代入されるので、関数処理が追いついていないのかなと思うのですが、何か解決策はございますでしょうか。
よろしくお願い致します。
対象のVBAのコードを載せてください
コードが書いてないので何とも言えませんが、
VBAにはシートを指定して再計算させる
Worksheet.Calculate
プロシージャがありますがそちらは使っていますでしょうか。
全てVBAの中で計算させれば良いのではないでしょうか?
コード載せました。
Calculate追加しても反映されませんでした。
すべてVBAの中でやれば良いのでしょうが、関数使ったほうが簡単だったのでもしそれでできるならと思いまして…。
ワークシート関数でVBA内で計算させましょう
https://www.moug.net/tech/exvba/0100035.html
ちょっと再現が難しいですね。
貼られたソースと要望から見ると、
恐らく次シートのB1が、準備シートのE3~Eの計算後の値を参照してるのだと思いますが。
単純な四則演算程度の数式で試す分には計算が間に合っているので。
’次シート更新の行の前に、"Application.CalculateFull"という行(Excel全体を再計算させる命令)を追加してみてください。
みなさんコメントありがとうございます。
ワークシート内でVBA計算はまだ試せていないですが、Application.CalculateFullでもだめでした…