- 電波くん
- 会議室デビュー日: 2003/10/30
- 投稿数: 11
- お住まい・勤務地: 東京都千代田区
|
投稿日時: 2006-02-01 18:59
Excel VBAにて、ご質問があります。
配列中のデータを一度にセル(セル範囲)へ貼り付ける(設定する)処理を行っています。
処理のイメージとしては、Excelシートにコマンドボタンを貼り付けて、
クリックイベントで以下のような処理を行っています。
コード: |
| Dim obj(1 To 2, 1 To 1) As Variant
Dim str As String
Dim i As Long
str = ""
'91を92に変更すると★の箇所でエラー発生
For i = 1& To 91&
str = str & "1234567890"
Next i
obj(1, 1) = "'hoge"
obj(2, 1) = str
Range("a1:a2") = obj '★
| サンプルコード中にもありますように、
配列中の文字列がある一定の文字数(バイト数?)を超えると以下のエラーが発生してしまいます。
引用: |
| 実行時エラー '1004'
アプリケーション定義またはオブジェクト定義のエラーです。
| 調査・検証内容としては以下の事を行いました。- コード中にもあるように、91→92に変更するとエラー
- 数値以外の文字列を指定しても("abcdefghij"など)同じくエラー
- obj(1 to 1,1 to 1)のように定義して、セルに代入すると大丈夫
どなたか、回避方法をご存知の方、
いらっしゃいましたら ご教授よろしくお願い致します。
環境:Windows XP(SP2)+Excel 2003(SP2)
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-01 19:28
引用: |
|
電波くんさんの書き込み (2006-02-01 18:59) より:
配列中の文字列がある一定の文字数(バイト数?)を超えると以下のエラーが発生してしまいます。
|
セルにはバイト数の制限があったと思います。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- 電波くん
- 会議室デビュー日: 2003/10/30
- 投稿数: 11
- お住まい・勤務地: 東京都千代田区
|
投稿日時: 2006-02-01 21:30
はじめまして。早速の返答ありがとうございます。
ものすごく困っていたので、助かります。引用: |
| じゃんぬねっとさんの書き込み (2006-02-01 19:28) より:
セルにはバイト数の制限があったと思います。
| なるほど。セルにはバイト数の制限があるのですね。
しかし、どうも腑に落ちないことがあります。
まず、エラーが発生してしまう同じ文字列を使って、- 手動でセルに文字列を入力すると、エラーとならない
- サンプルコードのエラーが発生するところで、とすると、同じバイト数にもかかわらずエラーとならない
- 先ほども記載したとおり、obj(1 to 1,1 to 1)のように定義して、セルに代入するとエラーにならない
配列ということが問題なのでしょうか。
ご存知でしたら、よろしくお願い致します。
もし、配列ということが問題で、変数からの代入が可能なのであれば、ある一定のバイト数を超える文字列については、何かコレクションのようなものにセルの参照と値(文字列)を退避しておき、
配列の貼り付けが終わったら、コレクションをFETCHして文字列を一つずつ設定しようと思っています。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-01 21:52
引用: |
|
電波くんさんの書き込み (2006-02-01 21:30) より:
配列ということが問題なのでしょうか。
|
Range というところが問題なのです。
Cells だと成功するでしょう?
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- 電波くん
- 会議室デビュー日: 2003/10/30
- 投稿数: 11
- お住まい・勤務地: 東京都千代田区
|
投稿日時: 2006-02-01 22:24
返答ありがとうございます。
何度もすいません。引用: |
| じゃんぬねっとさんの書き込み (2006-02-01 21:52) より:
Range というところが問題なのです。
Cells だと成功するでしょう?
| この部分を、とするということなのでしょうか。
実行すると、"hoge"はセルA1に設定されるのですが、A2に文字列が表示されません。
そもそも、じゃんぬねっとさんがおっしゃる「Cells だと成功するでしょう」の私の解釈が違うのでしょうか。
本当に何度もすいませんが、よろしくお願い致します。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-02 00:02
引用: |
|
電波くんさんの書き込み (2006-02-01 22:24) より:
「Cells だと成功するでしょう」の私の解釈が違うのでしょうか。
|
これでお試しください。
コード: |
|
Cells(1, 1) = "'hoge"
Cells(2, 1) = str
|
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- 電波くん
- 会議室デビュー日: 2003/10/30
- 投稿数: 11
- お住まい・勤務地: 東京都千代田区
|
投稿日時: 2006-02-02 00:44
返答ありがとうございます。
引用: |
|
じゃんぬねっとさんの書き込み (2006-02-02 00:02) より:
引用: |
|
電波くんさんの書き込み (2006-02-01 22:24) より:
「Cells だと成功するでしょう」の私の解釈が違うのでしょうか。
|
これでお試しください。
コード: |
| Cells(1, 1) = "'hoge"
Cells(2, 1) = str
|
| こちらのコードで、確かに文字列(str)をセルに設定することは出来ました。
しかし、これであれば、私が試したつまり、でも出来ていて、
私の当初の目的である 配列を一度にセルへ貼り付けるということではありません。
じゃんぬねっとさんがおっしゃる「Cells だと成功するでしょう」ということにどうつながるのかがわかりませんでした。
結局、今回のような文字列サイズの大きなデータは、配列を使って一度にセルへ貼り付けられない(設定することが出来ない)ということなのでしょうか。
本当に何度もすいません
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-02-02 00:51
引用: |
|
電波くんさんの書き込み (2006-02-02 00:44) より:
じゃんぬねっとさんがおっしゃる「Cells だと成功するでしょう」ということにどうつながるのかがわかりませんでした。
|
単一セル相手に Range を使う必要はないという意味でした。
"配列を使うことが" ではなく、配列 Range を組み合わせることが、でしたね。
引用: |
|
結局、今回のような文字列サイズの大きなデータは、
配列を使って一度にセルへ貼り付けられない(設定することが出来ない)ということなのでしょうか。
|
そうです。
以前、COM から Range を扱った際に同じことで悩みました。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|