- ベストアンサー
VBA文字反映に関する255文字制限の解消方法とは?
- VBAで文字を反映させると255文字の制限に引っかかってしまいます。文字を700文字程度まで反映させる方法を教えてください。
- 現在、Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1 というコードを使用しています。この方法では変数を使って繰り返し表示させることができないため、文字を区切って表示させる必要があります。
- VBAで文字を反映させる際に255文字の制限に引っかかる問題を解決する方法を教えてください。文字を区切ることなく700文字程度まで反映させたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私の問題認識に誤りがあるのかもしれませんので、下記を実行しても 255 文字になるのか確認して下さい。 下記のテストコードは Sheet1 の A1 セルに 700 文字の文字をセットし、 Copy メソッド、FormulaR1C1 プロパティーのそれぞれで、Sheet2 の A 列 へ転記しています。 きちんと転記が成功したかを確認するために、Sheet2 の B 列には LEN 関数で文字数を数えています。 なお、当方( WindowsXP + Excel2002 )では、どちらも255文字といった 現象はありません。 Sub TestMacro() Dim strBuf As String With Worksheets("Sheet1").Cells(1, "A") ' セルの書式を「標準」にする .NumberFormat = "General" ' 700文字のテストデータを A1 セルにセット .Value = String$(700, "A") ' コピーテスト .Copy ' 式の転記テスト strBuf = .FormulaR1C1 End With With Worksheets("sheet2") ' ワークシート Sheet2 の A1 セルにペーストテスト .Cells(1, "A").PasteSpecial .Cells(1, "B").Formula = "=LEN(A1)" ' ワークシート Sheet2 の A2 セルに式を転記 .Cells(2, "A").FormulaR1C1 = strBuf .Cells(2, "B").Formula = "=LEN(A2)" End With End Sub あるいは文字列の固定長変数を使ってるとか... Sub Sample() Dim strBuf As String * 255 '255 Byte With Worksheets("Sheet1").Cells(1, "A") .Value = String$(700, "A") strBuf = .Value End With Worksheets("sheet2").Cells(1, "A").Value = strBuf End Sub この Sample プロシージャの場合、700文字のデータを変数 strBuf に 代入しようとしてますが、実際には先頭の 255 バイトしか代入されません。
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんばんは。KenKen_SP です。 ちょっと意味不明な点がありますが.... > VBAで文字を反映させると255文字制限に引っかかってしまいます。 Excel2003 までの仕様では、ひとつのセルに 32,767文字まで入力可能です。 したがって、255文字制限とは、これのことでしょうか? [XL2002] 表示形式が文字列のとき 256 文字以上の文字を表示できない http://support.microsoft.com/kb/410234/ja 上記サイトから引用: セルに入力されている文字の文字数が 1 ~ 255、または 1025 以上の 場合は、セルに文字列が表示されます。 文字数が 256 ~ 1024 の場合はセルに "#######" と表示されます。 再現方法としては、A1 セルを「文字列」にして次の数式を入力します。 = REPT("a",256) --> 表示が ### になる = REPT("a",1025) --> 表示される 表示が ### となるだけで、データとしてはちゃんと残っていますので、 致命的なバグではありませんが、以前から Excel のバグとして MS では 認識されていたにも係わらず、どうやら既存バージョンの Excel では修正 される様子はありません。 つまり、どうしようもありません。(;´・ω・`)σ 対策としては、 方法1. 表示形式を「文字列以外」にする -->例えば、表示形式を「標準」とか。 方法2. どうしても表示形式を「文字列」にするなら 1025 文字以上 あれば良いので、文字列の後ろにダミーの空SPでも付ける -->例えば、A1 に 256~1024 文字のデータがあるなら =A1&REPT(" ",1025-LEN(A1)) で無理矢理 B1 に表示するとか、VBA なら転記時に 1025 文字になるようにするとか。 ですね。では。
補足
ご回答ありがとうございます。 セル内の文字表示は正常ですが、255文字以上の部分になると反映されず文章の途中で切れてしまっている状態です。 いろいろやってみて気づいたんですが、コピー前は正常なのにコピー後のsheetでは255文字で切れてしまうことがわかりました。 コピーの仕方に問題があるのでしょうか? Sheets("sheet1").Select Sheets("sheet1").Copy と普通にコピーはしてると思います。
お礼
度々のご回答ありがとうございます。結果、解決できてません・・・ どうやらひっかかってるのが、コピー段階らしいのです。 参照URL http://www.relief.jp/itnote/archives/000240.php そこで、シートをコピーした後にもう一度、セル内容をコピペしないといけないらしいのです。 私がやっているのは下記のようなことです。 Sub イメージ() Dim i As Integer For i = 1 To 2 Worksheets("sheet1").Cells(1, 1) = Worksheets("sheet2").Cells([i], 1) 'sheet1のセルA1に文字を反映 Sheets("sheet1").Select 'sheet1のみを新規ブックにコピー Sheets("sheet1").Copy ChDir "C:\Documents and Settings\個別" ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\個別\" & ActiveSheet.Cells(1, 1) & ActiveSheet.Cells(1, 2) & ".xls" 'セルA1とA2をファイル名にして新規保存 ActiveWorkbook.Close 'ブックを閉じる Next i End Sub 新規保存前の段階でセルの中身をコピペするらしく、具体的には、もう一度sheet2のセルの内容をsheet1のセルA1にコピーしなければいけないらしいです。 実際にどのようなコードを入れればよいのでしょうか? よろしければご回答お願いいたします。
補足
自己解決できました。 シートのコピーじゃなく、新規シートにセル全体をコピーして解決です。 ありがとうございました。