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

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

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

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

Q&A

解決済

1回答

1538閲覧

VBAで使用するワークシート関数の制限について

py-beginner

総合スコア9

VBA

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

0グッド

0クリップ

投稿2021/11/15 07:22

よろしくお願いいたします。
office365のEXCELバージョン2008です。

Dim A() As Double

で宣言した変数Aに、10万個程度の数値を格納し、その中からMAX.値とMIN.値を取り出すのに以下のようにワークシート関数を使ったのですが、

MyMax = Application.WorksheetFunction.Max(A)
MyMin = Application.WorksheetFunction.Min(A)

正しい数値が返ってきませんでした。
試しに、Aの数値をワークシートのA列に吐き出してみたのですが、

Range(Cells(1, 1), Cells(UBound(A), 1)).Value = WorksheetFunction.Transpose(A)

1行目から5819行目までは変数Aの保持している数値が吐き出されたのですが、5820行目以降はすべて「#N/A」表示になってしまいました。
Application.WorksheetFunction.で取り出した誤ったMAX.値とMIN.値も配列の0~5819の範囲まででの数値のようでした。

Application.WorksheetFunction.でVBAからワークシート関数を使用するとき、引数の数に制限(5820個?)がある、ということなのでしょうか?それとも単に私の使い方が適当ではないのでしょうか?

今回、For文で数値の数だけMAX.値を比較しながら取得することで目的は果たせたのですが、MAX関数が使えたら1行で済むのに、とも思いましたので後学のためにご教示いただけましたら幸甚です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

理由は良く分からないですが、一次元配列だと要素数の制限が厳しいらしいです。
また、環境・関数によっても制限に差異があるようです。
VBAでシート関数使用時の配列要素数制限

vba

1 Dim i As Long 2 Dim a(100000) As Double 3 Dim b(100000, 0) As Double 4 5 For i = 0 To 100000 6 a(i) = i 7 b(i, 0) = i 8 Next 9 10 Debug.Print "Max(a)=" & WorksheetFunction.Max(a) 11 Debug.Print "Max(b)=" & WorksheetFunction.Max(b)

うちの環境だと、上記処理のDebug.Printの出力結果は
Max(a)=34464
Max(b)=100000
となりました。(Excel 2013)

投稿2021/11/15 07:51

編集2021/11/15 08:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

py-beginner

2021/11/15 08:03

ご回答ありがとうございます! リンクのご提示もありがとうございます。こういったページを探していたのですが自分では見つけられずにいたのでとても助かりました。 やはり制限があるのですね。エラーやワーニングが出ないため、過信は禁物だと身に沁みました。 一次元配列と二次元配列で制限が大きく異なることも恥ずかしながら知りませんでしたのでとても勉強になりました。 この度はお時間を割いていただきありがとうございました!
退会済みユーザー

退会済みユーザー

2021/11/15 08:10 編集

あくまでワークシート関数なので、ワークシートで扱える行列数以上の要素数を入力されるのは想定してないのかもしれません。
py-beginner

2021/11/15 08:20

そう言われてみると理にかなっているのかと思いました。 初心者としてはエラーが出てくれるとありがたいのですが…。 重ねてのコメントまで、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問