LoginSignup
5
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-12

VBAを組んでみた。

やってみたこと

作製したデータをコピーと貼り付けで新しいbookに保存をする

事前準備

Cドライブ直下に[testフォルダ]を作成する

この中に作成したファイルが入ります
testフォルダの作成.png

VBAを行うシートの名前を「見本」に変更する

別のシート名で編集を行っている方は
VBAコード上にある「見本」を指定したシート名に置き換えて考えてください

VBAの標準モジュールを開く

標準モジュールとは?
VBAを書くシートのようなものことをVBEといいます
標準モジュールとは通常時に使用するVBEです 詳細はまた後日...

VBEの開き方

知っている方はスルーしてください
まずExcelのメインタブに[開発]があるかを確認します
メインタブに開発があるか.png
無い場合はExcelのオプションから開くことができます
始めにメインタブの[ファイル]を選択します
次に[オプション]を開くと下図の[Excelのオプション]が開かれます
[リボンのユーザー設定]の[開発]の欄にチェックを入れOKを押します
Excelのオプションから開発を選択する.png
Excelのメインタブの[開発]から[Vlsual Basic]を開きます
次に、[挿入]のタブから標準モジュールを選択します
標準モジュールを開く.png
これで開くことができました
これからVBAを書いていきます
VBAの標準モジュールの画面.png

  

VBAのコード

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


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を組んでみました
まずは可変的な部分は少なめに遠回りなコードでも思い描いた通りに動くコードを作成できればと思います

参考

エクセルの神髄
何の関数をどのように使用すれば思うように動くのかとてもわかりやすく参考にさせていただきました

ありがとうございました

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1