• ベストアンサー

マクロで引き算して0にする

エクセルで任意のセルの値(正の整数)を引き算して、そのセルに”0”を表示するマクロはできますか。 たとえば、A1のセルに”50”と入力されているとき、マクロでA1のセルに”=50-50”という計算式を入力することはできますか。 データの入力されているセルのアドレス、および値ともに任意です。 教えてください。

  • thun7
  • お礼率25% (2/8)

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> アクティブセルのみ実行させるにはどのように組みかえれば Sub test02() With ActiveCell .Formula = "=" & .Value & "-" & .Value End With End Sub

thun7
質問者

お礼

今度こそ自分が欲しかった答えのようです。 本当に有難う御座いました。 いずれは私も誰かの質問に答えられるよう勉強に励みます。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

#3 merlionXXです。 意味がわからないと不安でしょうから一応簡単に逐条解説をつけますね。 Sub test01()'マクロ始まり With ActiveSheet '現在見えているシートにおいて On Error GoTo line 'エラーが発生したらline:に飛ぶ(数値のセル無ければエラー) Set Rng = .UsedRange.SpecialCells(xlCellTypeConstants, 1) '使用範囲内で数値のセルをRngと名付ける For Each c In Rng 'Rngの各セルをcとし、各cで c.Formula = "=" & c.Value & "-" & c.Value 'cの式を"=cの値-cの値"とする Next '繰り返す End With 'with文終了 Exit Sub 'マクロから抜ける line: 'エラーで飛んできたら MsgBox "数値がありません。" 'メッセージを出す End Sub'マクロ終わり

thun7
質問者

補足

ご親切に有難う御座います。 が、大変すみません。!! アクティブセルのみ実行させるにはどのように組みかえれば宜しい ですか。 言葉足らずの説明で貴重な時間をさいて頂き申し訳ありません。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

こんな感じでいかがでしょうか? Sub test01() With ActiveSheet On Error GoTo line Set Rng = .UsedRange.SpecialCells(xlCellTypeConstants, 1) For Each c In Rng c.Formula = "=" & c.Value & "-" & c.Value Next End With Exit Sub line: MsgBox "数値がありません。" End Sub

thun7
質問者

お礼

ご回答有難う御座いました。 無事うごきました。 これで作業効率がかなりUPしそうです。 とりあえずコピー&ペーストして使いますが、 解説書をみて勉強させていただきます。 初めての質問でしたが、ずっとほしかった答えが 見つかってとてもうれしいです。 本当に有難う御座いました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

入力というより値を数式に置き換える作業になりますが可能です。 例 Private Sub Worksheet_Change(ByVal Target As Range) '数式を除外 If Left(Target.Formula, 1) <> "=" Then Exit Sub 'A1以外のセルと文字列を除外 If Target.Address = "$A$1" And IsNumeric(Target) Then '数式をセット Target.Formula = "=" & Target.Value & "-" & Target.Value End If End Sub

thun7
質問者

補足

実行時エラー424 オブジェクトが必要です。 のエラーになってしまいました。 If Left(Target.Formula, 1) <> "=" Then の部分が黄色くなっています。 つたない質問ですみません。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

なぜ引き算なのでしょうか? なにか入力のあるセルを0にするだけではダメなのですか?

thun7
質問者

補足

元に入力されていた数量を確認したいからです。 一時的に”0”に数量を変更したいのです。

関連するQ&A

  • エクセルの引き算について教えてください。

    エクセルの引き算をしたいのですが、 ひとつのセルに数字を入力して、その数字からそのセルにもともと入力している数字を引く事って できますか?説明が下手くそですみません。。 たとえば、A1のセルに、「1500」と入力しておきます。 そのA1のセルに、「3000」と入力したら、自動で1500という値が出る。。。 というような感じなのですが、こんなことって出来るんでしょうか?? ちなみになぜこんなことをしたいかというと、 今作成している表に後日入力する数字があり、そこから引き算をしないといけないので 先にフォーマットとして作っておきたいと思い、行き詰まってしまいました。 ご回答よろしくお願い致します!!

  • 時間の引き算

    例えば 開始時刻をセルA1に「1100」、終了時刻をセルA2に「1335」と入力して、引き算の計算式をセルA3に入れてみて、A3の表示が「2:35」と表示させるにはどうしたらいいのでしょうか? できればA1も「11:00」A2も「13:35」と表示されるようにしたいです。

  • Excelの時間計算(引き算)の端数処理について教えて下さい。

    Excelの時間計算(引き算)の端数処理について教えて下さい。 以下Excelの内容です  セルA1:22:00  セルA2:22:30  セルA3:=A2-A1   ※表示形式は"[h]:mm"です。 上記の場合、A3は「0:30」となると思います。 ここまでは良いと思いますが、同じ表示形式でセルA4に「0:30」と手入力し、 セルA3とセルA4をif文で比較すると、一致しない結果となってしまいます。 セルA5:=if(A3=A4,TRUE,FALSE) ⇒結果はFALSE 数式の検証で確認したところ、  セルA3=0.0208333...334  セルA4=0.0208333...333 と、確かに小数点第16位が異なっています。 もっと追いかけるとセルA2の「22:30」に端数が発生しており、整数のセルA1と無限小数のセルA2を引き算を行ったため、丸め誤差によりこのような現象となっているようです。 時間の引き算を行う場合は、時分秒毎に計算し直さなければならないのでしょうか? または、TEXTで変換やtimevalu等を利用する等の回避策は有るのでしょうか? 時間計算を行う際の鉄則などありましたら、ご教授頂ければと思います。 皆様のお知恵をおかしくださいm(_ _)m

  • Excel マクロの構文

    次のマクロを記入したいのですが、うまくいきません 教えてください。 セルの値は5桁の整数です セル"D2"の値 - セル"A1"の値 が -30以下であれば セル"E2"に セル"D2"の値を表示 そうでないときは 空白で表示 この計算を セル"D12" - セル"A11" 結果を セル"E12" セル"D22" - セル"A21" 結果を セル"E22" のように10行とびごとに        セル"D102" - セル"A101" 結果を セル"E102" まで10回繰り返し計算したいのですがうまくいきません 何方か、このマクロの記入を教えてください お願いします。

  • excel 関数 引き算

    excel で引き算後、合計を求める計算式を教えてください。 A1に7.5 B1に5.5を入力してあります。 C1に合計値を求めたい。 ただ、 基本数値「8」から7.5 5.5を引き合計を求めたいです。 答え(合計値)(C1)は「3」になるような計算式です。         A1=0.5 B1=2.5 になるのでC1のセル計算値は「3」になります。 実際はA1~AH1まで入力されています。 途中セルには「/」とか「文字」も入力されています。 数値のみを計算したいです。 どなたかよろしくお願いします

  • 教えてください。 エクセルの表計算を始めたばかりです。 引き算だけの表

    教えてください。 エクセルの表計算を始めたばかりです。 引き算だけの表計算ですが、セルの列にところどころ、#VALUE!が表示されます。 データを入力すれば#VALUE内に計算はしてくれます。先月のデータをコピーして入力、今月分の入力すると、#VALUEがでるところがでます。エラーメッセジとのことなので、心配で質問させてもらいました。基本ができてなく、やり始めたので先がみえないので、ご回答よろしくお願いします。  

  • (Excel VBA)またまた困っています・・・ o...rz

    どうもrozzerです。 またもや高くそびえ立つVBの壁に激突して死にかけてしまっています・・・orz 今度は単純なマクロだと高を括っていたので鼻歌交じりでマクロを組んでいたのですが どうも如何せん上手くいきません! もう死にたいです! 現在エクセルで、とある業務で使うデータベースをマクロを組み最適化を図っています。 まず A列の2行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の整数値があるとします。 その値の合計を、セル【B1】に表示させたいのです。 ですが、ここで問題なのですがセル【B1】に入力される式はSUM等の関数式ではなく、ただの「数値」として表示させたいのです。 つまりA列の2行目から任意の行(最終行まで)に入力されている整数値に、後々、変更があった場合に【B1】に表示されている値が、一番初めに合計の値をはじき出した値から変化しない様にしたいのです。 そして今度はセル【C1】に、A列の2行目から任意の行(最終行)までの合計値を「SUBTOTAL」関数[=subtotal(9,C1:**)]を入力したいのです。 ここまでの動作をマクロ化したいのですが、どうも如何せんどうも如何せん上手くいきません! もう死にたいです! 何卒、ご教授頂けましたら幸いで御座います。

  • エクセル 西暦どうしの引き算をするには

    エクセル 西暦どうしの引き算をするにはどうしたらよいでしょうか。 セルの値は2008/11/05でこのセルの表示は平成15年11月5日となっています。本日からこのセルの値を引いて勤続年数をだしたいのですが、どのように設定したらよいのかを教えてください。

  • マクロの並行処理について

    あるサーバーにおいてあるCSVを読みに行く常駐ソフト(AAA.exe)があります。 これとエクセルが連携していて、エクセルのセルに =AAA|a とか =AAA|b とか入力しておくとCSVのaやbの値がセルに入力されます。 この常駐ソフトはリアルタイムに動いて、CSVは1秒ごとに新しいデータに書き換えられるので、エクセルのセルの値も当然1秒ごとに新しい値に変わっていきます。 これを動かしながら、マクロを別でくんで、こちらはタイマーを設定して、10秒ごとにある特定のセルの値を見に行き、そのセルの値がある規定値以上になると、プログラムを走らせるようにしています。 朝の9時前後には規定値をこえるため、マクロのプログラムが動かなければいけないのですが、いつも10時過ぎになってやっと動きます。 また、セルの値もすべてのデータをとりにいかず部分的にしか入力されません。 これは常駐ソフトでエクセルにデータをどんどん入力している上で、さらにマクロを動かしているから、並行処理ができずに動作が不安定になっているのでしょうか? ちなみにマクロのタイマーは DoEvents Sleep (10000) で10秒またせた後に規定値以下ならば再起呼び出しで自分自身を呼び出すようになっています。 分かる方、もしくは予想でもいいので何かヒントとなるものが得られればと思います。 アドバイスよろしくお願いします。

  • エクセルのマクロについて

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

専門家に質問してみよう