質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1128閲覧

VBAマクロから複数の値を返してExcelのセルに設定したい

meguru0411

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/09/12 08:25

マクロで複数の値を取得し、Excelでそれらをそれぞれ別のセルに設定しようとしています。ネットで調べたら配列で返せばいいと書かれていてとりあえず以下のコードで実現できました。

VBA

1Function SumAvg(範囲 As Range) 2 Dim result(1, 0) As Double 3 cnt = 0 4 For Each myCell In 範囲 5 cnt = cnt + 1 6 result(0, 0) = result(0, 0) + myCell.Value 7 Next 8 result(1, 0) = result(0, 0) / cnt 9 SumAvg = result 10End Function

Excel

1SumAve(範囲)

ですが、これだと設定先のセルが限定され、また異なるデータ型の値を同時に返せないと考え、参照渡しの引数を必要な数だけ用意してみました。ところが、それだとExcelで指定したセルに期待する値が設定されません。

VBA

1Function SumAvg(範囲 As Range, ByRef sum As Integer, ByRef ave As Single) 2 cnt = 0 3 For Each myCell In 範囲 4 cnt = cnt + 1 5 sum = sum + myCell.Value 6 Next 7 ave = sum / cnt 8End Function

Excel

1SumAve(範囲, 合計セル, 平均セル)

今回やりたいことは配列渡しでも対応できる仕様ですが、今後の拡張性を考慮して複数の参照渡しでも実現できるようにしておきたいです。

Office 365を使用しているためExcelのバージョンは不明です。(アカウント情報に2108と書かれているけど、これのことですか?)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

異なるデータ型の返却の方は、以下のようにしてはどうでしょうか。
ただ、返却先のセルを指定するのは難しいと思います。
できるとしたら、縦横どちらにスピルするかの指定くらいではないかと思います。

vba

1Function SumAvg(範囲 As Range, OptionalAs Boolean = True) 2 Dim cnt, mycell 3 4 Dim s As Integer 5 Dim a As Single 6 7 cnt = 0 8 For Each mycell In 範囲 9 cnt = cnt + 1 10 s = s + mycell.Value 11 Next 12 a = s / cnt 13 Dim result 14 result = Array(s, a) 15 16 IfThen 17 result = WorksheetFunction.Transpose(Array(s, a)) 18 Else 19 result = Array(s, a) 20 End If 21 22 SumAvg = result 23 24End Function

投稿2021/09/12 09:06

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meguru0411

2021/09/17 22:04

回答ありがとうございました。 質問のメインは複数のByRefで任意のセルに値を設定することでしたが、どうやらそれに対する解決策は無さそうなので、貴方の回答をベストアンサーにして解決済みとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問