- ベストアンサー
(VBAにて)シート間のコピーの文字数限界ついて
- VBAによるExcelシート間のセル内容のコピーにおいて文字数の制限があるか、問題点と解決策を教えてください。
- 質問者はExcelで障害管理表を作成しているが、sheet1からsheet3へセル内容をコピーする際に、文字数制限による問題が発生している。
- sheet1の対応内容のデータがsheet3へ正しく反映されず、コピー処理がエラーで停止する。エラーを回避するためにはどうすればいいか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >On Error Resume Next > sh3.Cells(K, "P") = sh1.Cells(i, "P") >On Error GoTo 0 つまり、ここの部分ですね。 実行時エラーですから、それは、こちらでは、はっきりしたことがいえませんから、 まず、いくつかの検査が必要です。 最初、そのコードから言えるのは、 ・セルの文字列の制限は、32,767文字(全角・半角は区別がない) ・セルの中に、制御コード等が入ったりすると、影響を受ける可能性がある この2点を思いつきます。 また、プロパティを入れたほうが無難だということです。 sh3.Cells(K, "P").Value = sh1.Cells(i, "P").Value または、 sh3.Cells(K, "P").Text = sh1.Cells(i, "P").Text そして、 診断用として、このようなテストをしてみたらどうでしょうか? ローカルウィンドウも出しておいてください。 エラーが出たときに、その値を取ってみるわけです。 On Error Resume Next sh3.Cells(K, "P") = sh1.Cells(i, "P") If Err.Number > 0 Then Stop 'ここからステップモード(VBE で、F8) a =sh3.Cells(K, "P") b= sh1.Cells(i, "P") Debug.Print a, b End If On Error GoTo 0 それで、もし、必要なかったら、継続しないで、中途で、マクロを終わらせてしまってもよいです。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >マクロ文を実行すると、下記のエラーが出て処理がSTOPしてしまいます。 > 「実行時エラー'1004': >アプリケーション定義またはオブジェクト定義のエラーです。」 そのエラーを出した部分と、その周辺を公開してください。 そうしないと、話が前に進まないです。 >・シート間でセル内容をコピーする時の文字数の限界ってあるのでしょうか? それを、今、ここで話を出しても始まらないと思います。一般的にははるかな大きな量です。
補足
返信ありがとうございます。 ちょっと説明の数字が違っている箇所があるかと思いますが、 質問内容は同じですので宜しくお願いします。 (長いので、下の方は省いています。足りない場合は 再度転記します。) Private Sub CommandButton1_Click() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh1 = Worksheets("インシデント管理台帳(F07)") Set sh2 = Worksheets("まくろ") Set sh3 = Worksheets("印刷用シート") Sheets(Sheets.Count).Activate sh3.Rows("3:60").Select Selection.RowHeight = 409 sh3.Range( _ "A3:A4,B3:B4,C3:C4,D3:D4,E3:E4,F3:F4,G3:G4,H3:H4,I3:I4,J3:J4,K3:K4,L3:L4,M3:M4,N3:N4,O3:O4,P3:P4,Q3:Q4,R3:R4,S3:S4,T3:T4,U3:U4,V3:V4,W3:W4,X3:X4,Y3:Y4" _ ).Select With Selection .HorizontalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge sh3.Range("A3:Y4").Select Selection.Copy sh3.Range("A5:Y30").Select ActiveSheet.Paste sh3.Range("I27:I28").Select Application.CutCopyMode = False sh3.Rows("3:30").Select Selection.RowHeight = 409 d = sh1.Range("F65536").End(xlUp).Row K = 3 f = sh2.Range("A2") t1 = sh2.Range("B2") ' t = DateSerial(Year(t1), Month(t1) + 1, 1) - 1 For i = 4 To d If sh1.Cells(i, "F") >= f And sh1.Cells(i, "F") <= t Then sh3.Cells(K, "A") = sh1.Cells(i, "A") sh3.Cells(K, "B") = sh1.Cells(i, "B") sh3.Cells(K, "C") = sh1.Cells(i, "C") sh3.Cells(K, "D") = sh1.Cells(i, "D") sh3.Cells(K, "E") = sh1.Cells(i, "E") sh3.Cells(K, "F") = sh1.Cells(i, "F") sh3.Cells(K, "G") = sh1.Cells(i, "G") sh3.Cells(K, "H") = sh1.Cells(i, "H") sh3.Cells(K, "I") = sh1.Cells(i, "I") sh3.Cells(K, "J") = sh1.Cells(i, "J") sh3.Cells(K, "K") = sh1.Cells(i, "K") sh3.Cells(K, "L") = sh1.Cells(i, "L") sh3.Cells(K, "M") = sh1.Cells(i, "M") sh3.Cells(K, "N") = sh1.Cells(i, "N") sh3.Cells(K, "O") = sh1.Cells(i, "O") On Error Resume Next sh3.Cells(K, "P") = sh1.Cells(i, "P") On Error GoTo 0 sh3.Cells(K, "Q") = sh1.Cells(i, "Q") sh3.Cells(K, "R") = sh1.Cells(i, "R") sh3.Cells(K, "S") = sh1.Cells(i, "S") sh3.Cells(K, "T") = sh1.Cells(i, "T") sh3.Cells(K, "U") = sh1.Cells(i, "U") sh3.Cells(K, "V") = sh1.Cells(i, "V") sh3.Cells(K, "W") = sh1.Cells(i, "W") sh3.Cells(K, "X") = sh1.Cells(i, "X") sh3.Cells(K, "Y") = sh1.Cells(i, "Y") K = K + 2 End If Next i Sheets(Sheets.Count).Activate sh1.Range("A3:Y3").Copy _ Destination:=sh3.Range("A2") sh3.Range("B:B,E:E,I:I,L:M,R:T,V:W").Delete
お礼
回答ありがとうございました。 sh3.Cells(K, "P").Value = sh1.Cells(i, "P").Value に変えた所、成功しました。 原因は文字数では無く、制御コードぽいです。 助かりました、ありがとうございます。