(VBAにて)シート間のコピーの文字数限界ついて

このQ&Aのポイント
  • VBAによるExcelシート間のセル内容のコピーにおいて文字数の制限があるか、問題点と解決策を教えてください。
  • 質問者はExcelで障害管理表を作成しているが、sheet1からsheet3へセル内容をコピーする際に、文字数制限による問題が発生している。
  • sheet1の対応内容のデータがsheet3へ正しく反映されず、コピー処理がエラーで停止する。エラーを回避するためにはどうすればいいか。
回答を見る
  • ベストアンサー

(VBAにて)シート間のコピーの文字数限界ついて

質問が抽象的ですみませんが、質問させて頂きますので 宜しくお願いします。 (まだVBAの日が浅い者です。) ・Excelにて障害管理表というものを作成しています。(sheet1に)  ・発生日時や障害内容などが列ごとに管理されている表です。  ・各項目名がA3~Y3で各データがA4~Y60まで入力されています。)  ・今後も障害が発生することにより、行数が増えていきます。 ・sheet2について  ・マクロ用の専用シートにしています。  ・コマンドボタンを作成し、そこにマクロ文を挿入しています。  ・マクロ文の内容は、sheet1の[F列:発生日時]をキーにして、   sheet2の「セルA1→開始年月]「セルB2→終了年月]を入力して   コマンドボタンを押す  ・sheet1よりsheet3に指定した期間内のみデータを表示させる。 というのが大筋の内容です。 大体うまく行きましたが、1つだけ問題点が出ました。  ・[sheet1のP列]には対応内容のデータが入力されています。  ・sheet3のP列にほぼコピーは出来たのですが、2件ほどが   sheet3のP列に反映されず、空白のままとなってしまいます。  ・調べてみると、2件ともかなりの文字数がsheet1のP列に入力されていました。  (実際は) マクロ文を実行すると、下記のエラーが出て処理がSTOPしてしまいます。   「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」        ↓ (P列の長い文字数をsheet1~sheet3へコピーする所です。 ですので、「On Error GoTo 0~On Error Resume Next」コマンドを使用してエラーを吹っ飛ばして処理を続行しています。(2件は反映されませんが。) ・シート間でセル内容をコピーする時の文字数の限界ってあるのでしょうか? ・また、どのようにすれば解消されるでしょうか?    ・因みに、sheet1の例の2件の文字数をかなり削除したらうまく行きました。)    ・sheet1の例の2件の文字数を削らず、sheet3のP列の文字を小さく設定してもセルを最大に広げてもダメでした。) 長くなって申し訳ありませんが宜しくお願い致します。 

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 それで、もし、必要なかったら、継続しないで、中途で、マクロを終わらせてしまってもよいです。

tatuya24_2006
質問者

お礼

回答ありがとうございました。 sh3.Cells(K, "P").Value = sh1.Cells(i, "P").Value に変えた所、成功しました。 原因は文字数では無く、制御コードぽいです。 助かりました、ありがとうございます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >マクロ文を実行すると、下記のエラーが出て処理がSTOPしてしまいます。 >  「実行時エラー'1004': >アプリケーション定義またはオブジェクト定義のエラーです。」 そのエラーを出した部分と、その周辺を公開してください。 そうしないと、話が前に進まないです。 >・シート間でセル内容をコピーする時の文字数の限界ってあるのでしょうか? それを、今、ここで話を出しても始まらないと思います。一般的にははるかな大きな量です。

tatuya24_2006
質問者

補足

返信ありがとうございます。 ちょっと説明の数字が違っている箇所があるかと思いますが、 質問内容は同じですので宜しくお願いします。 (長いので、下の方は省いています。足りない場合は 再度転記します。) 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

関連するQ&A

  • 【Excel VBA】指定されたシートに該当のデータをコピーする

    Excel2003を使用しています。 あるセルに入力されている値と同じ名前のシートに、そのセルと同行のデータをコピーするというマクロを作成したいのですが。。。 例えば、Sheet1のC4セルに「1234」(文字列です)と入力されていたら、「1234」シートに、Sheet1のC4セルと同行のデータを貼り付け、Sheet1のC5セルに「1235」と入力されていたら、「1235」シートに、Sheet1のC5セルと同行のデータを貼り付け…といった感じで、Sheet1のC列(C4セル以下)に入力されている値を元に、それぞれのシートへ順番にデータをコピーしたいのです。 うまく表現できなくて、わかりづらいと思いますが、都度補足させていただきますので、よろしくお願いします。

  • EXCEL VBA:文字列のコピー

    1. intputbox で入力したパスにある全ての txtファイル名を sheet1 C列に表示。 (現在 6ファイルでテスト。予定作業で100ファイル程度) 2. 配列を使って C列のファイル名のファイルを順番に読み込み sheet2 A列に行単位で読み込み。 →今ココ 3. sheet2 A列に表示されたファイルに hostname_abcde という行があり、abcde 部分だけを sheet1 A列にコピー。 ( _ は半角スペースに読み替えてください。hostname_を検索すればいいのですが、その後に 続く abcde がファイルによって文字数が異なりコピーする方法が分かりません) 4. 「3.」のコピー後に sheet2全セルをクリアして 動的配列の next文へ進み、要素2 のテキスト ファイルを sheet2 A列に読み込みまた、 hostname_abcde の abcde を sheet1 A列の次のセルに コピー。要素数分繰り返します。 実際に記述した内容は職場のPCでないと分からないので詳しく書けませんが、上記 3. と 4. の 方法をご教示頂きたくお願い致します。

  • シートをコピー、シート名を変更

    Windows8でExcel2000を使っています。 こういうマクロはどう書けばいいんでしょうか? 同一ファイル内で、シートを複数枚コピー。 複数選択したセルに入力された文字列を、上記でコピーされたシート名に反映したい。 「原本」というシート名のシートがあり、それを元に一年分の表を作りたいのですが 今は手で11枚コピーを作った後1枚ずつ名前変更でやっています。 シート名にしたい文字列は現在なら「2015年01月」~「2015年12月」です。 セルに「2015年01月」~「2015年12月」を入力、選択した後マクロ実行で シート名変更に反映できればありがたいです。

  • VBA(エクセル)でコピー+文字を足す

    エクセルのVBAを使ってシート1の指定セルに打った内容を、マクロを実行するとシート2の指定セルに入力できるようにしました。 プログラムは s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") な感じです。 ここに文字を追加して出力したいのですが、どうすればいいのでしょうか? シート2にコピー出力される内容に、 『成績 第○位』という文字を追加して出力したいのです。つまり○の部分にシート1で打った内容(例11)を、 シート2では(例『成績 第11位』)という内容を表示したいのですが、どのようなプログラムを追加すればよいのでしょうか? 本当に困っています。どなたか助けてください。

  • EXCEL VBA シートの名前を指定してコピー

    EXCEL VBA 初心者です。 とても困っています。 助けてください。 excel2010を使っています。 今,「原本」というシートがあり,それをマクロを使って同じブック内にコピーしたいと思っています。 コピーして新しく作られたシートの名前は「A1」のセルに入力されている値にしたいです。 コピーされた後のシートにはマクロボタンは削除したいと考えています。 また,コピーした後のアクティブシートは「原本」のシートにしたいのですが これを全部いれたコマンドはどのようになるのでしょうか。 似たような質問だったり,回答があるのですが, どのように組み合わせたらいいのかよく分かりません。 どなたかお助けいただけないでしょうか。 よろしくお願いします。

  • Excel95のシート名の最大文字数に関して

    はじめまして、アクアと申します。 現在、Win98 + Excel95を使って簡単なマクロを作っています。 シートをコピーして、別CSVファイル中の文字列をコピーしたシート名に置き換えるという処理をしていますが、シート名が長い場合(例えば、ああああああああああいいいいいいいい)、 システムエラーコード:1005 エラーメッセージ:シート名が正しくありません と言う、エラーがでてしまい、シートを作成することができません。 Excel95には、シート名の最大文字数等の制約があるのでしょうか? ちなみに、上記マクロをExcel2000で実行した場合は何の問題も無くできました。 以上、よろしくご教授下さい。

  • コピーした文字列を現在開いているシート名にセットしたい

    現在開いているシート名を、クリップボードにある(?)文字列に 書き換える(?)マクロをつくりたいです。例えば、 (1) セルA1に、「aaa111」と入力されているとします。 (2) A1セルをダブルクリック(ないし、数式バーから必要な文字列だけを選択)します。 (3) 「111」だけをコピー(Ctrl+C)します。 (4) 「Sheet1」のタブをWクリックします。 (5) 貼り付け(Ctrl+V)により「Sheet1」が「111」に書き換えられます。 (6) Enterキーで確定します。 参考までに今の動作をマクロ記録してみると、次のようになったのですが、 「111」だけをコピーしたつもりなのに、「aaa111」がクリップボードに 格納されてしまっています。 Sub Macro1()   ActiveCell.FormulaR1C1 = "aaa111"   Sheets("Sheet1").Select   Sheets("Sheet1").Name = "111" End Sub 任意のセルをダブルクリックして 必要な文字列(=シート名にしたい文字列)だけをコピーし、 マクロを実行(ショートカットキーを押下)するだけで サッと書き換わるイメージですが、実現可能でしょうか。 よろしくお願い致します。

  • EXCEL VBA コピーしたシートへ値をコピペ

    選択対象シート数は4つで、シート名は、「101」「102」「103」「104」とします。 シート名「表紙」のA列のセルはA10:101 A11:102 A12:103 A13:104となっており、 使用者はとなりのB10~B14セルに「○」「×」を入力規則から選択します。 また、シート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号を入力します。 ここまではできていて、下記のプログラムを追加したいのですが、うまくいきません。 さらに、○を付けたのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 使用者が文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 文字列があれば、○を付けてコピーした対応するシートの中のH3~P3セルへ貼り付けたいのです。 D10、D11、D12、D13セルが空白のときは何も処理は行わないとします。 たとえば、下記のようにB12セルが○で、D12セルに文字列があれば、 D12~L12セルの値を、コピーで作成したシート103の中のH3~P3セルへ貼り付けたいのです。 B11セルも○ですが、D11セルに文字列がないのでシートのコピーだけ行います。 アドバイスいただけると助かります。 VBA初心者で申し訳ございませんが、よろしくお願いいたします。 <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    × 11 102    ○ 12 103    ○       A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   A1-9 13 104    × <プログラム> Sub TestSample() If Application.CountIf(Worksheets("表紙").Range("B10:B17"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製造番号 As String 製造番号 = Range("B6").Value Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy ' コピーしたすべてのシートに製造番号を書き込む For Each 各シート In Worksheets With 各シート .Activate Cells(1, 2) = 製造番号 End With Next Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。, vbInformation" End Sub

  • 別のシートにコピーする方法(マクロ)

    シート1 と シート2 を用意します。 シート1には、 A1:B3 の範囲に文字が入力されています(関数の場合あり) A1:B3の範囲(列の場合あり)をコピーして シート2の現在選択されているセルから貼り付けをワンクリックで する方法(マクロ)はありませんか? 私は、マクロはわかりませんが、マクロでしか出来ないようであれば 覚えます。 教えてください。

  • 【Excel VBA】セルに入力されている値と同じ名前のシートにデータをコピーする

    Excel2003を使用しています。 Sheet1のC2セル以下に入力されている値と同じ名前のシートに、その行のデータをコピーする作業をマクロで処理したいのですが、セルに入力されている値と同じ名前のシートを取得する方法がわかりません。 どのようにコードを書いたらいいのでしょうか? ちなみに、Sheet1のC2セル以下に入力されている値(=シート名)は、文字列(4桁の数字)です。 よろしくお願いします。

専門家に質問してみよう