• ベストアンサー

エクセルのSUM関数について

SUM関数を使って合計を出す時、値に取り消し線を入れたセルを無視する(計算しない)ようにしたいのですが、どのような関数を使えばよいのか分かりません。教えてください。

  • fchan
  • お礼率96% (25/26)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 VBAによるユーザー定義関数の合計の出し方。 以下のように取り付けてください。 標準モジュール: Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 '名称はなんでもよいです。例(StrikeOutSum->SOSum) '-------------------------------- Function StrikeOutSum(rng As Range) Dim c As Range Dim dblSum As Double  For Each c In rng   If c.Font.Strikethrough = False Then   dblSum = dblSum + c   End If  Next c  StrikeOutSum = dblSum '関数名を変えたらここも同じにする End Function '-------------------------------- 長い名前を付けるのは、主に、その機能の意味を忘れるからです。 後はワークシートで、 =StrikeOutSum(A1:A10) のように使えばよいです。 ---------------------------------------- 補足: #1さんのお話を、もう少し、話を深めさせていただきます。(脱線してすみません) 同様の使い方の説明(2006年が最終更新) http://support.microsoft.com/kb/213923/ja なお、Excel 2007でも、マクロ関数(XLM Macron)サポートしていると明示しています。 http://msdn2.microsoft.com/en-us/library/bb687829.aspx XLM macro sheets are still supported in Excel 2007. 私にVer.4 関数を公開した時、危険だとまでクレームをつけた方がいました。その方は、あまりにも関係のない議論を書き過ぎました。その方は、自分の個人的な体験を掲示板で書くレベルまで普遍化することが出来なかっただけのことです。 http://www.jkp-ads.com/Articles/ExcelNames08.htm 単に以下のように書けばよかったのですが。 One important warning has to be made though. When you copy a cell that uses any name containing XLM macro functions to another worksheet, Excel 97 and Excel 2000 will crash! Copying the formula itself from the formula bar (by selecting the formula and hitting control-c) will be no problem however. 「重要な注意:Excel97 やExcel 2000で、マクロ関数を含めた、『名前』を使ったセルを、別のシートにコピーしようとすると、クラッシュします。コピーは、数式バーから、その数式自身を選択して、Ctrl + C で、コピーして張り付ければ、問題はないのです。」 ただし、=(GET.CELL(23,!A1)=FALSE)+NOW()*0 のように書いて、書式の変更があったら、「F9」を押して、 再計算させます。NOW()*0 と付けることで、同じ名前登録をしたものは、再計算が起動されます。 =SUMPRODUCT(A1:A10,B1:B10) こうすると、範囲に文字列があっても、無視してくれます。 私は、Excelは、自分の今持っている、そのバージョンで、オールラウンドに使えば良いと考えているわけで、別に、マクロ関数方式が良いの悪いのというのは、不毛の議論だと思います。レガシーのテクニック(過去の遺産)には、必ず終わりがある、そんなことは言うまでもないことです。選択するのは、ユーザー自身で良いと思います。 ただ、#2のimogasiさんのおっしゃるように、情報の入らないものは、ブラックボックス的になってしまうことは否定できません。Ver.5 のフォームのダイアログシートも、グラフをアクティブにして使う、グラフ・メニューやCube やMS-Queryの使い方さえ、私たちは、Web情報でも、手に入らないに近いと思います。Wordなどはもっとひどい状況です。特に、日本語に関しては、情報が不足しています。その穴埋めは、もう不可能に近くなりつつあります。思うに、それは翻訳の問題にもあります。実情は、少し知っているのですが、あまりに、翻訳者をがんじがらめに縛りすぎて、分散化させ、その人の理解に関係なく、やらせているのが現実です。 このVer.4マクロ関数の場合は、多少の根気をもって英語を読めば、それで済む話ですが、現実、こういう世界は、そう簡単ではありません。情報の格差をもって、優位に立つというのが、社会だと思います。それは、仕方がないことだと思います。 Excel 4.0 マクロ関数 http://office.microsoft.com/ja-jp/excel/HP010475331041.aspx >このヘルプ ファイルは、Microsoft Excel 2000 でのみ使用できます。 は、マクロシートでの関数ヘルプの連動は、Excel 2000までであるということです。 単に、展開して、XLMACRO.CHM を取り出せばよいです。 なお、私は、使うことは少ないのですが、Ver.4 マクロ関数の資料は、出来る限り集めています。

fchan
質問者

お礼

ご回答、ありがとうございます。 詳しい説明をしていただいたのですが、 今の私には、まだ理解できないので 少しづつ、勉強して行こうと思っています。 Wendy02さんのおっしゃっていることが理解できるように 頑張ります。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセル関数の何たるかを知らない質問です。 エクセルの関数はセルの値によって計算やその他を行うものです。 取り消し線はセルの値ではなく、「書式」に属するものでセルの値としては捉えられません。 ですから取り消し線の有無を関数の引数部として表現できません。 VBAなら取り消し線の有無を掴むことができますので、ユーザー関数化ができます。以上がエクセルの現状の根本原則です。 ーーーー しかし、議論をややこしくするのが、既回答のエクセル4.0マクロという遺物(約20年前)の存在です。 これを使って、やれる・どんな方法でもやれればよいというなら、つかうことはできるでしょう。今ではただ解説本は無く、WEBでも解説記事は少ないですから、理解なしの丸呑みでしょう。 ユーザー関数もそうかもしれませんが、一応挙げておきます 標準モジュールに Function strk(a) If a.Font.Strikethrough = True Then strk = 1 Else strk = 0 End If End Function 例データA1:A6に A列  B列 12 34 1  <--取り消し線あり 54 31 1  <--取り消し線あり 15 12 B1セルの式 =IF(strk(A1)=1,1,"") 式をB6まで複写。結果上記B列。 取り消し線のあるセルの数の合計 =SUMIF(B1:B6,1,A1:A6) 結果 65

fchan
質問者

お礼

ご回答、ありがとうございます。 おっしゃるとおり、エクセル関数の何たるかを 理解していなかったことが、分かりました。 今の私には、ちょっと難しいことが分かりました。 少しづつ勉強して行こうと思います。

  • Bubuca
  • ベストアンサー率59% (531/896)
回答No.1

こんばんは 作業列とマクロ関数のGet.Cellを名前定義で使えばできると思うのですが、エクセルのバージョンによってはできないかもしれません。 Mac版ならばオフィス2004以前、Win版ならば2003以前で使えると思いますが、ちょっと確かではありません。 データがA1~A10に入っているとしてB列を作業列にします。 B1セルを選んでおいて、例えばStrikeという名前を定義して その内容は=get.cell(23,A1)*1とします。 このときに絶対参照にならないように注意してください。 B1には =if(strike=1,0,1)と入れて、下までコピーします。 A列に取り消し線があるときは0、無い時は1になります。 合計を求めたいセルには =sumproduct(A1:A10*B1:B10)とします。 取り消し線の設定を変えてもたぶん自動で再計算はされない場合は、 B列のセルで編集状態にしてエンターで再確定するといいかもしれません。 Get.Cell(23)はフォントに取り消し線が設定されているとTrueを返します。 Trueが返ってきた時のセルの値をif文で0にしています。 このやり方を好まない人は多いかもしれません。 バージョン違いでできない場合はご容赦ください。

fchan
質問者

お礼

ご回答、ありがとうございます。 まだ、私にはマクロ関数についての知識がありませんので、 ピンときません。 これから、マクロの勉強もして行こうと思います。

関連するQ&A

  • エクセルで関数SUMなどで

    エクセルで関数SUMなどで 合計を求めた数値が、あるセルにあるとします。 その合計の数値を、そのまま数字として ・・・(関数(計算式)は無くして) 他のセルに貼り付けたいのですが そのような事は出来ますでしょうか・・・。 御教示の程、よろしくお願いいたします。 <m(__)m>

  • Excel VBAの SUM関数について質問です。

    Excel VBAの SUM関数について質問です。 SUM関数で合計の値を出す場合、 SUM(A1:A5)という関数で合計を出しますが SUM(sheet2.cells(1,1),sheet2.cells(5,1)) と言ったようにCellsで指定はできないのでしょうか? 複数の列にVBAのプログラムで合計の値を出したいのです。 WorksheetFunction.SumではSUM(A1:A5)のように 自動計算にならないと思うので・・・

  • EXCEL SUM関数で合計が違う

    以前次のような質問がありました。 QNo.2266177 EXCEL SUM関数で合計値が違う場合 質問者:purepop 教えてください。 EXCELのSUM関数で合計値が違う場合があるのですが、 何が原因で起こるのでしょうか? また、どうすれば直るのでしょうか? ------------------------------------- 私も同じような現象が起こり,困ってしまい,教えてを調べましたが,上の質問には,解決に直接繋がる回答がありませんでした。 ただ,文字列セルは無視されるということです。 ところが,整数だけ入力されてセルが,どうも文字列と認識されているようなのです(セルの表示形式を小数第1位表示の数値にしても,コンマ以下が示されることなく,整数値のままでした)。 それらのセルの値は,他人からカット&ペーストでもらったものです。 数値は,上の入力エリアには,文字列「'3」ではなく,数値「3」と表示されています。 しかたなく,他のセルで当該セル*1をして,値のみ当該セルにコピーすると,小数第1次が0となる,「3.0」と表示でき,合計もただしくなりました。 質問は,このように,「'」がつかない文字列がはいてしまうのはどのようなときでしょうか。  これがわからないと,あぶなくてこまってしまいます。

  • エクセルのSUM関数

    エクセルのSUM関数で合計を出す場合、非表示にしているセルをたさない様に合計をするのはどうすればよいのでしょうか?

  • SUM関数について

    エクセルの関数について質問です。 振込手数料の計算が面倒な為 IF(セル番号="","",IF(セル番号<=30000,"210",IF(セル番号>=30000,"315")))(例) という式を入力してあります。 そして小計にて手数料の合計を出そうとSUM関数を入力したところ 計算が出来ませんでした。 この振込手数料の合計が出せるような関数はどんな式になりますか? お分かりになる方いらっしゃいましたら 宜しくお願い申し上げます。

  • エクセルのSUM関数

     エクセルのSUM関数で、1,3,2が入力してある3つのセルの数字を合計しようとしたところ、6になるはずが0になってしまいます。 これはどうしてでしょうか。

  • エクセル SUM関数

    超初心者です。 SUM関数が合計を計算するための関数だとわかっているのですが、引き算やかけ算をさせてはダメなんですか? たとえば、      =SUM(A1-A2*A3) のような式を入れても、ちゃんとした数値(答え)が出てきてると思うのですが・・・(ーー;)

  • SUM関数について

    色々試したのですが、うまくいきません。 お分かりになる方、是非教えて下さい。 EXCEL2007で =SUM(Sheet1:Sheet2!A1)と数枚のシートの同じセルのトータルを 計算させています。 ところが対象セルに空白が1つでもあり、合計がゼロになる場合、ゼロと表示せず、 空白セルになってしまいます。 対象セルに空白があっても、合計が1以上の場合は答えが表示されます。 IF関数やISBLANK関数を使用してみても、うまくゼロ表示ができませんでした。 どのような数式にすれば、対象セルに空白があり、合計がゼロになる場合、ゼロと表示 してくれるのでしょうか? 是非教えて下さいお願いします。

  • MySQL4.1.15でのSUM関数でDISTINCTについて

    お世話になっております。 MySQLの4.1.15を使用しております。 合計を出すSUM関数を使用し、重複する値を除外させて計算させる方法はありませんか? MySQL5.1からはSUM関数にDISTINCTをつければ重複値を削除できますが、4.1.15で同じ計算をさせる方法が分かりません。 ご教授の程宜しくお願いします。

    • ベストアンサー
    • MySQL
  • セルのひとつひとつにsum関数を入れたい

    セルひとつひとつにsum関数を入れていってTotalのところにそれぞれのせるの合計をだしたいんですけどどうやったらいいんですか? それぞれのセルに入れていく数式など詳しく教えて下さい。

専門家に質問してみよう