• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAで改ページから標準へ)

Excel VBAで改ページから標準へ

このQ&Aのポイント
  • Excel VBAを使用して、改ページから標準表示に戻す方法について教えてください。
  • ブックAのマクロで、ブックBを開き、ブックAの情報をブックBに貼り付けます。その後、ブックBの各シートの改ページを手動で修正し、保存ボタンを押すとブックBの全てのシートが標準表示に戻ります。しかし、最初の保存では最初のシートしか標準に戻らず、2度目の保存で全てのシートが標準に戻る現象が起こります。
  • このような現象が起こる原因や解決方法について教えてください。

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

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

こんにちは。Wendy02です。 個々の内容に関しては、4.以外は、すでに、ここのカテゴリでも、Q&Aは出ていますが、以下は、もう、いわゆる「システム」ですから、その全体を仕上げるというのは、また、統合力というものが必要になってしまいます。簡単に見えてもなかなか出来ないのです。システムというのは、たかがExcelでも、プロの範疇なのです。しかし、何とか、ご自身で扱える範囲の中で、より良いものに近づけていく方法がよいのではないかと思っています。 ------------------------------------------------ *させたい動作 1. ブックAのマクロで、ブックBを開く 2. ブックAの情報をブックBに貼り付ける 3. データの量によって改ページが崩れるため、ブックBの改ページを手動で直す 4. 保存ボタンを押すことにより、ブックBの全てのシートを標準に戻す ------------------------------------------------ 現在、どこまで出来ているのかわかりませんが、4. に関しては、なるべく既存のボタンという方法は外したほうがよいです。私は、既存のボタンにインスタンスの設け方という方法を提示できないわけではありませんが、Excel共通のグローバルな仕様を求めているわけではありませんから、Aのブックにツール(コントロールツールやツールバーに付けた)ボタンで十分のような気がします。まず、そこらから手をつけるべきではないか、と私は思っています。 ネットでは、VBAのクラス・インスタンスは、結構公開されてはいるのですが、どちらかというと、VB(6)からのダウンサイズのワザを見せているだけで、実際使ってみると、本当のコンパイルではありませんから、そのコードに対して、Untouchable(壊れやすいコードだから触らないほうがよいもの) になってしまうのです。良く分かっていないと、さっぱり原因がつかめなくなってしまいます。また、その内容とパフォーマンスのバランスの悪いものも多いのです。

yuiyui0123
質問者

お礼

さらにアドバイスをありがとうございます。 お礼が遅くなってしまってすみません。 状況は改善できていないのですが、大変勉強になります。 背伸びせず、出来ることからやってみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

こんにちは。 「Private Sub Workbook_BeforeSave」 >ブックAのマクロで、上記マクロが記述されているブックBを呼び出し >名前を付けて保存をしています。 こちらの解釈が間違っているかもしれませんが、何度か読み直してみると、何か、すごい高度なことをしようとされているように思いますね。ブックのBイベントの呼び出しは出来るとは思うのですが、技術的に複雑になると、内容が不自然だと思います。 イベント・ドリブン型は、あくまでも、「自ブック」の動作(Action)を起動にするものです。 ・ブックAのマクロで、ブックBを開く ・ブックAの情報をブックBに貼り付ける ・データの量によって改ページが崩れるため、ブックBの改ページを手動で直す *・保存ボタンを押すことにより、ブックBの全てのシートを標準に戻す 今のところ、* の部分だけだとは思いますが、 ブックAから、ActiveWorkbook または、WorkBooks("B.xls") と、単に操作すればよいのではありませんか? Private Sub CommandButton1_Click() Dim ws As Worksheet 'シートの標準化 For Each ws In ActiveWorkbook.Worksheets '開いているブックのシート    ws.Activate    ActiveWindow.View = xlNormalView    ActiveWindow.Zoom = 100 Next    With Application.Dialogs(xlDialogSaveAs) '保存      .Show ActiveWorkbook.Name    End With End Sub ただ、もしかして、「保存ボタン」というのは、既存のコマンド・ボタンのことでしょうか? ツールボタンなら、「個人用マクロブック」に登録すればよいのですが、既存のボタンですと、インスタンスを作らないていけないのです。

yuiyui0123
質問者

補足

2度目の質問にもお答え頂き、感謝いたします。 たしかに私のスキルを超えた事なのかもしれません。 混乱してしまいました。 ブックAは一種類のExcelファイルなのですが 実はブックBは何種類もあります。 そして、ブックB内のシート数は定まっておりません。 そのためシート名は変数に格納しているのです。 初めはブックAから操作したのですが、うまく行かず ブックBからならば!と思っていたのですが、こちらも駄目で もう何がいけないのか、さっぱりです。 コードにWorksheets("Sheet1").Activateなどのように シート名を表示させるとうまく行くようなので、 変数の格納の仕方が悪いのか?と思ったのですが・・・。 それと「保存ボタン」は既存のコマンド・ボタンです。 インスタンスの意味が解らず・・・ Wendy02様のコードを参考に、もっと勉強します。 毎回本当にありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAのWorkbook_BeforeSaveイベントについての疑問

    エクセル2000です。 前にも似たような質問をしたのですが理解ができていません。 ThisWorkbookモジュールに以下の記述をし、終了時保存する場合にはSheet2を表に出すようにしました。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1).Value = Time() Sheets("Sheet2").Select MsgBox "保存します。" & ActiveSheet.Name Sheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Value = Time() End Sub これで×を押して手動で終了すればそのとおりに働きます。ActiveSheet.Nameも当然Sheet2になります。 ところが、標準モジュールの下記の終了マクロ Sub 終了() ThisWorkbook.Close End Sub で終了しようとすると、A列セルにTime()は記録され、どういうわけかSheet2がSelectされず、MsgBox "保存します。" のメッセージが出て、B列セルにTime()が記録され、保存されます。 ActiveSheet.NameもSheet2ではありません。 つまり、Sheets("Sheet2").Select の部分だけが完全にスキップされてしまうのです。 どうしてでしょうか?

  • マクロで、改ページがうまく認識されません

    マクロで、改ページがうまく認識されません Excel2002を使用しています。 1ページ内に収まるように作った「内訳明細書」の型があり、 複数ページに渡る時は、ボタンを押せば新しいページが下に追加される…という マクロを作りたいと思い、いろいろ調べながらやってみたのですがうまくいきません。 以下のように、 「シートの最後の改ページの次の行に、原紙シートからコピーしたフォームを貼り付ける」 としてみたのですが、 最後の改ページの後ろ側に何かしらのデータがある時は ちゃんと最後の改ページを認識するのに、それがない時は、そのひとつ手前の 改ページを最後の改ページとみなすようです。 これはこういうものなのでしょうか? 何か解決策がありましたら、お教え願います。 Sub 改ページを入れる() Sheets("内訳明細書").Select p = ActiveSheet.HPageBreaks.Count '改ページの総数 L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 Sheets("原紙").Select Rows("1:26").Select Selection.Copy Sheets("内訳明細書").Select Rows(L).Select ActiveSheet.Paste Range("A7").Select Sheets("原紙").Select Application.CutCopyMode = False 'コピーモードを解除 Range("A1").Select Sheets("内訳明細書").Select  ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブにする 最終行 = ActiveCell.Row + 1 'アクティブセルの行番号(+1)    Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual End Sub

  • 値の受け渡し

    VBAで開くときにマクロを有効にしないとシートがみれないように 【はじめに】【松】【竹】【梅】の4つのシートがあるうち、 保存時に 【はじめに】=表示、 【松】【竹】【梅】=非表示 保存後に 【はじめに】=非表示、 【松】【竹】【梅】=表示 の処理にしましたが、 閉じるで保存ではなくctrl+Sで保存した場合、まだ処理中でも 【竹】【梅】シートで保存した場合【梅】シートが表示されてしまいます。 どのようにしたら使っていたシートに戻れるでしょうか? よろしくお願いします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("はじめに").Visible = True Sheets("はじめに").Select Sheets("松").Visible = False Sheets("竹").Visible = False Sheets("梅").Visible = False End Sub Private Sub Workbook_afterSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False ★保存をしたシートに戻りたい End Sub Private Sub Workbook_Open() Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False End Sub

  • エクセルマクロでオートフィルタを貼り付け。VBA

    お世話になっております。 エクセルのマクロを作成したのですが、上手く機能いたしません。 オートフィルタで条件に一致するものが現在表示されている 「CSV元データをここに貼り付ける」という名前のシートが ございます。 これをシートを全選択し、そのまま 「加工1」という名前のシートに貼り付ける。 といったマクロを作成したのですが、加工1には何も貼り付けられていないようです。 下記にマクロのプログラムを記載しますので、どこを訂正すればいいのかをお教えいただければ ありがたいです。 無知で申し訳ございませんが、何卒よろしく御願いいたします。 当方が今したいのは、マクロ2なのですが、マクロ2を見ようとするとマクロ1も表示されます。 なぜ、マクロ1もでてくるのかわかりませんが、よろしく御願いいたします。 Sub マクロ1() ' ' マクロ1 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Columns("A:D").Select Selection.Delete Shift:=xlToLeft Columns("D:D").Select Sheets("読込データ(加工1)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Sheets("読込データ(ORG)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 Sheets("csv元データをここに貼り付ける").Select Columns("B:D").Select Selection.Delete Shift:=xlToLeft Columns("I:P").Select Selection.Delete Shift:=xlToLeft Range("I19").Select Sheets("csv元データをここに貼り付ける").Select Rows("2:2").Select Selection.AutoFilter Selection.AutoFilter Field:=9, Criteria1:="=2", Operator:=xlAnd End Sub Sub マクロ2() ' ' マクロ2 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Cells.Select Selection.Copy Sheets("加工1").Select Range("G12").Select End Sub

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • 同じフォルダーに保存したい。

    報告書.xlsを一部加工後に実行するVBマクロで教えてください。同じフォルダー内で報告書.xlsを上書き保存しさらに4個のsheet(報告書、詳細、依頼書、関連写真)の内、2個のsheet(依頼書、関連写真)を削除した後にsheet(報告書)のセル"Z1"の名前で保存すべく作成したのですが(Z1).xlsが同じフォルダーに作成できません。マイドキュメントに出来てしまいます。 Sub Macro2() Dim strFilePath As String Dim strFileName As String Dim flg As Boolean '◆保存するパスの設定 strFilePath = ThisWorkbook.Path & "\" '◆保存するファイル名の指定 Application.DisplayAlerts = False strFileName = "報告書" ThisWorkbook.SaveAs strFilePath & strFileName Sheets("関連写真").Select ActiveWindow.SelectedSheets.Delete Sheets("依頼書").Select ActiveWindow.SelectedSheets.Delete Sheets("報告書").Select strFilePath = ThisWorkbook.Path & "\" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=ActiveSheet.Range("z1").Value End Sub

  • エクセルVBAの不思議な挙動?

    エクセル2003です。 ThisWorkbookには以下の記述があります。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub If Range("A1").Value = "" Then MsgBox "A1が未入力です" Range("A1").Select Cancel = True End If Application.OnTime Now(), "ページ移動" End Sub 標準モジュールには以下の記述があります。 Sub ページ移動() Sheets("Sheet2").Select Range("A1").Select End Sub Sub プリント() ActiveWindow.SelectedSheets.PrintPreview End Sub これでSheet1を開いた状態でツールバーから印刷プレビュー指示をすると、A1セルが入力済みであればプレビュー画面を出し、プレビューを閉じればSheet2が表示されます。 ところが、同じ状態でツールバーからではなく、マクロ Sub プリント を実行すると、プレビュー画面にはなりますが、プレビューを閉じてもSheet1のままです。 なぜ、 Application.OnTime Now(), "ページ移動" が、有効にならないのでしょうか?

  • マクロについて

    Sub FormShow() Qry.Show Private Sub CommandButton1_Click() Sheets("A").Select Sheets("B").Select Replace:=False Sheets("C").Select Replace:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Help").Select Sheets("A").Select End Sub のマクロが登録された「ボタン(フォームコントロール)」により実行した後に、 Bシート内のA1セルの中に"・"を検索し、 もし"・"があった場合は"WWW()"のマクロを実行、 "・"がなかった場合は"XXX()"のマクロを実行する。 これが中々上手くいかず困っております。 ご教授いただければ幸いです。

  • 行列入れ替えて貼り付ける方法を教えてください。

    シート1のC3:AF4にあるデータ(右に30個あるデータ)を、シート2のE列の 最終行の1個下から「形式を選択して貼り付け」の「行列を入れ替える」 で、下に30個貼り付けるマクロを書きたいのですが、どうしたらいい でしょうか? 最終行の一個下というところと、行列入れ替えて貼り付けというのが わからなくて…。 また、C3:AF4のE列への貼り付けが終わったらC7:AF8をB列に貼り付け、 C11:AF12をH列に貼り付けたいのです。 画像を添付します。 マクロの自動保存だと失敗してしまったので、これをどう修正したら いいか教えてほしいです。 Sub Macro2() ' ' Macro2 Macro ' ' Range("C7:AF8").Select Selection.Copy Sheets("Sheet2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("E2").Select Sheets("Sheet1").Select ActiveWindow.ScrollColumn = 20 ActiveWindow.ScrollColumn = 19 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 17 ActiveWindow.ScrollColumn = 16 ActiveWindow.ScrollColumn = 15 ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("C3:AF4").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("H2").Select Sheets("Sheet1").Select ActiveWindow.ScrollColumn = 20 ActiveWindow.ScrollColumn = 19 ActiveWindow.ScrollColumn = 18 ActiveWindow.ScrollColumn = 17 ActiveWindow.ScrollColumn = 16 ActiveWindow.ScrollColumn = 15 ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("C11:AF12").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("B1").Select End Sub よろしくお願いします。

専門家に質問してみよう