あなた
- VBA入門書を読むと、どのくらいコードを書ける?
- VBA入門書で、どこまでできるようになる?
ベル
実際に、私がVBA入門書を読み、作ったものをご紹介
読んだ入門書は『入門者のExcel VBA』です
はじめまして。普段はメーカーで機械設計をしているベルと申します
この記事は、『入門者のExcelVBA』を参考に書いています
リンク
できたのは転記・開く・保存して閉じる・オートフィルetc…
VBA入門書を読み、次の作業を自動化できました
自動化した内容
- 番号管理台帳である、Book2を開き、必要な情報を入力して保存して閉じる
- Book2で入力した行の番号を、Book1に転記
使用したデータ
- Book1:ローカルにある、書類テンプレートのエクセルデータ
- Book2:共有フォルダ(会社のサーバー)にある、一覧表のエクセルデータ
作成した機能
- Book1を開いた状態で、VBAを登録したボタンを押してスタート
- 共有フォルダにあるBook2を開く
Book2は空白セルがある一覧表 - 入力済みの最下行の、一つ下の行にオートフィル
- Book1から、Book2へ転記
・オートフィルしたセルの、隣のセルに順番に転記 - Book2から、Book1への転記
・VLOOKUPを使って参照 - 転記後、保存して閉じる
・保存して閉じるか、選択するウィンドウを表示
コード内容は、下記の通り
Option Explicit
Sub Book2とBook1転記()
'エクセルファイルのファイルパスを格納する変数FilePathを宣言する
Dim FilePath As String
'入力済みの最終行の値を格納する変数lastを宣言する
Dim last As Integer
'入力済みの最終行+1の値を格納する変数lastoneを宣言する
Dim lastone As Integer
'フルパスを入力してファイルを開く
'フォルダ名が変更されると、ファイルパスが取得できなくなるので注意
'[\\xxx.xxx.xxx.xxx\yyyyyyy\zzzzzzzzzz\Book2.xlsx]に、エクセルのパスを入力する
FilePath = \\xxx.xxx.xxx.xxx\yyyyyyy\zzzzzzzzzz\Book2.xlsx
'ファイルを開く
Workbooks.Open (FilePath)
'開いたファイルの最終行を取得
'Rows.Countは、エクセルシートの最大行数を返すオブジェクト式
'EndはRangeオブジェクトのプロパティ
'xlUpは、Endプロパティの構文の一部
'End(xlUp)で、Ctrl+↑になる
'lastに入力済み最終行を格納
'lastoneに入力済み最終行+1を格納
last = Cells(Rows.Count, 1).End(xlUp).Row
lastone = last + 1
'A列の最終行+1のセルに、最終行の値+1の値を入力する
'入力済みの最終行を下にオートフィル
'AutoFillはメソッド
Range("A" & last).AutoFill Destination:=Range(Cells(last, 1), Cells(lastone, 1)), Type:=xlFillDefault
'ドキュメント番号の隣のセルに、今日の日付を転記
Workbooks("Book2.xlsx").Sheets("Sheet1").Cells(lastone, 2).Value = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value
'日付の隣のセルに、名前を転記
Workbooks("Book2.xlsx").Sheets("Sheet1").Cells(lastone, 3).Value = ThisWorkbook.Sheets("Sheet1").Cells(1, 2).Value
'名前の隣のセルにプロジェクト番号を転記
Workbooks("Book2.xlsx").Sheets("Sheet1").Cells(lastone, 4).Value = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'プロジェクト番号の隣のセルにプロジェクト名称
Workbooks("Book2.xlsx").Sheets("Sheet1").Cells(lastone, 5).Value = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
'Book2.xlsxを保存して閉じる
Workbooks("Book2.xlsx").Close
'数式埋め込みでVLookup関数を使って、別ブックを参照
With ThisWorkbook.Worksheets("Sheet1")
'客先略称
.Range("$B$5") = "=VLOOKUP($C$21,'\\xxx.xxx.xxx.xxx\yyyyyyy\zzzzzzzzzz\Book2.xlsx'!$A$1:$M$66000,13,FALSE)"
.Range("$B$5").Value = .Range("$B$5").Value '値に変換
End With
End Sub
ベル
ちなみに、何回もググったし、何回もエラー出ました
このVBAを自作した理由
転記自動化のVBAを作った理由は、次の通りです
- 会社の共有フォルダに移動して、エクセルファイルを開くのが面倒
- デスクトップ等でショートカットを増やしたくない
- 微妙に記入が面倒(特にオートフィル)
ベル
同じ悩みを持つ方は、参考にしてみてください
自作できたとは言え、ほぼコピペ・汚いコード
一応、自作できましたが、ほぼコピペ
さらにコードとしてはかなり不格好です
同じコードの繰り返しも多く、「自作できる」というには少々厳しい
ベル
普段Excelで関数をサクサク入力できているのと比べると、躓きが多かったです…
VBAができる方から見ると、ツッコミどころが多いコードになっているでしょう
ただ、「入門書だけで、ここまでできる」という一つの事例として、これからVBAを始めるか悩んでいる方の参考になれば幸いです
まとめ:”とりあえず”でも作るようになれる入門書すごい
入門書を読み、ググりまくれば、次のような機能を数時間で作れます
- エクセルからエクセルへの転記
- オートフィルの自動化
- 特定のセルを指定
- 共有サーバーにあるエクセルファイルを開く
- エクセルファイルを閉じる
入門書だけで、これだけ機能を作ることができれば、たいはんの事務作業を自動化できそうです
また、もし私と同じようにできなくても、落ち込む必要はありません
まだ、入門書を読んだだけでは、おそらくVBAの入口に立つことができた程度
これから少しづつ学んで、だんだんとできるようになっていきましょう
ベル
私もまだまだですので、一緒に頑張っていきましょう
リンク