
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/bb68782 …
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/HP010475 …
>このヘルプ ファイルは、Microsoft Excel 2000 でのみ使用できます。
は、マクロシートでの関数ヘルプの連動は、Excel 2000までであるということです。
単に、展開して、XLMACRO.CHM を取り出せばよいです。
なお、私は、使うことは少ないのですが、Ver.4 マクロ関数の資料は、出来る限り集めています。
ご回答、ありがとうございます。
詳しい説明をしていただいたのですが、
今の私には、まだ理解できないので
少しづつ、勉強して行こうと思っています。
Wendy02さんのおっしゃっていることが理解できるように
頑張ります。
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
341 <--取り消し線あり
54
311 <--取り消し線あり
15
12
B1セルの式
=IF(strk(A1)=1,1,"")
式をB6まで複写。結果上記B列。
取り消し線のあるセルの数の合計
=SUMIF(B1:B6,1,A1:A6)
結果
65
ご回答、ありがとうございます。
おっしゃるとおり、エクセル関数の何たるかを
理解していなかったことが、分かりました。
今の私には、ちょっと難しいことが分かりました。
少しづつ勉強して行こうと思います。
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にしています。
このやり方を好まない人は多いかもしれません。
バージョン違いでできない場合はご容赦ください。
ご回答、ありがとうございます。
まだ、私にはマクロ関数についての知識がありませんので、
ピンときません。
これから、マクロの勉強もして行こうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- 会計ソフト・業務用ソフト ExcelのSUM関数と+の違い 2 2022/07/12 18:32
- Excel(エクセル) エクセルの数式を等間隔にオートフィルできるやり方を教えていただきたいです。 実際の作業↓ A3セルに 7 2023/06/05 19:04
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Google Drive スプレッドシートの時間(分、秒)の足し算SUM関数がうまくいきません。 3 2022/09/08 16:39
- フリーソフト OpenOffice 表計算で文字としてコピペ 2 2023/05/31 11:11
- Excel(エクセル) VBA SUM関数を入力したい 6 2022/08/20 20:10
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセルのマクロ作成について教えてください 5 2023/02/20 00:39
- Excel(エクセル) A列が指定数値以上になったらD列の計算式を変更 3 2022/07/11 11:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
Excelでセルをクリックす...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
マクロを実行すると画像がズレ...
-
選択したセル範囲に入っている...
-
シート保護とグループ化機能を...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
セルの内容をテキストボックス...
-
Excel:セルの値(文字列)を数...
-
フォントの色を指定して削除出...
-
エクセルでセルをダブルクリッ...
-
エクセルでPDFリンクを大量...
-
[EXCEL] フォント変更が正常に...
-
セルがクリックされた回数をカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
Excelでセルをクリックす...
-
Excel ハイパーリンクのURLを別...
-
太字に設定されているセルの個...
-
マクロを実行すると画像がズレ...
-
セルの内容をテキストボックス...
-
フォントの色を指定して削除出...
-
Excel:セルの値(文字列)を数...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
アポストロフィーの一括挿入 ...
-
現在のセルの位置を返す関数は...
-
エクセルでセルをダブルクリッ...
-
空白セルを空セルに置き換える...
-
エクセル シート保護された共...
-
エクセル 未入力セルがあると...
おすすめ情報