【速攻実践】VBA入門書で自作できた機能を紹介するよ【ググり必須】

当サイトではアフィリエイト広告を利用しています。

vbaexample1 VBA
あなた
あなた
  • VBA入門書を読むと、どのくらいコードを書ける?
  • VBA入門書で、どこまでできるようになる?
ベル
ベル

実際に、私がVBA入門書を読み、作ったものをご紹介
読んだ入門書は『入門者のExcel VBA』です

はじめまして。普段はメーカーで機械設計をしているベルと申します

この記事は、『入門者のExcelVBA』を参考に書いています

スポンサーリンク

できたのは転記・開く・保存して閉じる・オートフィルetc…

vbacontent


VBA入門書を読み、次の作業を自動化できました

自動化した内容

  1. 番号管理台帳である、Book2を開き、必要な情報を入力して保存して閉じる
  2. Book2で入力した行の番号を、Book1に転記

使用したデータ

  • Book1:ローカルにある、書類テンプレートのエクセルデータ
  • Book2:共有フォルダ(会社のサーバー)にある、一覧表のエクセルデータ

作成した機能

  1. Book1を開いた状態で、VBAを登録したボタンを押してスタート
  2. 共有フォルダにあるBook2を開く
    Book2は空白セルがある一覧表
  3. 入力済みの最下行の、一つ下の行にオートフィル
  4. Book1から、Book2へ転記
    ・オートフィルしたセルの、隣のセルに順番に転記
  5. Book2から、Book1への転記
    ・VLOOKUPを使って参照
  6. 転記後、保存して閉じる
    ・保存して閉じるか、選択するウィンドウを表示

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を作った理由は、次の通りです

  • 会社の共有フォルダに移動して、エクセルファイルを開くのが面倒
  • デスクトップ等でショートカットを増やしたくない
  • 微妙に記入が面倒(特にオートフィル)
ベル
ベル

同じ悩みを持つ方は、参考にしてみてください

エクセルファイルを開くために、パスをコピーする場合は、[Shift+右クリック]が便利です

pathcopy

自作できたとは言え、ほぼコピペ・汚いコード

一応、自作できましたが、ほぼコピペ

さらにコードとしてはかなり不格好です

同じコードの繰り返しも多く、「自作できる」というには少々厳しい

ベル
ベル

普段Excelで関数をサクサク入力できているのと比べると、躓きが多かったです…

VBAができる方から見ると、ツッコミどころが多いコードになっているでしょう

ただ、「入門書だけで、ここまでできる」という一つの事例として、これからVBAを始めるか悩んでいる方の参考になれば幸いです

まとめ:”とりあえず”でも作るようになれる入門書すごい

入門書を読み、ググりまくれば、次のような機能を数時間で作れます

  • エクセルからエクセルへの転記
  • オートフィルの自動化
  • 特定のセルを指定
  • 共有サーバーにあるエクセルファイルを開く
  • エクセルファイルを閉じる

入門書だけで、これだけ機能を作ることができれば、たいはんの事務作業を自動化できそうです

また、もし私と同じようにできなくても、落ち込む必要はありません

まだ、入門書を読んだだけでは、おそらくVBAの入口に立つことができた程度

これから少しづつ学んで、だんだんとできるようになっていきましょう

ベル
ベル

私もまだまだですので、一緒に頑張っていきましょう

タイトルとURLをコピーしました