- 締切済み
エクセル 条件でセルの数式を削除したいです
初心者で申し訳ありません よろしくお願いいたします D1のセルに=B1*C1という数式が Worksheet_SelectionChangeで セット実行されます その時 A1が空白の時という条件で =B1*C1という数式を削除したいのです 説明が悪くすいません ご指南お願いいたします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
小計件ですが 1行ごとに文字列を作成してもいいのですが FormulaR1C1を使って 相対位置のセル指定にして書きようにすると 数式は1種類でよくなります 数式設定するセルが I8なら =IF(OR(D8="",D8=D9),"",SUMPRODUCT((D$8:D$4000=D8)*J$8:J$4000)) は =IF(OR(RC[-5]="",RC[-5]=R[-1]C[-5]),"",SUMPRODUCT((R8C[-5]:R4000C[-5]=RC[-5])*R8C[1]:R4000C[1])) となります Rが行、Cが列です[]がある場合は対象セルからの相対値、無い場合は絶対値になります RC[-5] は R0C-5 ということで I8への設定なら R0なので8行目 I-5=D(H:-1,G:-2,F:-3,E:-4)となります 同じように D9なら R[1]C[-5]です J$8の場合 1列右の同じ行の絶対値ですのでRには[]無しCには[]付きになりR8C[1]となります 最後に設置の方法ですが Dim rTag as Range Set rTag = Range("I8:I4000") rTag.FormulaR1C1 = "=IF(OR(RC[-5]="",RC[-5]=R[-1]C[-5]),"",SUMPRODUCT((R8C[-5]:R4000C[-5]=RC[-5])*R8C[1]:R4000C[1]))" set rTag = Nothing といった具合になります 相対指定の式組み立ては最初戸惑うと思います A1B2指定ですと列、行となっているのを R1C1は行、列順になりますのでまぁこれは Cellsと同じ指定なんですが ・・・ 式の組み立てはA1B1形式で式を組んでセルに記入します ツール > オプション > 全般タブの 『R1C1 参照形式を使用する』にチェックを入れて > OK 数式ボックスの文字列をコピーして使いましょう
- hige_082
- ベストアンサー率50% (379/747)
>現在セルに入っている数式 >I8=IF(OR(D8="",D8=D9),"",SUMPRODUCT((D$8:D$4000=D8)*J$8:J$4000)) >を同じSelectionChangeで >I列4000まで使えるようにしたいのですが 意味がわかりません 条件は何ですか? A1が空白の時が条件とすると、redfox63さんの回答を応用すればよいのでは
補足
ありがとうございます 同じ項目の金額小計を求めるもので D列に番号が入っています J列に金額が入っています D列の同じ番号の金額をJ列から集計してI列に小計を出しています
- redfox63
- ベストアンサー率71% (1325/1856)
こんな感じでしょう Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1").Value <> "" Then Range("D1").Formula = "=B1*C1" Else Range("D1").Value = "" End If End Sub
補足
ありがとうございました 解決いたしました すいませんが もう一ついいでしょうか 現在セルに入っている数式 I8=IF(OR(D8="",D8=D9),"",SUMPRODUCT((D$8:D$4000=D8)*J$8:J$4000)) を同じSelectionChangeで I列4000まで使えるようにしたいのですが どのようにすればよいでしょうか 説明不足はお許しください
お礼
ご指南ありがとうございます 早速 試していましたが 式は R[-1]ではなく R[1]と表示されます =IF(OR(RC[-5]="",RC[-5]=R[1]C[-5]),"",SUMPRODUCT((R8C[-5]:R4000C[-5]=RC[-5])*R8C[1]:R4000C[1]))" では無いでしょうか しかし 実行してみましたが集計出来ませんでした 何が ダメなのでしょうか Dim rTag As Range Set rTag = Range("I8:I4000") rTag.FormulaR1C1 = "=IF(OR(RC[-5]="",RC[-5]=R[1]C[-5]),"",SUMPRODUCT((R8C[-5]:R4000C[-5]=RC[-5])*R8C[1]:R4000C[1]))" Set rTag = Nothing
補足
ほんとうに 奥深いですね ありがとうございました 解決いたしました。 ご指南ありがとうございました