2024年のうちにやっておきたいこと、ここで宣言しませんか?

EXCEL Microsoft365

VBAで、2行、179997列の2次元配列があります。
1行目には時刻、2行目には数値データがはいっています。

この配列について、A1セルをリサイズ、行列変換して出力することで、
A列に時刻、B列に数値データの一覧がほしいです。

しかし、出力すると、48926行目で、次の行以降が勝手にB列に折り返されて出力されてしまいます。

配列には正しくデータが入っていることを確認しているのですが、出力する際に、特定の行以降が次の行に出力されてしまい、
A列とB列に時刻が出力されてしまい、数値データが出力されません。
なお、48926行から179997行までは#N/Aとなっています。

データ数を少なくした場合(2行10列)で実行したときには問題なく出力されましたので、コード上に問題はないと思っています。

A 回答 (1件)

こんばんは



当方はExcel2019ですが、Transposeで行列変換をして一気に代入しようとすると、ご質問と同じ事象が発生しますね。
試みに、1セルずつ出力してゆく方式にすれば、問題なく、正しく2列に出力できます。(処理に時間はかかりますが)

どうやら、Transpose関数特有の問題のように思われます。
「48925」が列数に関係する制限かと思いましたが、最大列数はもっと小さい(=16384)ので直接には関係ないようです。
ただし、シート関数等の場合には列数を超える配列計算ができないなどの制限がありますので、Transeposeが「シートの行列変換できれば良い」という発想で作成されているとすると、「それを超える制限であれば良かろう」としている可能性が考えられます。
(そもそもですが、Transposeは「シート関数」ですので・・)

上記の「1セルずつ代入する」方式でも問題ないと思いますが、処理時間がかかるので、別に「179997行×2列」の配列を作成しておいて、Transposeを使わずにメモリ上で行列変換を行えば、比較的時間をかけずにまとめて出力することが可能です。
(一時的にメモリを使いますが、クリアすれば問題ないでしょう)
    • good
    • 2
この回答へのお礼

ありがとう

早くにもご回答いただきましてありがとうございます。
確かにTranspose 制限でぐぐるといくつか記事がありました。
Transporseに制限があることはまったく存じておらず、
配列の出力の仕方をぐぐってばかりで見つけられませんでした。

ご指摘のように、配列を2つに分けて作成し、
Transposeを使用せずに出力するように組んでみます。

ありがとうございました。

お礼日時:2024/10/26 18:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A