• 締切済み

エクセル 条件でセルの数式を削除したいです

初心者で申し訳ありません よろしくお願いいたします D1のセルに=B1*C1という数式が Worksheet_SelectionChangeで セット実行されます その時 A1が空白の時という条件で =B1*C1という数式を削除したいのです 説明が悪くすいません ご指南お願いいたします

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

小計件ですが 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 数式ボックスの文字列をコピーして使いましょう

tompapa56
質問者

お礼

ご指南ありがとうございます 早速 試していましたが  式は 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

tompapa56
質問者

補足

ほんとうに 奥深いですね ありがとうございました 解決いたしました。 ご指南ありがとうございました

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>現在セルに入っている数式 >I8=IF(OR(D8="",D8=D9),"",SUMPRODUCT((D$8:D$4000=D8)*J$8:J$4000)) >を同じSelectionChangeで >I列4000まで使えるようにしたいのですが 意味がわかりません 条件は何ですか? A1が空白の時が条件とすると、redfox63さんの回答を応用すればよいのでは

tompapa56
質問者

補足

ありがとうございます 同じ項目の金額小計を求めるもので D列に番号が入っています J列に金額が入っています D列の同じ番号の金額をJ列から集計してI列に小計を出しています

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

こんな感じでしょう 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

tompapa56
質問者

補足

ありがとうございました 解決いたしました すいませんが もう一ついいでしょうか 現在セルに入っている数式 I8=IF(OR(D8="",D8=D9),"",SUMPRODUCT((D$8:D$4000=D8)*J$8:J$4000)) を同じSelectionChangeで I列4000まで使えるようにしたいのですが どのようにすればよいでしょうか 説明不足はお許しください

関連するQ&A

  • 【エクセル】条件によって数式を削除する

    エクセルで以下のようなことは実現可能でしょうか? たとえば ・A1の値が「a」のときはC1にはB1を検索値としたルックアップの値を返す。 ・A1の値が「b」のときはC1はルックアップを使用せず直接値を入力させる。 つまり、A1の値によって、C1セルの数式を削除し、完全に空白にするということです。 「IF」関数等ではC1セルを空白にできても数式は残ってしまうため、実現することはできません。 わかりやすく言えば、「条件付書式」では条件によってセルの文字色や背景色を変更することしかできないと思いますが、それをセルの値も含めて変更するような感じです。 方法がお分かりの方、お教えください。

  • EXCEL 数式が入った空白セルを数える

    毎度お世話になっています。 質問の内容ですが、例えば下記のようなシートがあるとします。 セルB1、セルC1、セルD1:手入力セル セルA1:数式「=IF(B1="","",B1+C1)」 セルA2:文字列 セルA3:数式「=IF(D1="","",D1*0.1)」 セルA4:文字列 セルA5:A1+A3の計算結果を表示 (※なお、セルA2、A4は数値が入らない) というような場合において、 ●セルB1、C1、D1になにも入力されていない場合、セルA5が空白となる。 ●セルB1、C1にのみ数値が入力されている場合、セルA5の計算結果がセルA1の値のみ。 ●セルD1にのみ数値が入力されている場合も上記と同様に計算結果が表示される。 以上の条件を満たす数式をセルA5に入力したいのですが、 COUNTBLANKは数式が入っている場合には使えず、COUNTAの場合だとセルA1、A3のどちらにも数値が入った場合に表示される、といった数式になります。 IFをいくつも使えば可能とは思いますが、もう少し単純に数式を作れたらと思い質問をさせて頂きました。 よろしければ御回答宜しくお願い致します。 (内容を訂正したため、いったん質問を削除しました。もし御回答中の方が居ましたら申し訳ありませんでした。)

  • エクセルの条件付き書式のセルに数式がある場合

    エクセルの条件付き書式で、ある値以上の場合は、セルの色を変えたいと 考えていますが、セルに数式を入れているためか、値が入っていないのに セルに色がつきます。 具体的には下記に記します。 A1に金額、B1に個数でC1に合計金額を表示させて 合計金額の値によってC1のセルの色を、変えたいと考えています。 C1にはA1とB1に値が入っていない場合は、セルを空白にしたいため =IF(B1="","",A1*B1)という式を入れています。 そこで質問ですが (1)なぜセルが空白で値も入っていないのにセルに色がつくのでしょうか? (2)値が入っていない場合はセルに色がつかない方法はありませんでしょうか? よろしくお願いします。

  • エクセルのセルをある条件で塗りつぶしたいのですが・・・。

    エクセルでカレンダーを作成しております。セルに簡単な数式を入れて、例えばB2、C2、D2~に1日、2日、3日と自動的に出るように設定してあるのですが、それが31日がない月になると、31日の部分が1日として出てくるのでその部分が不要なので、空白にするか、塗りつぶしたいのですが、何かいい方法はないですか?条件付書式で、2回目に同じ値が出たら塗りつぶす・・・という方法も考えましたが、方法がわかりません。よろしくお願いいたします。

  • 数式で空白にしたセルについて

    もともと空白だったセルD1とE1があって、F1に「=D1*E1」と 数式を立てるとF1には0が表示されます。 しかし、D1に例えば「=IF(B1="","",VLOOKUP(B1,$G$1:$N$5,2,FALSE))」 という数式を入れD1を空白にすると「=D1*E1」の数式があるF1には #VALUE!のエラーがでます。 D1に返された""は、通常の空白という意味とは違うのでしょうか? また、通常の空白セルとは0(ゼロ)が設定されているのでしょうか? ご存知の方教えて頂けますでしょうか

  • エクセル ある条件でセルの塗りつぶし。

    エクセルを勉強中の初心者です。 あるセルに数値がある場合に、隣の空白セルを特定の色で塗りつぶしたい。 例えば黄色に塗りつぶした空白セルをコピーして他のセルに貼り付けると、貼り付けたセルは黄色になります。 やりたいことは、B2に数値がある場合にC2を塗りつぶしたいので、次のようにやってみました。 予め空白のE1を黄色にしておく。 C2に以下の式を入れましたが、黄色のE1を貼り付けることにはなりませんでした。 =IF(B2="","",E1) 関数式はあくまでも数値を扱うもので、根本的に間違っていたようです。 ある条件であるセルを塗りつぶすにはどうすればよろしいでしょうか? よろしくお願いします。

  • エクセルの数式が無効に

    用語が間違っていたら、ご勘弁ください。 エクセル(2003)で請求書を作っています。(他にはほとんど使っていません) 掛け算、足し算、空白の処理を、初心者向きの本を購入し、どうにか作りました。 2年間使えていたのですが、先月より計算が出来なくなりました。 例)小計のセル(D10) ------- =IF(B10<>0,B10*C10,"") ------- B列とC列に数字を入れても計算してくれません。 D列に、数式は入っています。 <試しました1> 過去問題なく使えていたページで 既に入っていたB列とC列の数字を変更してみたところ、 計算されず、D列の数字は変わらぬままでした。 <試しました2> 新規書類で、単純な数式を作りましたが、無効でした。 <試しました3> オートSUMは使えます。 <試しました4> CDからの追加インストールもしてみたのですが・・・ 心当たりがあるとすれば、 先日、Windowsアプリケーションの削除を大胆に行いました。 必要なものまで削除してしまったのかもしれません。 どなたか、お分かりになりましたら、お助けください。 どうぞよろしくお願いします。

  • Excel 3つの条件文を一つのセルにいれたい。。

    Excel、下述の 3つの条件文を一つのセルにいれたい。。です。 その一つのセルを仮にD2とします =IF(A2="","",A2*O2) =IF(B2="","",B2*O2) =IF(C2="","",C2*O2) A2に数値がはいっていなかったらD2は空白で、数値が入っていたらA2*O2の計算をする B2に数値がはいっていなかったらD2は空白で、数値が入っていたらB2*O2の計算をする C2に数値がはいっていなかったらD2は空白で、数値が入っていたらC2*O2の計算をする つまり、上述のIF文を一つにまとめたいのです。 頭が悪くてわかりません、誰か助けてください!!!!お願い致しますm(_ _)m

  • エクセルのマクロでセル選択の条件式の書き方

    いつもお世話になりありがとうございます。 Excel97です。 Worksheet_SelectionChangeマクロで、 Range("B2:D11")内のセルが選択されたときに動くマクロを書きたいのですが、条件式を With ActiveCell If .Row < 12 And .Row > 1 And .Column < 5 And .Column > 1 Then '実行するマクロ End If End With とIfの行を And、And、And で長々と書かず、Range("B2:D11")を使うなりしてもっと簡略な記述方法はないでしょうか? ご教示いただければ幸いです。

  • エクセル 数式入り等のセルの個数について

    こんにちわ。教えて下さい。 セルの個数を数えたいのですが、下記のいづれかの方法で出来るやり方はありますでしょうか? ☆条件付き書式で色をつけた空白のみのセルの個数の数え方(列に対応) (1)A1に今日又は今日以前の日付が入って、B1にはA1の日付から2週間たっても、何らかの日付・文字が入らない場合は空白の状態で色がつくようになっています。(文字が入力されたら色は無しになります。2条件が1つのセルに設定されています) 一番ベストなのは、この状態で空白で色のついているセルの個数が数えれば一番いいです。 もし、上記で駄目な場合、 ☆C1に別の数式で、B1が空白かそうでないかで、「FALSE」「TRUE」が表示されるように設定して、その状態で「FALSE」の個数を数えるっていうやり方まではわかるのですが、A,B,C列とも、入力していけば行が増えていくので、先にC列に数式をコピーしておくと、A列に日付が入力されていなくても、「FALSE」が表示されます。A列に日付が入力されている行での「FALSE」の数を数えるという方法はありますか? 説明が下手ですみません。。。 つまり、自分がない知恵で思った、2つの方法のどちらかででも、数える方法があれば教えて下さい。もちろん、もっといい方法があれば幸いです。