プロが教えるわが家の防犯対策術!

VBAで文字を反映させると255文字制限に引っかかってしまいます。
最大で700文字程度反映できるようにしたいのですが、どのように設定すればよろしいでしょうか?
現在、
Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1
とこのように設定しています。
コードを区切ってしまえばきちんと表示させることができるのですが、変数を使って繰り返し表示させようと思っているので区切らないほうが理想です。

すべてのコードは長めです。
教えてください。

A 回答 (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 バイトしか代入されません。

この回答への補足

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

補足日時:2006/10/16 12:59
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/16 12:23

こんばんは。

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
と普通にコピーはしてると思います。

補足日時:2006/10/16 09:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A