こんにちわ。
不可解な現象があって、困っているのですが、
どなたかわかる方いましたら教えてください。
Excel2003で、以下のマクロを実行すると、
エラーになってしまいます。
Sub test()
Dim i As Integer
Dim sampleString As String
Dim myArray(2, 2) As String
sampleString = ""
For i = 0 To 911 ' ←ここが910だったらOK。911だったら、エラーになる。。。
sampleString = sampleString & "a"
Next
For i = 0 To 2
myArray(i, 0) = sampleString
myArray(i, 1) = sampleString
myArray(i, 2) = sampleString
Next
Range("A1:C3") = myArray ' ← ここでエラーになってしまう。
End Sub
911文字以上のデータを、配列に入れて、]
Excelに貼り付けようとすると、エラーになってしまいます。
配列をまわして、個別で貼り付ける分には、エラーになりません。
Sub NotErr()
Dim i As Integer
Dim sampleString As String
Dim myArray(2, 2) As String
sampleString = ""
For i = 0 To 912
sampleString = sampleString & "a"
Next
For i = 0 To 2
myArray(i, 0) = sampleString
myArray(i, 1) = sampleString
myArray(i, 2) = sampleString
Next
For i = 1 To 3
Cells(i, 1) = myArray(i - 1, 0)
Cells(i, 2) = myArray(i - 1, 1)
Cells(i, 3) = myArray(i - 1, 2)
Next
End Sub
なぜなんでしょう。。。
Excel2000だったら、エラーにならなかったです。
うーん。うーん。
Excelのバグか?
困ったなぁ。。。
どなたか何か知っている方がいましたら、教えてください。
よろしくお願いします。
これかな。
http://support.microsoft.com/?scid=kb%3Bja%3B818808&x=10&y=15
Blueさん。情報、ありがとうございます。
うーん。困った。
それにしても、回避策が↓っていうのは、いただけないですね。
>この問題を回避するには、配列内に 912 文字以上の文字列が
>格納されるセルが含まれないように、コードを編集します。
そんなことわかってるちゅーのに。。。
どう対処するのが一番よいのでしょうか?
やっぱり、配列を回して、セルに格納するしか方法がないのでしょうか?
処理速度がかなり、おそくなりますよね。
ご助言ください。m(_ _;)m
よろしくお願いします。
すべてのセルに同じ値をいれるのなら
Range("A1:C3").Value = sampleString
で、どうでしょうか?
>処理速度がかなり、おそくなりますよね。
そこは実際に計測してみましょう。ループをまわして、
配列のデータの長さをチェックするようなプログラムは
普通にあると思います。結果として何ms遅くなって
それが使えない…という具体的な書き方にして下さい。
> やっぱり、配列を回して、セルに格納するしか方法がないのでしょうか?
> 処理速度がかなり、おそくなりますよね。
常識かも知れませんが、配列のセットの仕方にも寄ります。
実際に、自分が計測した場合には、
一つのインデックスに911文字を入れた配列(インデックスは1000)を用意
一つのインデックスに1文字を入れた配列(インデックスは911000)を用意
複数のセルに分けて配列(911文字ならば911の配列)にすることで
処理速度は結構改善しました。
実際に試すことが重要です。
ツイート | ![]() |