シートの複写・名前の変更・移動を同時にしたい

このQ&Aのポイント
  • winXP excel2003でマクロ作成の初心者です。シートを複写して、名前を変更までできましたが、ダイアログをキャンセルしても、newSheetができてしまいます。キャンセルしたらnewSheetができないようにしたいです。
  • シート名を変更したシートを、必ず後ろから5番目の(固定)に、移動したいです。
  • ご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

シートの複写・名前の変更・移動を同時にしたい

winXP excel2003でマクロ作成の初心者です。 シートを複写して、名前を変更までできましたが、ダイアログをキャンセルしても、newSheetができてしまいます。キャンセルしたらnewSheetができないようにしたいです。それとシート名を変更したシートを、必ず後ろから5番目の(固定)に、移動したいです。どうコードを書いたらよろしいでしょうか? Sub シート複写とシート名の変更とシート移動() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("1.○○会社") mySheet.Copy Before:=Worksheets("1.○○会社") ActiveSheet.Name = "newSheet" Application.Dialogs(xlDialogWorkbookName).Show End Sub

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

  • ベストアンサー
noname#187541
noname#187541
回答No.1

こんばんは。 ダイアログでキャンセルをしたときはFalseが返ります。Falseの時にコピーしたシートを削除すればいいと思います。 後ろから5番目にするには、挿入する位置の指定をシート名ではなくインデックスにし、シート数から3を引いた数を指定すればいいと思います。 Sub シート複写とシート名の変更とシート移動() Dim mySheet As Worksheet Dim mystr As String Dim cnt As Integer cnt = Sheets.Count Set mySheet = ActiveWorkbook.Worksheets("1.○○会社") mySheet.Copy Before:=Sheets(cnt) ActiveSheet.Name = "newSheet" mystr = Application.Dialogs(xlDialogWorkbookName).Show If mystr = "False" Then Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End If End Sub こんな感じでしょうか。

aitaine
質問者

お礼

こんなに迅速にご回答いただき感謝します。思ったとおりのことができて助かりました。ありがとうございました。

関連するQ&A

  • シート名の取得について

    お世話になります。 以下の様な記述で、追加したシート名を 取得したいのですが、 元々「sheet1」しかない所に追加しており、 追加されたシートは「sheet2」で、 アクティブにもなっているのですが、 コードネームを取得すると、何度やっても 「sheet1」になってしまいます。 どこがおかしいのか分からなく、 ご教示お願い致します。 Sub MACRO() Dim newsheet As Worksheet Dim mysheet As String Dim myrngf As Range Workbooks.Open Filename:="C:\使用量.xls" Set newsheet = Worksheets.Add mysheet = ActiveSheet.CodeName Set myrngf = Workbooks("使用量.xls").Sheets(mysheet).Range("a:a") ~処理内容~ Range("a:b").Columns.AutoFit End Sub

  • VBAで一番後尾のシート見出しの色を変更したい

    WIN XP エクセル2003 BOOK内の一番後尾のシート見出しの色を変更したいのですが 下記コードでは見出しの色が変わりません。 何処が間違っているのかわかりません。ご教授お願い致します。 Sub シート見出し色変更() Dim N As Integer Dim sh As Worksheet N = ActiveWorkbook.Worksheets.Count Worksheets(N).Activate Set sh = ActiveSheet sh.Tab.ColorIndex = 3 Worksheets(1).Select End Sub

  • VBAでシートコピー後、シート名が重複している時の処理

    今日からVBAを勉強し始めました初心者です。会社である作業をしており、VBAでの作業がうまくいかなくて困っております。 「実績」というシートを11/5に作ったとします。 このシートを、11/9にマクロを実行した時に、   ・11/5のシートをコピーし複製を作る(この時点ではシート名は「実績(2)」)   ・この時、シート名は「11-05」となるように設定済み    (実績シートの「G1」セルから、日付を取得しファイル名とする) としています。 この時、まれに同じ日に間違ってマクロを動かす為、同じシート名となりエラーが出てしまいます。 利用者が不慣れなため、エラーの対処方法を教えることでは対処が難しい状態で、できればマクロで対応しようと思っています。 以下、シート名が重複しない場合のみ利用可能なデータです。 '前回作成した「実績」のコピー&リネーム Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("実績") mySheet.Copy after:=Worksheets("実績")   '実績sheetの後ろにコピー ActiveSheet.Name = Format(Range("G1").Value, "m-dd") ' シート名を変更する 他の質問を検索しましたが、コピーしたファイルをリネームし、 そのリネーム結果が重複している場合の記述方法がよくかわりませんでした。 重複している場合は、できればメッセージボックスで「yesno」の選択で上書きの選択ができればと思っています。 (VBAでは一度削除してから新規に作るようですが、上の重複のからみで、よくわからなくなっています) よろしくお願いします。

  • Excel2000マクロ_全てのシートに対して埋込グラフのタイトルをシート名にする

    何方か、回答をお願いします。 下記のマクロは全てのシートに対して埋込グラフのタイトルをシート名にする物ですが ChartObjectsメソッドは失敗しましたと出るときが有ります。 On Error GoTo が効いてErrHandlerに行くときも有るのでよく分かりません。 有識者の方々のもっと良いコードを教えて下さい。 (1つのシートに対してグラフは0~3個です。) Sub シート名グラフ名() Dim mysheet As Worksheet For Each mysheet In Worksheets On Error GoTo ErrHandler With mysheet.ChartObjects(1).Chart .ChartTitle.Text = mysheet.Name End With With mysheet.ChartObjects(2).Chart .ChartTitle.Text = mysheet.Name End With With mysheet.ChartObjects(3).Chart .ChartTitle.Text = mysheet.Name End With ErrHandler: Next mysheet End Sub

  • エクセル2003にて指定されたシートを複写するには?(2)

    エクセル2003にて指定されたシートを複写するには?(2) 同じ件で投稿してすみません。エクセル本を読んでも、ネットで探しても 丸2日進んでいないので、投稿させて頂きました。 以前、以下のURLで投稿したものです。 http://okwave.jp/qa/q5930740.html 【回答して頂いた内容】 Sub aaa() Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("シート1") Set Ws2 = Worksheets("シート2") Dim Endrow As Long, r As Integer Endrow = Ws1.Cells(Rows.Count, 1).End(xlUp).Row For r = 1 To Endrow     Worksheets.Add After:=Worksheets(Worksheets.Count)    ActiveSheet.Name = Ws1.Cells(r, 1).Value    Cells(5, 1).Value = Ws1.Cells(r, 1).Value    Cells(5, 2).Value = Ws1.Cells(r, 2).Value    Cells(5, 3).Value = Ws1.Cells(r, 3).Value Next r Set Ws1 = Nothing Set Ws2 = Nothing End Sub と、ご回答を頂き、想定していた対応が出来ていますが、 問題が2つほどございます。 (1)ひとつは、シート名及びテキストをA列ではなく、J列から持ってくる必要がある。 (2)もうひとつは、1行目はタイトル行なので、2行目から開始する必要がある。 この2点を解消しようと、色々数字を入れて試したのですが、改善できないので、 どなたか、是非、アドバイス・ご享受を宜しくお願い申し上げます。

  • エクセルVBAについて

    <sheet1>フォーマット(コピーするシート) <sheet2>    A列    B列 ○○支店  15 △△支店  10 ××支店  28 ■■支店  25 ◎◎支店  18 sheet1のフォーマットをsheet2のB列の数コピーして、sheet2のA列の支店別に新しいブックへ保存するという作業のマクロを組みたいのですがどのようにしたらよいでしょうか?お教えください。VBAに関しまして初心者で、勉強しているのですがいまいちわかりません。どうぞよろしくお願いします。 今、一つだけコピーして保存するということはできていますが、上記のように全部を自動的にしたいのですが・・・ Sub グラフをコピーして別ブックへ保存() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("グラフ") mySheet.Copy ActiveWorkbook.SaveAs Filename:="大阪第一" '別名を付けてブックを保存する ActiveWorkbook.Close '別名ブックを閉じる End Sub よろしくお願いします。

  • なぜ、ByVal Sh As Objectは

    NewSheetイベントについて質問なのですが、 なぜ、ByVal Sh As Objectは、Objectなのでしょうか? Sub Workbook_NewSheet(ByVal Sh As Worksheets) や Sub Workbook_NewSheet(ByVal Sh As Worksheet) にしたら、コンパイルエラーになります。 シートの方では、 Private Sub Worksheet_Change(ByVal Target As Range) のようにrange型で宣言しているのに、なぜシートはオブジェクト型で宣言するのでしょうか?

  • 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

  • 選択されているシートを移動したい

    一定ではない複数のシートがあり、 そのうちの右端の1枚は必ず「ファイル集計」というシートになっています。 この、ファイル集計以外のシートを 新しいブックを作って移動させるにはどうしたらいいでしょうか。 あくまでもファイル集計は元のブックに残し それ以外のシートを移動させたいのです。 Sub 入力データを保存して閉じる() Dim ファイルナンバー As String Dim 保存指定フォルダ2 As String Dim mySht As Worksheet With Application .DisplayAlerts = False For Each mySht In Worksheets If mySht.Name <> Sheets("ファイル集計").Name Then mySht.Select False Next .DisplayAlerts = False End With ↑このようなかたちで、選択するところまでは出来たのですが それを新しいブックに移動させるのがうまくいきません。 ChDir "C:\計算\" & 保存指定フォルダ Activesheets.Move ActiveWorkbook.SaveAs Filename:=ファイルナンバー & "D.xls" Application.DisplayAlerts = False   ActiveWorkbook.Close end sub とすると、選択されているシートのうち1枚しか移動できないのです。 教えてください。

  • シート間のコピー時の列幅と行の高さ

    マクロ初心者です。下記はシート間のコピーですが、列幅と行の高さも一緒にコピーするにはどのように書いたらよいでしょうか。マクロは"sheet1"に入っています。よろしくお願いいたします。 Sub macro1() Worksheets("sheet2").Activate Cells.Clear Worksheets("sheet1").Activate Worksheets("sheet1").UsedRange.Copy ActiveSheet.Paste Destination:=Worksheets("sheet2").Range("A1") End Sub

専門家に質問してみよう