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

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

質問者からの補足コメント

  • タイトルと質問が一致していません。お詫びします
    タイトルは
    Range("Z" & i).Formula = で、セルにマクロで式を書きたいのですが
    にすべきでした

      補足日時:2017/02/20 00:54
  • 出先から補足させてください
    度々の説明不足で申し訳ありません

    TRはWクリックしたセルの行です
    i は10回繰り返す変数です

    帰宅後にお礼させてください

      補足日時:2017/02/20 10:09

A 回答 (6件)

Range("Z" & i).Formula = "=Range(""Z"" & i - 1) - Range(""AG"" & TR) * 10000" です。



ダブルクォートが含まれる場合は、2回繰り返して書きます。
    • good
    • 0
この回答へのお礼

私の説明不足でお手数をおかけしました
見事に計算出来ています

改めてお礼申し上げます

お礼日時:2017/02/20 20:14

エクセルでも同じです。


="abcd" のabcの後ろに”を入れる時は="abc""d"。

" を文字列そのものにするなら =""""
""を文字列そのものにするなら =""""""

です。
    • good
    • 0
この回答へのお礼

ありがとうございます
私の説明が足りませんでしたことお詫びします

お陰様で問題が解決しました

お礼日時:2017/02/20 20:15

残念ながら式の中に変数は入れられません。

出来ると便利ですけどね。
    • good
    • 0
この回答へのお礼

ありがとうございます
私の説明が足りませんでしたことお詫びします

私も、いろいろなパターンで何度もやって無理だと判断しましたが
お陰様で問題が解決しました

お礼日時:2017/02/20 20:17

こんにちは。



Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
常識的には、i は、ループ・カウンターで、TR は、固定の変数だと思います。

そのままでしたら、数式ではなく、定数が書き込まれるだけです。
これが数式には変えようにもありません。

実際に、ワークシート上で、どのような数式にするか、つまりどのような結果を求めるか書かれていないので、私には単純に答えられません。

"=IFERROR(AY" & TR & ","""")"
は、数式には変えられますが、
=Range("Z" & i - 1) - Range("AG" & TR) * 10000
は、単なるVBAのコードでしかありません。

VBAコードから想像できるのは、

TR =8 なら、
R1C1 方式で、
 "=R[-1]C-R8C33*10000"

このような数式です。
それをループするのではなく、範囲で貼り付けすればよいわけです。
A1 方式ですと、ややこしくなります。

ワークシート上でVBAコードを作り出すこともないとは言えませんが、もしそうでしたら、.Value プロパティで十分だと思います。なれないうちは、Debug.Print などで、試打しながら、ダブルコーテーションを整えながら、出すしかないと思います。

勘違いしていましたら、どうかスルーして構いません。
    • good
    • 0
この回答へのお礼

WindFallerさん、こんばんは
先日は3つのエリアの入力監視で大変お世話になりました

監視エリアが増えても応用できるので、発展性のあるマクロですね
ありがとうございました

今回、私の説明がヘタでお手数をおかけしました
お陰様で問題が解決しましたので報告します
ありがとうございました

お礼日時:2017/02/20 20:24

No.1です。

申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"
    • good
    • 1
この回答へのお礼

siffon9さん、こんばんは
前にも.Offset(0, -4).Valueを教えていただきました
その節は大変ありがとうございました

報告とお礼が大変遅くなりました
また、教えてもらう立場でありながら、私の説明不足が多くてお手数をおかけしました

siffon9さんに教えていただきました
"=Z" & i - 1 & "-AG" & TR & " * 10000" を
マクロで書き込んでみると見事に計算してくれました

繰り返し変数 i も見事に数値に置き換わって
(この「数値に置き換わる」というのが、私の能力を超えて不思議ですが)
出来ました、完璧です

感動ものです!!!!

実は、今回の答え "=Z" & i - 1 & "-AG" & TR & " * 10000" に
近い形を " と & の位置を変えて、数多くのパターンを夜中の3時頃まで
やったのですが、あと一歩のところでsiffon9さんと同じにならなかったのです

多分 i - 1 のところが、" や、&を入れてしまったのが原因のようです
「変数は必ず & でつなぐ」「前後は""で囲む」「””は""""」というのは
分かっていたのですが、今回、初めて i を使ったので、i は変化するので
使えないと判断してあきらめてしまいました

お陰様で難問が無事解決しました
私の説明不足で何度もお手数をおかけしました

何度やっても、見事に引き算をやってくれています
計算の動きが面白くて何度もやってしまいます

ありがとうございました
感謝いたします

お礼日時:2017/02/20 20:06

返事をありがとうございました。



以下は、あくまでも私の想像の範囲だけなのですが、

>Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000
つまり、このVBAの表現を数式の表現に変えるという意味だったわけですね。

それで、i がループカウンタで、TR がダブルクリックしたセルの行

勘違いしていなければ、たぶん、こういうことで可能ではないかと思います。

Cells(TR + i, "Z").FormulaLocal = "=Z" & TR + i - 1 & "-AG" & TR & " * 10000"

ただし、i は、1からですと、この数式が成立しません。だから、i=1 ではいけませんね。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim TR As Long
Dim i As Long
Cancel = True

TR = Target.Row

For i = 0 + TR To 9 + TR
 Cells(i, "Z").FormulaLocal = "=Z" & i - 1 & "-AG" & TR & " * 10000"
Next i
End Sub

例えば、
--------------------
'なお、ループしない場合、私は、以下のように書くことが多いです。TR行以降に数式を貼り付ける場合です。

TR = Target.Row
i=10
Cells(TR, "Z").Resize(i, 1).FormulaLocal = "=R[-1]C26-R" & TR & "C33 *10000"
End Sub
    • good
    • 1
この回答へのお礼

私の説明が足りずに、問題をより複雑にしてしまいました
お詫びいたします

WindFallerさんに書いていただいた、式の右側部分だけ
"=Z" & i - 1 & "-AG" & TR & " * 10000"
で、i を使っても見事に計算してくれています

ありがとうございました

お礼日時:2017/02/20 20:30

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