1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

子供の想像力を伸ばしアイデアを形にする小学生向けプログラミング教室「プロスタキッズ」

業務効率をアップする!コピペで動くVBA5選

Pocket

日々の会計処理から飲み会の出欠表まで、あらゆる用途に使用出来る便利な表計算ソフト、Excel。その作業をより効率化してくれる存在が、「VBA」と呼ばれる「マクロ」プログラムです。

今回は、実際の業務でも使える簡単なマクロを5つご紹介します。VBAが使えるようになれば、毎日のルーチンワークを一瞬で片付けられるようになるため、業務効率が何倍にもアップすることでしょう。「プログラミング初心者だから、VBAなんて難しくて分からない」と尻込みするのはもったいないですよ!

VBA(マクロ)を使用するメリット

VBAは、ある程度パターン化している作業に対して、絶大な効果を発揮します。
例えば、一定のルールに則って集計を行ったり、伝票や利益表の作成などといった業務は、VBAによって自動化することが可能なのです。

ちなみに私は、スクリプトを自動生成してくれるVBAをよく作成していました。「作成ボタン」を押すと、データベースの定義書やディレクトリ構成の仕様書を読み込み、一瞬で500行~1000行程度のスクリプトファイルを100個以上生成してくれるマクロです。

データベースやディレクトリの仕様がコロコロと変わる現場だったため、大変重宝していました。もし自力でスクリプトを書いていたら、1ヶ月以上かかっていたことでしょう。(VBAの作成には3日程かかりました)

私は既にその現場から離れていますが、今現在もそのVBAは現役で使われていると聞いています。

この様に、VBAには定型作業を自動化し、業務効率を大幅にアップさせる力があるのです。

VBAの実行方法

この記事で紹介しているVBAの実行方法を解説します。

①Excelの画面上で「Alt」+「F11」を押して、「Visual Basic Editor(以下、VBE)」を起動してください。

②VBEの「挿入」>「標準モジュール」を選択。「Module1(コード)」ウィンドウが起動します。

③今回は例として、下で紹介している「空白行を削除する」VBAを実行してみましょう。記事に記載されているコードをコピーして、そのままVBE上にペーストしてください。

④Excelの通常画面に戻りましょう。「空白行を削除する」VBAは予め処理範囲を選択しておく必要があるため、データが入っているA列を選択します。

⑤「表示」>「マクロ」>「マクロの表示」を選択します。

⑤「マクロ」ウィンドウから、「空白行を削除する」VBAの関数名「del_blank_line」を選択。「実行」ボタンを押してください。

⑥マクロが実行され、空白行が削除されました。

VBA1. 空白行を削除する

何行にも渡るデータや文章をExcel上にコピペすると、所々に空白行が出来てしまうことがあります。地道に行の削除を繰り返せば解決することは出来ますが、こんなときこそVBAの力を借りましょう!

Sub del_blank_line()
‘ 空白セルを選択する
Selection.SpecialCells(xlCellTypeBlanks).Select
‘ 行全体を削除する
Selection.EntireRow.Delete
End Sub

使い方
空行を含む一列を列選択して、マクロ「del_blank_line」を選択してください。

VBA2. 入力した列幅に変更する

資料の見栄えを良くするために、セルの列幅を調整してから作業に入ることはありませんか?しかし、マウスでの幅調整は意外に難しく、時間と体力を無駄に消費してしまう場合も…。

このVBAでは、選択した列のセル幅をユーザーが入力した数値に変更してくれます。

Sub ajst_column_w()
Dim input_num As Variant ‘入力された列幅

‘ 列幅の入力
input_num = InputBox(“列幅を数字で入力してください”)
‘ 列幅の変更
Selection.ColumnWidth = input_num
End Sub

使い方
セル幅を調整したい列を列選択して、マクロ「ajst_column_w」を選択してください。
全セルを選択しても実行可能です。小数点にも対応しています。

VBA3. Excel関数を自作する

Excelには便利な関数がたくさん用意されていますが、業務内容によっては、それら標準関数だけでは対応しきれないケースも出てきます。もちろん、様々な関数を組み合わせたり、計算過程を他のセルへ一時的に退避させたりすることで、目的の結果を得ることは出来るでしょう。しかし、ある日突然計算方法が変わってしまった場合は、修正が大変です。

Excel関数を多用する複雑な計算は、VBAで組み直すことをおすすめします。VBAで記述した方がシンプルに書けますし、後から処理方法が変更になったときでも、VBAの一部を修正するだけで良いので手戻りが少なくて済みます。

ユーザー定義関数の基本形
ユーザー定義関数は、以下の形で定義します。

Function 関数名(パラメーター) 戻り値の型
処理内容
End Function

ユーザー定義関数の例
Function tax_calc(price As Integer, tax As Boolean) As Integer
‘ 税込み価格・税抜き価格を計算する関数
‘ 使い方:=tax_calc(金額,True もしくは False)
‘ True=税込み価格の計算、False=税抜き価格の計算

Dim tax_rate As Double ‘ 税率
tax_rate = 1.08

If tax = True Then
‘ 税込み価格の計算
tax_calc = price * tax_rate
Else
‘ 税抜き価格の計算
tax_calc = price / tax_rate
End If
End Function

使い方
VBE上に関数を定義するだけで動作します。マクロを実行する必要はありません。

「ユーザー定義関数の例」の使い方
任意のセルで、「=tax_calc(金額,TRUE)」(税込み価格計算)もしくは「=tax_calc(金額,FALSE)」)(税抜き価格計算)と入力してください。
「金額」部分には、「A1」などセルを指定することも出来ます。

VBA4. 1行おきにセルの背景色を変える


行数の多い表などは、1行おきに背景色を変えた方がグッと見やすくなります。…ということは誰もが知っていることだとは思うのですが、手間を考えると躊躇してしまいますよね。しかも、途中で行の追加や削除があった場合は、また塗り直さなければいけません。

そんなときこそVBAの出番です。

Sub clrpintstin_on_every_other_line()
Dim table As Range ‘ 表の範囲
Dim input_num As Variant ‘入力された色番号

‘ 色番号の入力
input_num = InputBox(“色番号を数字で入力してください。(1:黒、2:白、3:赤、4:緑、5:青、6:黄色)”)

For Each table In Selection
‘ 行番号を取得し、偶数行の場合は着色する
If table.Row Mod 2 = 0 Then
table.Interior.ColorIndex = input_num
Else
table.Interior.ColorIndex = 0
End If
Next
End Sub

使い方
処理対象の表を範囲選択して、マクロ「clrpintstin_on_every_other_line」を選択。背景色を指定するダイアログが表示されるので、色番号を入力してください。

色番号付きの色見本一覧を表示するVBA
上記VBAで指定出来る色番号の一覧を表示します。

Sub color_lst()
Dim line As Integer ‘ 行番号

‘ 57色分表示する
For line = 0 To 56
Cells(line + 1, 1).Value = line
Cells(line + 1, 2).Interior.ColorIndex = line
Next line
End Sub

使い方
何もデータが入力されていないシート上で、マクロ「color_lst」を実行してください。

VBA5. 選択範囲を画像化し、jpg形式で保存する

知っていると色々な場面で応用の効くVBAです。Excelで作成した表をスマホやガラケーから確認してもらいたい場合や、元データとなるExcelファイルを絶対に触って欲しくないときなどに重宝します。

Sub CopyAsJpg()
Dim file_name As String ‘ 保存ファイル名(フルパス)

file_name = “”
Do While file_name = “”
‘ファイル保存ダイアログを表示する
file_name = Application.GetSaveAsFilename(fileFilter:=”JPGファイル (*.jpg), *.jpg”)

‘ キャンセル・バツが押された場合は処理を終了する
If file_name = “False” Then
Exit Sub
End If

‘ 上書き確認
If Dir(file_name) <> “” Then
rtn = MsgBox(“同じ名前のファイルが存在します。上書きしますか?”, vbYesNo + vbQuestion, “確認”)
If rtn = vbNo Then
file_name = “”
End If
End If
Loop

‘ 選択範囲を画像形式でコピーし、一時処理用の領域にペーストする
Set s_range = Selection
s_range.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set tmp_chart = ActiveSheet.ChartObjects.Add(0, 0, s_range.Width, s_range.Height).Chart
tmp_chart.Paste

‘ 画像をjpgで保存する
tmp_chart.Export Filename:=file_name, filtername:=”JPG”

‘ 一時領域を削除
tmp_chart.Parent.Delete
End Sub

使い方
画像化したい部分を範囲選択して、マクロ「copy_as_jpg」を選択。ファイルの保存先を指定するダイアログが表示されるので、ファイル名を指定してください。選択範囲内に挿入されている画像やオブジェクトなども全て画像化します。

【おすすめ記事】

習得必須!VBAを教われるスクールBEST5
VBAの本・参考書の評判

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る