• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで文字を反映させると255文字の制限になってしまいます。)

VBA文字反映に関する255文字制限の解消方法とは?

このQ&Aのポイント
  • VBAで文字を反映させると255文字の制限に引っかかってしまいます。文字を700文字程度まで反映させる方法を教えてください。
  • 現在、Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1 というコードを使用しています。この方法では変数を使って繰り返し表示させることができないため、文字を区切って表示させる必要があります。
  • VBAで文字を反映させる際に255文字の制限に引っかかる問題を解決する方法を教えてください。文字を区切ることなく700文字程度まで反映させたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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 バイトしか代入されません。

himejimad
質問者

お礼

度々のご回答ありがとうございます。結果、解決できてません・・・ どうやらひっかかってるのが、コピー段階らしいのです。 参照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にコピーしなければいけないらしいです。 実際にどのようなコードを入れればよいのでしょうか? よろしければご回答お願いいたします。

himejimad
質問者

補足

自己解決できました。 シートのコピーじゃなく、新規シートにセル全体をコピーして解決です。 ありがとうございました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんばんは。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 文字になるようにするとか。 ですね。では。

himejimad
質問者

補足

ご回答ありがとうございます。 セル内の文字表示は正常ですが、255文字以上の部分になると反映されず文章の途中で切れてしまっている状態です。 いろいろやってみて気づいたんですが、コピー前は正常なのにコピー後のsheetでは255文字で切れてしまうことがわかりました。 コピーの仕方に問題があるのでしょうか? Sheets("sheet1").Select Sheets("sheet1").Copy と普通にコピーはしてると思います。

関連するQ&A