VBAを組んでみた。新しいbookに保存するの巻

#VBAを組んでみた。
#やってみたこと
作製したデータをコピーと貼り付けで新しいbookに保存をする

##事前準備
###Cドライブ直下に[testフォルダ]を作成する
この中に作成したファイルが入ります
<img width="962" alt="testフォルダの作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520258/a8e8efc5-d392-a896-b490-424619624f05.png">
###VBAを行うシートの名前を「見本」に変更する
別のシート名で編集を行っている方は
VBAコード上にある「見本」を指定したシート名に置き換えて考えてください

###VBAの標準モジュールを開く
標準モジュールとは？
VBAを書くシートのようなものことをVBEといいます
標準モジュールとは通常時に使用するVBEです　詳細はまた後日...
####VBEの開き方
知っている方はスルーしてください
まずExcelのメインタブに[開発]があるかを確認します
<img width="962" alt="メインタブに開発があるか.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520258/a8578088-81b3-14af-66b2-c4cacb2d8e0c.png">
無い場合はExcelのオプションから開くことができます
始めにメインタブの[ファイル]を選択します
次に[オプション]を開くと下図の[Excelのオプション]が開かれます
[リボンのユーザー設定]の[開発]の欄にチェックを入れOKを押します
<img width="959" alt="Excelのオプションから開発を選択する.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520258/10a850c3-fda1-518a-487b-9cc13df71e87.png">
Excelのメインタブの[開発]から[Vlsual Basic]を開きます
次に、[挿入]のタブから標準モジュールを選択します
<img width="963" alt="標準モジュールを開く.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520258/df161f3e-76be-fa76-33ef-ac08214dd544.png">
これで開くことができました
これからVBAを書いていきます
<img width="960" alt="VBAの標準モジュールの画面.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520258/aa3a9fef-0754-7392-368f-e53557bc0254.png">


　　
##VBAのコード
先ほど開いた標準モジュールにコードを書いていきます

```vb

Sub test1()
'①作成したデータをコピーして新しいworkbookにすべての形式を含めて張り付ける。
ThisWorkbook.Worksheets("見本").Range("A:F").Copy
Workbooks.Add 'sheetを追加する
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme

'②さら同じものをコピーして値貼り付けをする
ActiveSheet.Range("A1:F70").Copy
Selection.PasteSpecial Paste:=xlPasteValues

'③新しいworkbookのSheet名を変更する
Dim sheetname As String
sheetname = Year(Now) & "年" & Month(Now) & "月分"
ActiveWorkbook.Sheets("Sheet1").Name = nam 'Sheetの名前を変更する

'④新しいworkbookを保存する
Dim filname As String
filname =  Year(Now) & "年分"

Dim pass As String
pass = "C:\ test" & filname & ".xlsx"

ActiveWorkbook.SaveAs Filename:=pass
ActiveWorkbook.Close savechanges:=True

'⑤保存したことを通知する
MsgBox "保存しました。"

End Sub

```

##使用した関数
今回は　Dim、copy、Selection.PasteSpecial　の3つに絞ってご紹介します
###Dim 変数を入れる
`Dim　＊＊＊　As String
　＊＊＊ ＝

＊＊＊には自分で入れたい変数の名前を入れます
上記Stringの部分を下記の表のように変更します

|||意味|備考
|:-:|---|---|---|
|1|String|文字列|ファイルパスを作成するとき等に利用する
|2|Integer|整数|条件付き書式を利用した時に利用
|3|Currecy|通貨|数値だけほしいときに利用
|4|date|日付|西暦1900年1月1日以降を入れられる
|5|variant|全てのデータ|何を使用するか迷ったときに利用する


###Copy コピー
`ThisWorkbook.Worksheets("見本").Range("A:F").Copy`
この場合「このWorkbookのシート名見本のAからF列を選択しコピーをする」
ことができます

####Copyの解除
`Application.CutCopyMode = False`
これでコピーを解除できます

###Selection.PasteSpecial 貼り付け

`Selection.PasteSpecial Paste:=xlPasteAll`
Pasteは省略が可能です
ただ、Pasteの部分を変更するとどのように張り付けるのかを指定できます
pasteの他にoperation,skipBlanksなどがあります
今回はpasteの一部をご紹介します

||Paste|意味
|:-:|---|---|---|
|1|xlPasteAll|全てを貼り付け|
|2|xlPasteFormats|書式を保持して張り付け|条件付き書式などを利用した時に利用
|3|xlPasteAllExceptBorders|罫線以外の全てを張り付け|
|4|xlPasteValues|値貼り付け|
|5|xlPasteFormulas|数式を張り付け|
|6|xlPasteAllUsingSourceTheme|元の書式を含めて全て貼り付け|



#まとめ
書式設定は残して数式は消して保存するという手間が煩わしくてこのVBAを組んでみました
まずは可変的な部分は少なめに遠回りなコードでも思い描いた通りに動くコードを作成できればと思います

#参考
[エクセルの神髄](https://excel-ubara.com/excelvba1/)
何の関数をどのように使用すれば思うように動くのかとてもわかりやすく参考にさせていただきました

ありがとうございました