プロが教えるわが家の防犯対策術!

配合表から配合比率を計算するVBAを組みたいのですが、実際の数値ではなく計算式を表示したいです。
こちらが自分で記入したコードです。
Q列とAA列とAB列をかけて、100で2回割った結果をAC列に表示します。同じ行にすべての数値が記入されないので、AB列からそれぞれ必要な列の数値を取得しています。

Sub 配合比率仮()

Dim i As Integer
Dim AB
Dim Q
Dim AA
Range("AB3").Select
For i = 1 To 500
If ActiveCell.Value = "" Then     '空白の場合下のセルへ
ActiveCell.Offset(1, 0).Select

Else '配合割合の数値がある場合
AB = ActiveCell.Value         'アクティブセルの数値の取得
Q = ActiveCell.Offset(0, -11).End(xlUp).Value        '重量比率を取得
AA = ActiveCell.Offset(0, -1).End(xlUp).Value        '配合割合の左列を取得
ActiveCell.Offset(0, 1) = s * t / 100 * u / 100       '製品の配合比率を計算(ここを数式にしたいです)
ActiveCell.Offset(1, 0).Select       '下のセルへ
End If
Next i
End Sub

上記コードでは数値が表示されます。数式で結果を表示させる方法を教えてください。Formula/FormulaR1C1プロパティを使うと思ったのですが、うまく動くコードが書けませんでした。初心者に毛が生えたようなもので上記コードもなっていないものかとは思うのですが、どうぞお力を貸してください。

「VBA 計算結果を数値ではなく、数式で表」の質問画像

A 回答 (3件)

数式をセットしたいのですか?


>ActiveCell.Offset(0, 1) = s * t / 100 * u / 100
s、t、u、の出処がよくわかりませんがセル番地になるのですか?
多分ですが
各セルの番地を取得して
AB = ActiveCell.Address
Q = ActiveCell.Offset(0, -11).End(xlUp).Address
AA = ActiveCell.Offset(0, -1).End(xlUp).Address

Formulaで数式をセットすればいけると思います。
ActiveCell.Offset(0, 1).Formula = "=" & AB & "*" & Q & "/100*" & AA & "/100"
    • good
    • 0
この回答へのお礼

できました。
ありがとうございます。
コードに間違いがあったにも関わらず、的確なご回答感謝します。

お礼日時:2009/11/12 11:56

確認させてください。



このコードだと、計算結果をセルに入力して、表示されるのも当然計算結果なのですが、それをどのようにしたいのでしょうか?
・計算式を表示させる(計算結果は表示されなくても良い)
・計算式を入力して、表示させるのは計算結果

添付画像は、どちらなのでしょうか?
・今はこうだけど、別なものにしたい
・このようにしたい


また、
> ActiveCell.Offset(0, 1) = s * t / 100 * u / 100

この計算式の、sとtとuは、どこから出てきたのでしょうか?
このコードは、ちゃんと動いているのでしょうか?

この回答への補足

すいません。
ActiveCell.Offset(0, 1) = s * t / 100 * u / 100

ActiveCell.Offset(0, 1) = AA * Q / 100 * AB / 100
でした。
申し訳ございません。
今はこのコードで数値が表示されいるのですが
、計算式を入力して、表示させるのは計算結果が希望です。

補足日時:2009/11/12 11:47
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今後は正確でわりやすい質問を心がけたいと思います。

お礼日時:2009/11/12 11:57

>ActiveCell.Offset(0, 1) = s * t / 100 * u / 100       '製品の配合比率を計算(ここを数式にしたいです)



「12×2.4/100×5.6/100」みたいに表示したい、って話ですよね。
でしたら

ActiveCell.Offset(0, 1) = CStr(s) & "*" & CStr(t) & "/100 *" & CStr(u) & "/100"

って感じで値を全て文字列変換し、文字列として設定してしまえばいいんじゃないかと。
    • good
    • 0
この回答へのお礼

わかりにくい質問でしたのに、ご回答ありがとうございます。

お礼日時:2009/11/12 11:56

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