新しいシートが表示されない!シートの表示方法とコピーの方法について教えてください

このQ&Aのポイント
  • Excel VBAで新しいシートを作成しても、表示されない場合があります。表示させる方法として、他のシートを非表示にしてから新しいシートを表示する方法があります。また、コピーした際にセルの中身はコピーできるが、行や列の幅がきれいにコピーされない場合は、マクロでコピーする際に書式も一緒にコピーする必要があります。
  • Excel VBAで新しいシートを作成しても、表示されない場合があります。表示させる方法として、他のシートを非表示にしてから新しいシートを表示する方法があります。また、コピーした際にセルの中身はコピーできるが、行や列の幅がきれいにコピーされない場合は、マクロでコピーする際に書式も一緒にコピーする必要があります。
  • Excel VBAで新しいシートを作成しても、表示されない場合があります。表示させる方法として、他のシートを非表示にしてから新しいシートを表示する方法があります。また、コピーした際にセルの中身はコピーできるが、行や列の幅がきれいにコピーされない場合は、マクロでコピーする際に書式も一緒にコピーする必要があります。
回答を見る
  • ベストアンサー

新しいシートが表示されません。

Sub 新清算書シート作成() ' ' 新清算書シート作成 Macro ' 新しいシートに交通費清算書を作成する ' ' Worksheets("新清算書").Range("b1:f22").Copy Set NewSheet = Sheets.Add(Type:=xlWorksheet) ActiveSheet.Paste Destination:=NewSheet.Range("b1:f22") NewSheet.Visible = True NewSheet.Name = Sheets("メニュー").Range("A3").Value & Sheets("メニュー").Range("B3").Value Worksheets("メニュー").Range("A3").Copy NewSheet.Range("D4") Worksheets("メニュー").Range("B3").Copy NewSheet.Range("F4") ActiveWindow.SelectedSheets.Visible = False End Sub サンプルコードを勉強し自分なりに変えて作っています。 このコードでNewSheet.Visible = True があるにも関わらず、シートが表示されなくて困っています。しかし書式からシート→再表示にいけば表示は可能です。NewSheet.Visible = True 以外にも方法はありますか?  また新清算書をマクロで実行してコピーしても完璧にはコピーできず、セルの中身はコピーできるのですが、セルの行や列の幅まできれいにコピーできません。完璧にコピーするにはどうすればいいのでしょうか?

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

NewSheet.Visible = True は通常不要です。 表示されないのは ActiveWindow.SelectedSheets.Visible = False で隠している為です。 この2行を消せば希望の内容になると思います。 列幅などは、シートそのものをコピーするか、下記のようにセル全部をコピーしちゃうとか、、、 Sub test() Dim NewSheet As Worksheet  On Error Resume Next  Set NewSheet = Worksheets.Add(Type:=xlWorksheet)  Worksheets("新清算書").Cells.Copy Destination:=NewSheet.Cells  With Worksheets("メニュー")    NewSheet.Name = .Range("A3").Value & .Range("B3").Value    NewSheet.Range("D4").Value = .Range("A3").Value    NewSheet.Range("F4").Value = .Range("B3").Value  End With End Sub

syoi198985
質問者

お礼

2点についての質問の回答ありがとうございました。 希望通りにできました。ありがとうございました。

関連するQ&A

  • エクセルで、シートを非表示のままマクロを実行するには?

    エクセル初心者です。 Sheet1で、マクロの実行ボタンがあり、Sheet2で、データを編集して、 Sheet1に結果の一覧を表示させるマクロなのですが、 Sheet2は非表示のままマクロを実行したいのですが、うまくいかず、 Sheet2を表示して、実行するとうまくいくため、 一時的にシートを表示させるようにしてみたのですが、 Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown で、アプリケーション定義・オブジェクト定義エラーになります。 どなたかご指南下さい。 Private Sub EDITSLINF() Dim rowCnt As Long Application.ScreenUpdating = False Worksheets("製造記録一覧 (edit1)").Visible = True  Sheets("Sheet2").Range("AB2:AK300").ClearContents '追加レコード抽出&コピー&ペースト Sheets("Sheet2").Range("Q1:Z300").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "AP1:AP2"), CopyToRange:=Sheets("Sheet2").Range("AB1:AK1"), Unique:=False '既存レコードコピー&ペースト rowCnt = Sheets("Sheet2").Range("O1") Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Interior.ColorIndex = xlNone Sheets("Sheet2").Range(Cells(2, 2), Cells(rowCnt, 11)).Copy Sheets("Sheet2").Range("AB2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Worksheets("Sheet2").Visible = False 'メインシートへコピー   Application.CutCopyMode = False Sheets("Sheet2").Range("AB2:AJ300").Copy Sheets("Sheet1").Range("K4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • シートにあるキーワードを別のシートで検索し、該当する行(複数行)を新ブックに貼り付けたい

    今週から勉強を始めたくらいのマクロ初心者なので言っている事が分かりにくかったらすみません。 エクセルVBAでマクロを組んでいるのですが、 Sheet1にあるキーワード(B3~)をSheet2の指定の列で検索し、 そのキーワードが含まれている行を新しいブックにコピーするものを作成したいです。 どうやっても検索とシートのコピーのところがうまくいかず、Sheet2の行数が2万ぐらいあるのでどの方法で検索をしたらいいのか困っています。 とりあえずブック内にシートを1つ作って、そこにヒットした行を貼り付け新しいブックにコピーすればいいのかと思いやっているのですが、動きません… 以下に現時点でのソースを記載するのでどこがまずいのか助言宜しくお願いします。 Sub kensaku() Dim key As String Dim target As String Dim x As Integer Dim y As Long Dim z As Long x = 3 y = 10 z = 1 Set sh = Worksheets.Add sh.Name = "kekka" key = Worksheets("Sheet1").Range("B" & x).Value Do Until Worksheets("Sheet1").Range("B" & x) = "" target = Worksheets("Sheet2").Range("F" & y).Value Do Until Worksheets("Sheet2").Range("F" & y) = "" If target = key Then Worksheets("Sheet2").Rows(y).Select Selection.Copy Sheets("kekka").Rows(z).Activate Activesheet.Paste z = z + 1 End If y = y + 1 Loop x = x + 1 Loop Worksheets("kekka").Copy Application.DisplayAlerts = False Worksheets("kekka").Delete Application.DisplayAlerts = True End Sub

  • Excel VBA 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • EXCEL2003 VBAを表示ロック

    Sheets("DATA")にあるデータを、Sheets("Branch").Range("B2:B20")にあるコード(数字)で順に抽出します。 それをSheets("Form")を複製したシートに貼ります。 複製シートに名前をつけ、保存します。 ここまでは問題なく、以下のVBAでできました。(だいぶ省略しましたが) Sub Make_BrCopy() Dim myCl As Range With Sheets("DATA") For Each myCl In Sheets("Branch").Range("B2:B10") Sheets("Form").Copy Before:=Sheets(1) Sheets(1).Name = myCl.Value .Range("A1:G1").AutoFilter Field:=2, Criteria1:=myCl.Value .UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets(CStr(myCl.Value)).Range("A1") Sheets(CStr(myCl.Value)).Copy ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & CStr(myCl.Value) & ".xls" ActiveWindow.Close Application.DisplayAlerts = False Sheets(CStr(myCl.Value)).Delete Application.DisplayAlerts = True .ShowAllData Next myCl End With End Sub ところが、少し困ったことがあります。 Sheets("Form")には、ワークシートモジュール、Private Sub Worksheet_Change(ByVal Target As Range) があるのです。 これを複製したワークシートにそのまま必要なのでそうしてあるのですが、できることなるら、VBAを表示ロックさせたいのです。 元のファイルではVBAProjectのロックでそうしているのですが、ワークシートをコピーして作成したあらたなBOOKはVBAを表示にロックにはなっていません。 丸見えです。 どうすればよいでしょうか? Excel2003です。 また、上記のVBAコードになにかご指摘のことなどありましたらそれもあわせて教えてください。

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub

  • 複数シートをループさせてマクロを簡素化したい

    win7 Excel2007 でマクロ作成中の初心者です。 シート数の変動する複数シートの特定範囲を一枚のシートに右列方向に、値を貼り付けたいです。 自動記録でコード作成しましたが、もっと簡素化して軽くしたいです。 シートに対するループ等の作成ができません。どうかご指導お願いします。 Sub 勤怠最終データ作成() Worksheets(1).Select '1番左のシートを選択 ActiveSheet.Unprotect Range("B29:BM60").Select '複写範囲はすべて同じ Selection.Copy Sheets("総括").Select '値の貼り付けシートはすべて同じ Range("A2").Select '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(2).Select '2枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(3).Select '3枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(4).Select '4枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues 以下省略 End Sub

  • 異なるワークシートに値を貼り付けるマクロ

    数式の入ったワークシートから値のみをコピー&ペーストしたいのですが、うまくいきません。 どこにxlPasteValuesを入れたらいいのでしょうか?よろしくお願いします。 Sub copypaste() Dim bk As Workbook Set bk = Workbooks("‘貼り付け先.xlsm") Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B2:F6").Copy bk.Worksheets("Sheet1").Range("B2:F6")

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • エクセルマクロ シート名称変更について教えて下さい。

    エクセルは通常Sheet1となってますが、それを数字でのみ表記しています。 シートのB1セルにシートと同じ番号が入ている状態です。 元になるシート(名前:moto)をコピーしていき、 シート番号もB1セルの番号も増やしたいのです。 今現在は Worksheets("moto").Visible = True No = Worksheets("moto").Cells(1, 2) Worksheets("moto").Copy Before:=Sheet1 Worksheets("moto (2)").Name = "new" Worksheets("new").Cells(1, 2) = No + 1 bangou = InputBox("シート番号を入力してください。") Sheets("new").Name = bangou とういように、InputBoxを利用してシートの数字を入力しています。 InputBoxを利用しない方法で自動でシート番号が増えていく方法はありますでしょうか? マクロ初心者ですのでいろいろさわっているのですが うまくできません。 どうか教えて下さい。

専門家に質問してみよう