Excel VBAで新規BOOKを追加する方法

このQ&Aのポイント
  • ExcelのVBAを使ってユーザーフォーム上にテキストボックスとボタンを配置し、日付を入力した後にボタンを押すと同じフォルダ内に「日記06.xls」というファイルを作成する方法について教えてください。
  • また、作成したファイル内には「1月」から「12月」と「全体」のシートが作成され、入力した日付に対応する月のシートがアクティブになるようにしたいです。
  • DATE関数を使って年と月を取得し、上記の処理を行う方法についても教えてください。
回答を見る
  • ベストアンサー

ExcelのVBAでの新規BOOK追加

こんばんは。 ExcelのVBAでユーザーフォーム上にTextboxがとボタンがあるとします。TextboxにはDATEで今日の日付が入力されています。ここではたとえば07/5/15と入力されていると仮定します。この状態でボタンを押すと同一フォルダー内に「日記06」という感じに日記と入力されている年を合わせた「日記06.xls」というファイルを作成したいのですが可能なのでしょうか?又、作成するときBookのSheetを「1月」「2月」…「12月」「全体」と13Sheet作成して、07/5/15なので「5月」のSheetにActivateさせたいのですが可能なのでしょうか?本とか見ていろいろやってはいるんですがDATEから年と月を取り出して上記のように処理する方法がよく分かりません。よろしくお願いします。

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

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.1

こんにちは。 こんな感じです。 ボタンのClickイベントとして処理します。 Private Sub CommandButton1_Click() '保存ファイル名の作成 Dim saveFileNM As String saveFileNM = ActiveWorkbook.path & "\日記" & Format(CDate(Me.TextBox1.Text), "yy") & ".xls" '新規Bookの作成 Dim BK As Workbook Set BK = Application.Workbooks.Add(xlWBATWorksheet) Dim stCount As Integer stCount = BK.Sheets.Count '自動作成Sheetの数 Dim i As Integer For i = 1 To 13 If i > stCount Then BK.Sheets.Add after:=BK.Sheets(BK.Sheets.Count) End If If i <> 13 Then BK.Sheets(i).Name = Str(i) & "月" Else BK.Sheets(i).Name = "全体" End If Next BK.SaveAs saveFileNM 'Bookを保存(上書き確認あり) BK.Sheets(Month(Date)).Select '表示 Set BK = Nothing End Sub

takedono
質問者

お礼

ありがとうございます。いいマクロが出来上がりました。DATEの使い方がとても参考になり助かりました。ありがとうございます。

関連するQ&A

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • EXCEL VBA 新規ブック保存について

    フォームで作成したデータから、請求書などの帳票をシートに作成しています。 その請求書シートを、新たなブックを作成し、シートへ貼り付け セルC7(帳票名)    F11(コード1)    J11(コード2) この3つを合わせた名前で任意のフォルダへ保存して、閉じるようにしたいと考えています。 また、ブックの保存先を指定するにあたり 下の指定でコードを書いたのですが    C:\Users\××××××\Desktop\管理システム\帳票 システムを丸ごと違うPCに変えても、エラーが出ないようにするには この指定の書き方でも良いのでしょうか? まだ初心者なもので 二つのブックを行き来するコードで頭が混乱しています。 まだVBA勉強を始めたばかりで、質問方法も拙いところも多々あると思いますが ご教授いただけます様、どうぞよろしくお願い致します! 自分で書いたコードですが 考えすぎて、ちょっと支離滅裂になってしまい 恥ずかしいのですが藁にもすがる思いでご質問させていただきました Dim Newbook As Workbook   Set Newbook = Workbooks.Add   fileName = Range("C7") & "_" & Range("F11") & Range("J11")   Newbook.SaveAs fileName:=Worksheets("請求書").Range("C7") & "_" & Worksheets("請求書").Range("F11") & Worksheets("請求書").Range("J11") Windows("管理システム.xls").Activate Worksheets("請求書").Select Cells.Select Selection.Copy Windows("fileName").Activate Cells.Select ActiveSheet.Paste Range("A1").Select  ブック名 (元データ) 管理システム.Xls  シート名        請求書 追記: 本来はフォームから直接印刷を出したいのですが      フォームでは対応しきれない部分を、シート上にて必要に応じ手を加えてから、      出力したいと考え、今回のシートへの出力を考えています

  • Excel VBA(Win2000、Office2000)

    現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 問題の日付に関する質問についてですが・・・ ユーザーフォーム上に 年を入力するComboBox1 → 2004 月を入力するComboBox2 → 5 日を入力するComboBox3 → 7 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、2004/05/07と認識させて、TextBox1に"金"と表示させたいのですが、どのようにしたら良いでしょうか? TextBox1表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。

  • (エクセル)別のブックにシートをコピーすると

    初めて質問します。 EXCEL2000で、VBAとテンプレートが同じブックに保管されています。(test1.xls) test1.xlsのユーザーフォームでデータを入力して、コマンドボタンを押すと、テンプレートが別ブックにコピーされ、セルが埋められるようにしたいのですが、テンプレートにシート間参照(temp!A1)を使っているので、コピー元のブックを参照するように書き換えられてしまいます。([test1.xls]temp!A1) がんばって検索したのですが、回避策を見つけることができませんでした。 よろしくお願いします。

  • Excel 違うBookのシートをコピーする

    Excelでわからないことがあり質問させていただきました。 原紙のBookに 資料のBookのシートをコピーさせたいのですが 資料Bookには シートが sheet1~sheet50まであり 原紙のBookにマクロのボタンやフォームを作成し 毎回資料のBookの違うシート名を選択しコピーをさせることは可能なのでしょうか? たとえば 原紙のシートに入力フォームを作り sheet名を入力 → 「コピー」のボタンを押すとコピーができる。 といった感じに・・・ フォームでなくてもリストなんかでもいいのですが・・・

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

  • ExcelのVBAについてです。

    例えば"Book1.xls"という名前のブックの"Sheet1"という名前のシートの一部を削除する。 これをVBAでやらせようと思うんですが、"Book1.xls"を開かずに行うことはできるんでしょうか。 Workbooks("Book1.xls").Worksheets("Sheet1").Range("C7:M51").ClearContents のようにしてるんですがうまくいきません。 "Book1.xls"はLAN上のブックで実際はフルパスで指定してます。 よろしくお願いします。

  • Excel VBA 別ブックを開かずに転記

    Excel2007のユーザーフォームについて教えてください。 ユーザーフォームを以下のように作成しました。 ■テキストボックス6つ テキストボックス2→件名 テキストボックス3→数 テキストボックス4→名前 テキストボックス5→備考1 テキストボックス6→備考2 ■コマンドボタンが1と3の2つです。 コマンドボタン1→転記と印刷 コマンドボタン3→終了 ■シートの構成  sheet"作成と一覧"   1行目を以下の項目で使用しています。  A1→番号(テキストボックス1を表示)  B1→件名(テキストボックス2を表示)  C1→数(テキストボックス3を表示)  sheet"印刷"  A1→番号(テキストボックス1を表示)  A2→件名(テキストボックス2を表示)  B2→数(テキストボックス3を表示)  A3→名前(テキストボックス4を表示)  A4→備考1(テキストボックス5を表示)  A5→備考2(テキストボックス6を表示) テキストボックスに入力した値を2つのシートにそれぞれ転記して、 シート"印刷"を2部印刷しています。 ここまで以下のコードで行いました。 Private Sub CommandButton1_Click() '入力値を作成と一覧シートに転記 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) = UserForm1.TextBox2.Value Cells(行, 列 + 2) = UserForm1.TextBox3.Value '入力値を印刷シートにに転記 Worksheets("印刷").Range("A1") = UserForm1.TextBox1.Value Worksheets("印刷").Range("A2") = UserForm1.TextBox2.Value Worksheets("印刷").Range("B2") = UserForm1.TextBox3.Value Worksheets("印刷").Range("A3") = UserForm1.TextBox4.Value Worksheets("印刷").Range("A4") = UserForm1.TextBox5.Value Worksheets("印刷").Range("A5") = UserForm1.TextBox6.Value 部数 = 2 Worksheets("印刷").PrintOut Copies:=部数, Collate:=True UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub Private Sub CommandButton3_Click() '終了ボタンで値をクリアしてウィンドウを閉じる Dim Ctrl As Control For Each Ctrl In Controls If TypeName(Ctrl) = "TextBox" Then _ Ctrl.Value = "" Next Ctrl Unload Me End Sub 教えて頂きたい事なのですが・・・ コマンドボタン1の入力値を作成と一覧シートに転記の所なのですが、 アクティブセルではなく、常にA列の最後の値の次の空白行に転記するようにしたい場合、 どのように書き換えればいいのでしょうか? もう一点ですが、 別ブックにテキストボックス1から6が入力された一覧があります。 この別ブックを開かずに、 テキストボックス1に入力された番号を探して、 テキストボックス2から6に表示されるようにしたいのです。 うまく説明できないのですが・・・ 別ブックの名前は"たちつ" 別ブックは、あいうサーバーの かきくフォルダの中のさしすフォルダです。 ブック"たちつ"に"一覧"というシートがあります。 一覧のシートのD列の3行目以降には番号が入力されており、日々増えています。 テキストボックス1に入力された番号を、 一覧のD列から探し、 I列の値をテキストボックス2へ K列の値をテキストボックス3へ L列の値をテキストボックス4へ M列の値をテキストボックス5へ J列の値をテキストボックス6へ転記させたいのです。 同じブックの別シートを参照するときには Application.VLookupで出来たのですが、 マクロの記録でやってみても、解決できませんでした。 コードをご覧いただいてお分かりの通り、 VBA超初心者です。 ネットを見ながら試行錯誤している状況です。 コードの間違い等あるかもしれませんが、 ご教示よろしくお願いいたします。

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • Excel VBAで年齢を求める(Win2000、Office2000)

    現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 ユーザーフォーム上に 年を入力するComboBox1 → 1972 月を入力するComboBox2 → 1 日を入力するComboBox3 → 1 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、1972/01/01と認識させて、TextBox1に"32"才と表示させたいのですが・・・現在、3つのComboBoxから日付を変数にセットするところまで出来ています。 ↓ Private Sub ComboBox3_Change() Dim B As Date B = Me.ComboBox1.Value & "/" & Me.ComboBox2.Value & "/" & Me.ComboBox3.Value 問題は、このあと誕生日を求める方法がわからず困っています。 *TextBox1に表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。

専門家に質問してみよう