1つのセルに、911文字以上があると。。。


よさく  2006-05-12 10:02:23  No: 131368

こんにちわ。

不可解な現象があって、困っているのですが、
どなたかわかる方いましたら教えてください。

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のバグか?
困ったなぁ。。。

どなたか何か知っている方がいましたら、教えてください。

よろしくお願いします。


Blue  2006-05-12 10:30:23  No: 131369

これかな。
http://support.microsoft.com/?scid=kb%3Bja%3B818808&x=10&y=15


よさく  2006-05-12 10:39:20  No: 131370

Blueさん。情報、ありがとうございます。

うーん。困った。
それにしても、回避策が↓っていうのは、いただけないですね。

>この問題を回避するには、配列内に 912 文字以上の文字列が
>格納されるセルが含まれないように、コードを編集します。 

そんなことわかってるちゅーのに。。。

どう対処するのが一番よいのでしょうか?
やっぱり、配列を回して、セルに格納するしか方法がないのでしょうか?

処理速度がかなり、おそくなりますよね。

ご助言ください。m(_ _;)m
よろしくお願いします。


LESIA  2006-05-12 17:42:31  No: 131371

すべてのセルに同じ値をいれるのなら
Range("A1:C3").Value = sampleString
で、どうでしょうか?


特攻隊長まるるう  2006-05-12 18:37:43  No: 131372

>処理速度がかなり、おそくなりますよね。
そこは実際に計測してみましょう。ループをまわして、
配列のデータの長さをチェックするようなプログラムは
普通にあると思います。結果として何ms遅くなって
それが使えない…という具体的な書き方にして下さい。


自分の環境では  2006-05-12 23:38:25  No: 131373

>  やっぱり、配列を回して、セルに格納するしか方法がないのでしょうか?
>  処理速度がかなり、おそくなりますよね。

常識かも知れませんが、配列のセットの仕方にも寄ります。
実際に、自分が計測した場合には、

一つのインデックスに911文字を入れた配列(インデックスは1000)を用意
一つのインデックスに1文字を入れた配列(インデックスは911000)を用意

複数のセルに分けて配列(911文字ならば911の配列)にすることで
処理速度は結構改善しました。

実際に試すことが重要です。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加