
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も見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
Excel countif関数で取り消し線のセルをカウントしないようにしたい countif関数で文
Excel(エクセル)
-
Excelのカウント関数に関しての質問です。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
クリックすると文章が表示され...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
フォントの色を指定して削除出...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
エクセル 未入力セルがあると...
-
Excelで、図形内の文字をセルに...
-
現在のセルの位置を返す関数は...
-
マクロを実行すると画像がズレ...
-
エクセルでPDFリンクを大量...
-
セルがクリックされた回数をカ...
-
Excel:セルの値(文字列)を数...
-
アポストロフィーの一括挿入 ...
-
空白セルを空セルに置き換える...
-
セル背景や文字を点滅させる方法
-
VBA 見つからなかった時の処理
-
エクセルマクロ 赤色の文字を検...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
Excel:セルの値(文字列)を数...
-
現在のセルの位置を返す関数は...
-
フォントの色を指定して削除出...
-
マクロを実行すると画像がズレ...
-
アポストロフィーの一括挿入 ...
-
エクセル 未入力セルがあると...
-
【EXCEL】先週の月曜日の日付を...
-
エクセルでPDFリンクを大量...
-
エクセルでセルをダブルクリッ...
-
EXCELのセルや文字色の反映
-
セルの内容をテキストボックス...
-
セルがクリックされた回数をカ...
おすすめ情報