EXCEL VBA シートのコピー後処理

このQ&Aのポイント
  • EXCEL2013使用にてフォーム内ボタンより受注一覧表シートをコピーし、一番左に配置して処理シートに名前を変更します。その後、J列を基準に昇順に並び変えますが、コードの実行中に中断されます。
  • 修正箇所は「ActiveSheet.Name = '処理シート'」の部分です。この行にブレークポイントを設定し、F8で進めて処理を実行してください。
  • ユーザーフォームは「UserForm1.Show 0」で開いています。修正箇所は、コピー後のシートの名前変更と昇順並び替えの部分です。
回答を見る
  • ベストアンサー

EXCEL VBA シートのコピー後処理?

EXCEL2013使用にてフォーム内ボタンより 下記、受注一覧表シートをコピー→一番左に配置して 処理シートに名前を変更して J列基準の昇順に並び変えようとしていますが ActiveSheet.Name = "処理シート"で コードの実行が中断されましたメッセージが出ます。 ActiveSheet.Name = "処理シート"にブレークポイントを置いて F8で進めていきますと処理実行します。 ユーザーフォームは UserForm1.Show 0で開いております。 どの箇所の修正を行えばいいのか ご教示時お願いいたします。 Private Sub CommandButton1_Click() Worksheets("受注一覧表").Copy Before:=Worksheets(1) ActiveSheet.Name = "処理シート" Worksheets("処理シート").Select Rows("8:2328").Select Range("B8").Activate ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Clear ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Add Key:=Range("J9:J2328") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("処理シート").Sort .SetRange Range("B8:L2328") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B8").Select End Sub

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

お早うございます。 色々勉強になりました。 >ユーザーフォームはUserForm1.Show 0で開いております。 ★開く必要はありません >Private Sub CommandButton1_Click() ★マクロの記録で作成するとモジュール名はSUBから始まります ★「CommandButton1」はActivXコントロールのコマンドボタンですね  フォームコントロールのボタンは「ボタン1」です -------------------------------------------------- コーディングの順序は正しいと思いますが  何故かCommandButtonからでは  Range("B8").Selectと Rows("8:2328").Selectでエラーになりますね  ★分類は1行目は見出し行、左列からKeyの順が下がります。  1~6行を削除  J列を切り取ってA列に切り取たセルを挿入  並び替え  A列を切取ってK列に切り取ったセルを挿入  受注一覧表の1~6行をコピー、処理シートの1行目に挿入 添付画像のようにコマンドボタンを受注一覧表に配置しましたが印刷非対象です。 -------------------- Sub 報告書() Application.DisplayAlerts = False Sheets("受注一覧表").Copy After:=Sheets(2) Sheets("処理シート").Delete Sheets("受注一覧表 (2)").Select Sheets("受注一覧表 (2)").Name = "処理シート" Worksheets("処理シート").Select 並替 Range("B8").Select End Sub '-------------- Sub 並替() Rows("1:6").Select Selection.Delete Shift:=xlUp Columns("J:J").Select Selection.Cut Range("A1").Select Selection.Insert Shift:=xlToRight Columns("A:M").Select ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Clear ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Add Key:=Range("A1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("処理シート").Sort .SetRange Range("A1:M1231") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With '-------------「処理シート」の「配置を受注一覧表」に合わる。 Columns("A:A").Select Selection.Cut Range("K1").Select Selection.Insert Shift:=xlToRight Sheets("受注一覧表").Select Rows("1:6").Select Selection.Copy Sheets("処理シート").Select Range("A1").Select Selection.Insert Shift:=xlDown End Sub

77TAKETAKA
質問者

お礼

回答が遅くなりすみません。 申し訳ありません。結果から言いますと 修正せずに動きました。 内容としては今まで問題なく稼働していた VBAプログラムが組み込まれたファイルでも 色々な所でエラーが出て困っていたところ 他のPCでは稼働しましたため原因は不明ですが 今回使用したPC事態に問題があり今回、回答頂きました 皆様のPCでもエラーが出たということはコードに 少々、脆弱な部分があった?かと思います。 1週間後にエラーが出たPCでも通常通り稼働しましたので ひとまずはそのまま使用しております。 お手数をかけてすみません。上記内容を含め 勉強になりました。ありがとうございました。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>ActiveSheet.Name = "処理シート"で >コードの実行が中断されましたメッセージが出ます。 前回処理した"処理シート"が残っているのでは? Private Sub CommandButton1_Click()   Dim s As Worksheet   On Error Resume Next   Set s = Worksheets("処理シート")   On Error GoTo 0   If Not s Is Nothing Then     MsgBox "既に「処理シート」は存在しています。" & vbCrLf & _       "名前を変えるか、削除してください。", 48     Exit Sub   End If   Worksheets("受注一覧表").Copy Before:=Worksheets(1)   ActiveSheet.Name = "処理シート"   With ActiveSheet.Sort     With .SortFields       .Clear       .Add Key:=Range("J9"), _       SortOn:=xlSortOnValues, _       Order:=xlAscending, _       DataOption:=xlSortNormal     End With     'B8セル~L列の最終行まで検出     .SetRange Range("B8:L" & Cells(Rows.Count, "L").End(xlUp).Row)     .Header = xlYes     .MatchCase = False     .Orientation = xlTopToBottom     .SortMethod = xlPinYin     .Apply   End With   Range("B8").Select End Sub

77TAKETAKA
質問者

お礼

確認いたしましたが 処理シートは残っていないと思われます。 回答が遅くなりすみません。 申し訳ありません。結果から言いますと 修正せずに動きました。 内容としては今まで問題なく稼働していた VBAプログラムが組み込まれたファイルでも 色々な所でエラーが出て困っていたところ 他のPCでは稼働しましたため原因は不明ですが 今回使用したPC事態に問題があり今回、回答頂きました 皆様のPCでもエラーが出たということはコードに 少々、脆弱な部分があった?かと思います。 1週間後にエラーが出たPCでも通常通り稼働しましたので ひとまずはそのまま使用しております。 お手数をかけてすみませんでした。

関連するQ&A

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • マクロのシートでのコピーができません。

    ビスタ エクセル 2007を使用しています。B2~E12まで簡単な表を作り E列で昇り順に並べ替えしました。そして並べ替えからこの表を印刷するまでマクロで完成しました。 ところが、別のシートにコピーすると印刷はされますが、並べ替えがされずに印刷だけされます。同じ表を30枚作成し、それぞれ同じ操作と印刷のマクロを組みたいのですが・・・・どなたか助けてください。 Sub ボタン5_Click() ' ' ボタン5_Click Macro ' ' Columns("E:E").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("B2:E12") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub

  • 【VBA】全てのシートを並び替え 反映せず

    For Each Ws In Worksheets Ws.Activate 「並び替えの処理」 Next Ws を記述したのですが、 「並び替えの処理」を記憶マクロからコピペした為、 ("Sheet1")しか並び替えの処理がされません。(全シート並び替えの処理がしたい) 下記コードをどの様に修正すれば良いでしょうか。 ご教示願います。 '5行目から最終行迄範囲選択し、W列で昇順に並び替え Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("W5:W40") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A5:X40") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

  • エクセルVBAでデータ並べ替え

    マクロ記録をとると次のようになりました。 これをA列をキーに並べるもっと簡単なコードを教えてください。 Range("A2:G501")となっていますが、これ以上でも対応できるようにしたいです。 どなたか教えていただけないでしょうか。 Sub Macro1() Range("A1").Select ActiveWorkbook.Worksheets("***").Sort.SortFields.Clear ActiveWorkbook.Worksheets("***").Sort.SortFields.Add Key:=Range("A1"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("***").Sort .SetRange Range("A2:G501") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • EXCELでマクロが

    昨日から、期待する動きでなくなりました。 シートに新たに数式を加え、rank関数ではきちんと表示するのですが、マクロを動かすと、 期待した動きでなくなりました。 Sub Sheet2STD昇順並べ替え() ' ' Sheet2STD昇順並べ替え Macro ' ' Range("B6:V24").Select ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("C7:C24") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("B6:V24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select End Sub 図にある下向きの矢印にマクロを登録しています。

  • エクセルのマクロ記録を他のシートでも実行したい

    エクセル2010を使用しています。 シート1でマクロ記録を使用しデータの並び替えをし、 同じブック内にシート1をコピーしてシート2としました。 このシート2でもシート1で行ったデータの並び替えをしたいのですが シート2ではマクロは実行されませんでした。 わからないながらもVBAを見たところ下記のように 記述されおりましたが、どのような修正をすればよいかご教授いただけると助かります。 ちなみに、シート1でマクロを記録し、そのシートを同ブック内に複数コピーして それぞれのシートでマクロを実行させるということを考えています。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A11:Q17").Select ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("B11:B17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="日,月,火,水,木,金,土" _ , DataOption:=xlSortNormal ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A11:A17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1").Sort .SetRange Range("A11:Q17") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • マクロ 並び替え エラーがでる

    マクロの記録で以下のようなマクロを作りましたが、実行するとエラー91「オブジェクト変数またはブロック変数が設定されていません」とでます。どう直したらよいでしょうか? Sub Macro6() Columns("A:L").Select Selection.AutoFilter ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _ ("A1:A497"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B2").Select End Sub

  • エクセルの並べ替えをマクロで

    知識が無くなかなか解決しません。教えて下さい。 エクセル(2000)のマクロの記録で並べ替えを記録すると下記の様になりました。 Range("A1:M57").Select ActiveWorkbook.Worksheets("表2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("C2:C57"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("表2").Sort.SortFields.Add Key:=Range("D2:D57"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("表2").Sort .SetRange Range("A1:M57") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select End Sub 次のように改良する方法を探しています。 (1)Range("A1:M57").Select → 表によって行数が違う為、行数とおりに範囲選択したい。 M65536とすれば良いのかもしれませんが、パソコンの処理能力が低く、なるべく負担が掛からない様にしたいのですが。列数はA列からM列の限定です。 (2)ActiveWorkbook.Worksheets("表2")  → ("表2")限定ではなく他のシート名でも並べ替えが出来る様にするにはどのようにすれば良いのでしょうか。 いろいろ試しましたがうまく出来ません。お知恵をお貸し下さい。よろしくお願い致します。

  • エクセルVBA

    お世話になります。 マクロの記録で、下記のようにC列を基準に表内を並べ替えるように記録されました。 Range("C4").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("AQ5:AQ39" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A4:EJ39") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ご教授いただきたい点が2点あります。 1. end行 (今のところ39行め) が毎回変わっても その位置を認識して、対応するようにしたいのですが、 どのように書き換えるとよいのでしょうか? C4は、タイトル行で、毎回固定です。 やはり、毎回最終行の次の行 (今回のケースでいうと、40行目に)に、 endと手作業で入力する方法しかないでしょうか? それしかない場合は、その記述の仕方をお願いします。 例えば、最大500行もあればいいので、途中の空白セルは、無視して 並べ替えをしてくれる記述などで教えていただけるとありがたいのですが・・・ 2. 必ず、active なシートを選択しておいてから、マクロを実行するとして、 シート名の sheet1 も可変にしたいです。 よろしくお願いします。m(_ _)m

専門家に質問してみよう