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

よろしくお願いします

R1C1形式でマクロでセルに式を書き込んでいます
現状の式は "=LEFT(RC[-13],5)" です
これをA1形式で書き直すとき、RC[-13]が列Dで、行がTarget.Rowの時
"=LEFT(RC[-13],5)”  をどう書き換えたらいいでしょうか?

色々自分が思いつくもので書いてみましたがエラーで進みません
どなたか教えてください

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

  • tom04さんこんばんはいつも大変お世話になっております。シートの設計が変わって、列が増えるたびに、式の一部のRC[-13]等の-13を数えなおさなければならないので、-13のような指定方法をやめて
    列と行で指定することにしたので今書き換えにトライしているところです。私の説明が悪くてお詫びします。TargetのセルからRC[-13]ではなくて、式を書き込みたいセルから-13ということです
    質問とは別の元のマクロはこれです(列が違います)。Range("AN" & Target.Row).FormulaR1C1 = "=IFERROR(RC[-10]/10000,"""")" を次のように書くにはどうしたらいいでしょうか?
    RC[-10]ではなくて、F列のTarget.Rowに置き換えたときは、式はどう書いたらいいでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/01/29 00:18

A 回答 (5件)

こんにちは。



#3の回答者です。
前回の内容を思い出しました。まだ、あの内容が続いているのですね。

Name1_Len =”5” の時
"=LEFT(D" & Target.Row & ",5)"
をどう書き直したらいいですか?

こうなります。

"=LEFT(D" & Target.Row & "," & Name1_Len &" )"

となります。

私個人としては、前回の内容を完全に理解しているわけではありません。どうしても、見えてこない部分があるので、隔靴掻痒の気持ちです。もしかしたら、こうではないか、ああではないか、と憶測を呼んでしまいます。

別の質問のようですが、私の理解の範囲でお答えしておきます。

>Range("AN" & Target.Row).FormulaR1C1 = "=IFERROR(RC[-10]/10000,"""")" を次のように書くにはどうしたらいいでしょうか?

Range("AN" & Target.Row).Formula = "=IFERROR(AN" & Target.Row /10000,"""")"

なお、通常、.FormulaR1C1 のプロパティを使うのではなく、.FormulaLocal か、.Formula にしてください。 (.FormulaLocal とは、ようするに、「日本語示」ということです。日付式などが該当します。)

>RC[-10]ではなくて、F列のTarget.Rowに置き換えたときは、式はどう書いたらいいでしょうか?

Range("AN" & Target.Row).Formula = "=IFERROR(F" & Target.Row /10000,"""")"

どうしても、R1C1型にしなければならない、マクロもありますが、今の段階では、出来る限り、数式はA1型にしたほうがよいでしょう。記録マクロは、あまりアテにしないほうが良いです。

>補足が出てこないのでお礼になってしまいます
余談ですが、もう一度、画面のレイアウトは変わるとは思います。私は、今、当面のこの表示に合わせて、表示用とログ収録のマクロを作り替えています。
    • good
    • 0
この回答へのお礼

WindFallerさん、いつも大変世話になっております
私の都合でお礼が遅れました

いつも親切に教えていただきましてありがとうございます
エクセルも式を入れるだけしか知らないレベルなのに
2か月ほど前からマクロに取り組んでいます

gooの皆さんに教えてもらったことは、いつでも見られるように
きちんと整理していますが、なにせこの年ですから応用がききません
教えてもらったことと同じことしかできません

特に今回のような&で結合するのがどうしてもエラーになってしまいます
答えがわかると簡単なんですが、一晩やってだめだったら質問させていただいています

ありがとうございました。大切に使わせていただきます

お礼日時:2015/01/30 17:04

No.1・2です。



「Target」を使用しているというコトはChangeイベントではないかと思われますので、

>RC[-10]ではなくて、F列のTarget.Rowに置き換えたときは、式はどう書いたらいいでしょうか?
の意味がいまいち理解できません。

F列に数式を入れるのではなく、「Target」のセルに数式を入れるという解釈だと
No.1の方法そのままで

Target.Formula = "=INDIRECT(ADDRESS(ROW(),COLUMN()-10))/10000"
といった感じになるのではないかと思います。

前回書いたようにどうしても数式を入れなければならないのであれば別ですが、
単に結果を表示させたいだけであれば

With Target
.Value = .Offset(, -10) / 10000
End With

だけで大丈夫だと思うのですが・・・

※ 的外れならごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さんこんばんは
いつも親切に教えていただきましてありがとうございます
先日も、条件付き書式で大変お世話になりました
お陰様で、私の狙った動きになっています

私も本当はマクロで式を書きたくないのですが、計算はTargetが変化した時だけではないので面倒なことになっています

Private Sub Worksheet_Change(ByVal Target As Range)
以外のやつ(?)でマクロで計算処理する方法も勉強してみます

教えていただいた方法でちょっとトライしてみます
ありがとうございました

お礼日時:2015/01/30 17:24

こんばんは。



R1C1型は、相対参照式そのものですから、RC[-13]の対象列がD列だということは、Targetのアドレスは、Q列にないといけないことになりますね。

行がTarget.Rowの時とは、R1C1型には、関係がありません。
"=LEFT(RC[-13],5)” と書く以上は、Rは、今のある行であるという意味です。

それをA1型に書くなら、D列が分かっているなら、
 Target.Formula = "=LEFT(D" & Target.Row & ",5)"
 
となりますが、D列を決めていない(Target列の-13列)になると、こういうスタイルになります。

If Target.Column = 17 Then 'これは、Q列という意味。ここが変われば、数式も変わる
  myFormula = "=LEFT(RC[-13],5)"
  newFormula = Application.ConvertFormula(myFormula, xlR1C1, xlA1, False)
  Debug.Print newFormula
End If
'エラー処理はしていません。
    • good
    • 0
この回答へのお礼

すみません。補足が出てこないのでお礼になってしまいます
皆さんの助けがないとマクロが作れないのに、いつも、説明が下手で申し訳ありません
"=LEFT(D" & Target.Row & ",5)"
でねらい通りの値がセルにでています
ありがとうございました

ただし5を変数にするとうまくいきません
Dim Name1_Len As String と宣言して
Name1_Len =”5” の時
"=LEFT(D" & Target.Row & ",5)"
をどう書き直したらいいですか?
お手数ですが教えてください

お礼日時:2015/01/28 23:13

No.1です。


たびたびごめんなさい。

>RC[-13]が列Dで・・・
を見逃していました。

Targetの列は常に「Q」列と決まっているのでしょうか?
そうであれば

=LEFT(INDIRECT("D"&ROW()),5)

だけでも大丈夫だと思います。
どうも失礼しました。m(_ _)m
この回答への補足あり
    • good
    • 0

こんばんは!


要するにTargetのセルはその行の13列左のセルの頭から5文字を表示させる数式にしたい!
というコトですかね?
数式ではなく、「値」をそのまま表示させる場合はOFFSET関数で対応できると思いますが・・・
とりあえず苦肉の策として

Target.Formula = "=LEFT(INDIRECT(ADDRESS(ROW(),COLUMN()-13,4)),5)"

としてみたらどうなりますか?
※ 的外れならごめんなさいね。m(_ _)m
    • good
    • 0

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