次の方法で共有

WorksheetFunctionでの配列要素数の限界について

Anonymous
2011-08-07T09:04:31+00:00

Excelにて、WorksheetFunction.Matchで配列を検索したいのですが、「型が一致しません」のエラーが発生します。

コードは以下です。

ary = Range("A1:A200000")

i = WorksheetFunction.Match("検索文字", ary, 0)

試行錯誤の結果、65536行を超えると発生するようです。

他の同様の関数(Vlookup等)でも、同じエラーが発生します。

これは、仕様なのでしょうか?

よろしくご教示下さい。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-08-07T12:03:06+00:00

>私が知りたいのは、このエラーは、仕様なのかどうか、

少なくとも私はそのようなKBは見つけられませんので、答えられません。

>また、回避方法があるのかと言う事です。

これも答えようがないですが・・・・

Variantではなく、Dim ary(n) とやっても、n=65535まではOKでn=65536とするとアウトですから、

配列に関しては、s.yamaokaさんのご指摘の通りで、2003以前の制限が生きてしまっているようですね。

おっしゃるようにバグくさいといえばバグくさいのですが、MS社がバグと認定してFixが出るまで駄目だと思います。

追記:

海外のQ/Aでも同じケースの議論が行われてますね。駄目ということで、代替手段に議論が移っちゃってますが・・・・

参考まで。

http://goo.gl/DITA5

この回答は役に立ちましたか?

0 件のコメント コメントはありません

5 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-08-07T11:14:51+00:00

    多少、話がそれていますが、

    ary = Range("A1:A200000")

    は普通に使われる記述ですし、

    Matchの第2引数において、配列を指定することにも、何も問題はないと思います。

    この配列が65536を超えた時、「型が一致しません」でエラーとなり、

    65536以下では正常に動作することは、複数のPCにおいても確認済です。

    私が知りたいのは、このエラーは、仕様なのかどうか、

    また、回避方法があるのかと言う事です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-08-07T10:26:02+00:00

    >そして、aryには、正しく入っていると思われます。

    そうですか。

    私には「本来範囲はRangeですからRangeオブジェクトを使用してください。」としかもうしあげられません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2011-08-07T10:06:00+00:00

    宣言は投稿において省略したのですが、

    実際は

    dim ary as variant

    です。

    そして、aryには、正しく入っていると思われます。

    イミィディエイトで調べる限り、uboundも正しく、

    値も(?ary(200000,1))等で正しく取得できています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2011-08-07T09:34:29+00:00

    それでは65536以内でも動きません。

    Dim ary As Range

    Set ary = Range("A1:A200000")

    としてください。

    提示されたコードではaryが宣言されていませんから、Variantになっています。

    (ですから、SetがなくてもVariant配列になり、動いていたみたいです)

    ちゃんと調べていませんが、トラブルの原因はVariant型の配列の制限が65536ということのようですね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません