
いつもお世話になっております。
ExcelVBAですが、FormulaR1C1を使いたいのですが、エラーになってしまいます。
列で指定したいのですが、どのように記載したらよいのか分かりません。
下記の設定!$D:$AA と 設定!$D:$D がうまくR1C1で記載できていません。
・元のA1タイプの関数
IFERROR(IF(C8="","",INDEX(設定!$D:$AA, MATCH(C8&D8,設定!$D:$D,FALSE),11)*E8),"")
・RIC1(Excel上で確認した関数)
IFERROR(IF(RC[-4]="","",INDEX(設定!C4:C27, MATCH(RC[-4]&RC[-3],設定!C4,FALSE),11)*RC[-2]),"")
・VBA上でエラーになるコード
Cells(Target.Row, Target.Column).Offset(, 2).FormulaR1C1 = "=IFERROR(IF(RC[-3]="","",INDEX(設定!C4:C31, MATCH(RC[-3]&RC[-2],設定!C4,FALSE),25)*RC[-1]),"")"
お手数をおかけしますが、ご教授頂けますと助かります。
よろしくお願いいたします。
以上
No.1ベストアンサー
- 回答日時:
こんばんは
設定するセルである
>Cells(Target.Row, Target.Column).Offset(, 2)
は正しいものとして(=E列以降の列でないと式がエラーになる)・・
R1C1形式の問題と言うよりも、文字列の定義の仕方の問題のような気がします。
(仮に、A1形式で設定しても同じようにエラーになると推測します)
設定する関数式内のダブルクォーテーション(=「"」)はエスケープしないと文字列として正しく解釈されません。
ダブルクォーテーション内のダブルクォーテーションは、二つ連続して記入するようにしてください。
http://officetanaka.net/excel/vba/tips/tips90.htm
No.2
- 回答日時:
No1です。
ご質問には関係ありませんけれど、ついでながら・・
>Cells(Target.Row, Target.Column).Offset(, 2)~~
対象セルが、既に変数 TargetCell などに設定されているのなら
TargetCell.Offset(, 2)~~
はあるとは思いますけれど、(はっきりとはしませんが)変数 Target がRangeオブジェクトのように見受けられるので、
Target.Offset(, 2)~~
でも良さそうに思われますが・・?
ご提示のように、
Cells(行番号, 列番号)
形式で指定するのなら、Offsetは不要で、
Cells(Target.Row, Target.Column + 2)~~
でも良いですし、もしも対象の列が固定(=G列とか)であるなら
Cells(Target.Row, 7)~~
や
Cells(Target.Row, "G")~~
でも良いはずです。
要は、記述方法を単純化しておいた方が、間違えの入り込む余地が減るであろうという意味です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 「1004:アプリケーション定義またはオブジェクト定義のエラー」への解消方法に関して 1 2023/07/09 11:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 【!】Excel 2つの条件付き書式が反映されません。。 5 2023/07/14 16:47
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PSPのエラー
-
Mail Distributorで送信できま...
-
Google Chromeである動画が見ら...
-
aolでのoutlook Express利用方...
-
PSPの通信(アドホック?
-
IODATAのLAN DISK HDL-Cへの接続
-
楽天モバイルのポケットWi-Fiを...
-
エクセル共有設定時に画像を挿...
-
ネットワーク資格情報について
-
マイネットワークが接続不良に...
-
wifi
-
家のパソコンが立て続けに3台...
-
PSPのネットワーク接続に無...
-
USB外付けHDDを外出先でも使用...
-
Flash PlayerをDLしたところ、...
-
常時接続でファイアーウォール...
-
家庭内ネットワークでのファイ...
-
栄養ドリンクについて タウリン...
-
LAN環境でWin2000とXP間でお互...
-
Googleデスクトップ検索はイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Mail Distributorで送信できま...
-
ExcelVBAでFormulaR1C1を列範囲...
-
車検に出したら、ETCカードが挿...
-
word97でページ設定を開くとエ...
-
IODATAのLAN DISK HDL-Cへの接続
-
PSPの通信(アドホック?
-
パソコンでの書き込み・投稿の際
-
au Android KYOCERA V01 で天気...
-
集合住宅でのインターネットセ...
-
エクセル共有設定時に画像を挿...
-
Windows7で共有ボタンがグレー
-
パソコン上で付箋の共有が「ぺた...
-
「web上」と「インターネット上...
-
【Excel VBA】ネットワーク上の...
-
社内LANにつながるけど、インタ...
-
OneDrive で共有したフォルダの...
-
net useを使用すると…。
-
Googleフォトは共有機能で気付...
-
「インターネット」「イントラ...
-
ハブを使用して2台のPCでデータ...
おすすめ情報
fujillinさん、ありがとうございます。
ちなみに、ここのTargetは、Worksheet_Changeイベントで使っているものです。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
です。
できました。
結局、列指定のところは問題なく、IFERRORの最後の""が問題でした。ご指摘通りでした。
ありがとうございました。
Cells(Target.Row, Target.Column + 2).FormulaR1C1 = "=IFERROR(IF(RC[-3]="","",INDEX(設定!C4:C31, MATCH(RC[-3]&RC[-2],設定!C4,FALSE),25)*RC[-1]),"""")"