• 締切済み

こんなマクロ作れませんか?

エクセルにて報告書を作成しています。 シートにNo.××とつけ、シート番号をクリックするとそれぞれの 報告書が見れるようにしています。 これをマクロで簡単につくることはできないでしょうか? 現在の手順とすると、 1.原本のシートを選び、「移動またはコピー」で末尾へ移動でコピーをつくる。 2.シート名を「名前の変更」で前のシートの次のNo.××とつける。 この流れをマクロのボタンとかで出来るでしょうか? ちなみにマクロは初心者なので詳しいやり方を教えてください。 よろしくお願いします!!

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

『原本』のコピーをシートの最後に作って、現在の報告書番号の最大+1をシート名にする、と解釈しました。 『原本』と名前のついたシートを『No.XXX』のシート名でコピーする例です。 『前のシートの次のNo.XX』が問題でしょうね。マクロ記録では出てきませんね。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュールで標準モジュールを挿入し、出てきたコードウインドウに下記コードをコピーして貼りつけます。  Const SrcShtName = "原本"  Const HokShtName = "No."   の "原本" 、"No."については、taknakanoさんの実際のシートに合わせて修正して下さい。 シートに戻り、ツール→マクロ→マクロ で『SheetCopy』を実行すればシートをコピーします。 ツール→マクロ→マクロ→オプションでショートカットキー(例えばZ)を登録すれば、Ctrl+Shift+Z でこのマクロが実行できます。(当方Excel97です) ここから ↓ Sub SheetCopy()   Const SrcShtName = "原本" '原本シートのシート名   Const HokShtName = "No." '報告書シートの最初の部分(数値以外)   Dim ws As Worksheet 'ワークシート   Dim HokNo As Integer '報告書シートの数値部分   Dim MaxNo As Integer '報告書シートの数値部分の最大値   MaxNo = 0   For Each ws In Worksheets     'ワークシートの名前を調べる     If Left(ws.Name, Len(HokShtName)) = HokShtName Then       '指定した報告書なら、番号を取得       HokNo = Val(Application.Substitute(ws.Name, HokShtName, ""))       If MaxNo < HokNo Then         '報告書番号の最大値を求める         MaxNo = HokNo       End If     End If   Next   'コピーした報告書の番号   MaxNo = MaxNo + 1   'シートをコピーする   Sheets(SrcShtName).Select   Sheets(SrcShtName).Copy After:=Sheets(Worksheets.Count)   ActiveSheet.Select   'シート名を変える   ActiveSheet.Name = HokShtName & (MaxNo) End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

質問の真意の理解が充分では内のですが、下記をやってみてください。 (目次のようなシートを作る) 1.Sheet1を(データを入力するので無く)、報告書と対応したコマンドボタンを並べるために、確保する=そのように考えると言うこと。 罫線を消したり、行番号、列記号なども消せば、一層それらしくなります。シート名も「目次」とするのも良かろう。(やり方は略します。) (コマンドボタンの貼りつけ) 2.表示-ツールバー-VisualBasicをクリック。 金槌とスパナがX状になったアイコンをクリック。 コントロールツールボックス内の「コマンドボタン」をクリック。 どれであるかは、各アイコンの上にカーソルを数秒間乗せていると名称がコメントで出ます。長方形の形のものです。 Sheet1の適当な場所(例えばb2の辺り)に+形カーソルを持っていき、右下方向へドラッグする。 大きさを適当に調整してください。 第2、第3のボタンも同じく重ならないように貼りつけてください。 (ボタンのトップ=Captionを変える) 3.CommndButton1とかになっているものを、報告書名に変える。 やり方はボタンの上で右クリックする。 「プロパティ」をクリック。プロパティウィンドウの「Caption」行を探し、右列で CommndButton1になっている部分に報告書名を(漢字が判りやすい)打ち込む。例 売上実績報告書 (ボタンをクリックすると報告書シートが出る仕掛けにする) 4.ボタンをダブルクリックする。 VBEの画面になる。 Private Sub CommandButton1_Click() (空白行1行) End Sub が現われるから、その空白の行に下記を入力する。 Worksheet("Sheet2").Activate Sheet2はシート名を「売上実績報告書」(例)に変えたのなら Worksheet("売上実績報告書").Activateとする。 実行-デザインモードの終了をクリック。 エクセルのSheet1(目次)の画面に戻り、売上実績報告書(例)をクリックすると、Sheet2(売上実績報告書(例))の画面が出ます。 (2つ目以後のボタンは) 5.第2のボタンにも3は同じく行う。 4、についてツール-マクロ-VisualBasicをクリック。 実行-デザインモードをクリック。 Sheet1(目次)のシートに戻り、 CommandButton2をダブルクリック。 Private Sub CommandButton2_Click() (空白行1行) End Sub が現われるから、その空白の行に下記を入力する。 Worksheet("Sheet3").Activate と打ち込む。 Sheet3はシート名を「訪問件数報告書」(例)に変えたのなら Worksheet("訪問件数報告書").Activateとする。

  • nek784
  • ベストアンサー率35% (145/411)
回答No.1

 「1.」についてはメニューバーの「ツール」→「マクロ」→「新しいマクロの記録」を選択して「1.」の作業をすれば自動でマクロが記録されます。  自動記録を終了する場合は「記録の終了」というメニューが出ていると思います のでそちらで終了してみてください。  「2.」についてもとりあえずマクロの自動記録を試してみてはどうでしょうか。 「2.」についてはファイル名のつけ方を工夫すればできると思います。