
VBAでオリジナル関数を作ろうとしています。SUM関数に似た機能をわざわざオリジナル関数で作ってみたいのです。マウスでセルを選択し、選択セルの合計を出したいのです。下記のようなコードを書いてみたのですが、うまくゆきません。オリジナル関数初心者のため、基本的な事が判ってないのだと思います。正しいコードを教えて下さい。
Function 合計★() As Double
Dim 選択セル行数 As Long
選択セル行数 = selection.Rows.Count
Dim 選択セル列数 As Long
選択セル列数 = selection.Columns.Count
Dim 選択セル先頭行 As Long
選択セル先頭行 = selection(1).Row
Dim 選択セル先頭列 As Long
選択セル先頭列 = selection(1).Column
Dim n行 As Long
Dim n列 As Long
Dim 合計 As Double
For n行 = 0 To 選択セル行数 - 1
For n列 = 0 To 選択セル列数 - 1
合計 = 合計 + Cells(選択セル先頭行 + n行, 選択セル先頭列 + n列).Value
Next
Next
合計★ = 合計 '戻り値
End Function
No.1ベストアンサー
- 回答日時:
Function goukei(ParamArray r() As Variant) As Double
Dim rr, n
Dim i As Double
For Each rr In r
For Each n In rr
i = i + n
Next
Next
goukei = i
End Function
No.3
- 回答日時:
Excelの標準機能に似たようなものありません?
Googleスプレッドシートだとsum, average, max, minが表示される。
No.2
- 回答日時:
こんばんは
私はプロ経験はなく遊びで触っている程度なので
私の知識が正しいか誤りなのかは分かりませんが・・・参考程度で
#1様が示されているような感じで、オブジェクトとして扱う処理を考えると色々な場面でやり易いように思います (プロパティが使い易い、行列インデックスを考慮しない処理が出来る・・・などなど)
繰り返し処理などはFor Eachを使用します
(ただし処理順位を確定する必要がある場合はカウント変数が無難 For 変数 = 0 To )ご質問のようなロジック
又、組み込みSUM関数は文字列が対象範囲に含まれていてもエラーを返しません
目的により、そのような処理(考え方)を加えるのも必要と言えます
If IsNumeric(Object.Value) Then
(Valueプロパティを持つオブジェクトの値が数値ならば)
ユーザー定義関数を意識して関数の引数を加えるようにします
ご質問のFunctionの場合シート上で使用すると
シートが再計算される度(トリガーは再計算)にその時点で選択した範囲の合計が出力されます 数式は参照元トレースが出来ない事になります
VBAから呼ぶときは 引数にselectionを与えれば良いので
Functionの受け側では変数 VariantやRangeなどで受ければ成立します
素人の説明は分かり難いと思い参考になりそうなサイトを示します
https://www.moug.net/tech/exvba/0100042.html
https://www.excel-chunchun.com/entry/worksheet-f …
更に引数を付けるべき理由は・・
https://www.excel-chunchun.com/entry/worksheet-f …
ユーザー定義関数は注意して使って
https://www.excel-chunchun.com/entry/worksheet-f …
ユーザー定義関数を意識した ご質問では無いかも知れませんが
Functionプロシージャの参考になればと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) エクセルVBAで次の二つを行いたいのですが思うように動きません。どう修正したらよいのでしょうか? 2 2023/04/22 14:55
- Excel(エクセル) エクセルのマクロが途中の行から適用されない 2 2022/07/09 20:25
- Excel(エクセル) エクセルのマクロが上手く動きません 4 2022/07/14 13:25
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
Excel グラフのプロットからデ...
-
特定の文字がある行以外を削除...
-
Excelのフィルター後の一番上の...
-
エクセル マクロ オートフィ...
-
セルに値が入力されると隣りの...
-
アクティブになっている行をマ...
-
エクセルのセルに指定画像(.jpg...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセルVBA 最終行を選んで並...
-
エクセルマクロ オートSUM(合...
-
色付き行の非表示について
-
エクセルの列幅以上の文字列を...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
Excel ウインドウ枠の固定をす...
-
結合されたセルをプルダウンの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
結合されたセルをプルダウンの...
-
エクセル マクロ オートフィ...
-
エクセル 上下で列幅を変えるには
-
excel 小さすぎて見えないセル...
-
Excel ウインドウ枠の固定をす...
-
Excelのフィルター後の一番上の...
-
エクセル 時間の表示形式AM/PM...
-
エクセルのセルに指定画像(.jpg...
-
VBAで色の付いているセルの行削除
-
excelのデータで色つき行の抽出...
-
A1に入力された文字列と同じ文...
-
アクティブになっている行をマ...
-
電話番号の入力方式が違うデー...
-
連続データが入った行の一番右...
おすすめ情報