5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?