見習いエンジニアがゆく

見習いエンジニアの勉強帳 VBA・NWなどなどITの勉強用ブログです。のんびり、のんびり。

【VBAエキスパートの勉強】ExcelVBAベーシック ~3.プロシージャとは~

プロシージャとは、マクロの最小実行単位のことです。

Subプロシージャの場合は、「Sub マクロ名」から始まり、「End Sub」で終わります。

 

 

プロシージャを考える

以下のようにセルA1に「hello world」を入力し、B列にA1の文字列を1文字ずつ抜き出す処理をVBAで記述した場合のプロシージャを考えてみましょう。

 

コード例

Sub sample()
    Range("A1").Value = "hello world"
End Sub
 
Sub sample2()
    Dim num As Long, i As Long '変数の宣言
    num = Len(Range("A1")) 'セルA1の文字数を変数numに代入
   
    For i = 1 To num '繰り返し処理
        Cells(i, 2) = Mid(Range("A1"), i, 1)
    Next i
End Sub
Sub sample()
    Range("A1").Value = "hello world"
End Sub
Sub sample2()
    Dim num As Long, i As Long '変数の宣言
    num = Len(Range("A1")) 'セルA1の文字数を変数numに代入
   
    For i = 1 To num '繰り返し処理
        Cells(i, 2) = Mid(Range("A1"), i, 1)
    Next i
End Sub

 処理結果

f:id:melancholy198x:20190415200632j:plain

 

この場合は、以下の2つのプロシージャでマクロが作られています。

  • Sub sample:セルA1に「hello world」を入力するプロシージャ。
  • Sub sample2:セルA1の文字列を1文字ずつB列に入力するプロシージャ。

 

今回使ったMid関数はこちら

www.heilnervba.work

 

 

プロシージャの種類

プロシージャには以下の種類があります。

  • Subプロシージャ
  • Functionプロシージャ
  • Propertyプロシージャ (クラスモジュール内で使用するプロシージャ)

※Propartyプロシージャについては、試験範囲外です。

 

SubプロシージャとFunctionプロシージャの違いは、以下の通りです。

  • Subプロシージャは処理の結果を返さない。
  • Functionプロシージャは処理の結果を返す。

 

処理した結果の値を返すかどうかがSub・Functionプロシージャの違いです。

マクロ内でFunctionプロシージャを呼び出し、処理をさせて、その結果を呼び出し元に返すことができます。

処理の結果(値)を返すので、関数と同じ働きを持つのでFunction プロシージャのことを「ユーザー定義関数」と呼ぶこともあります。

 

Functionプロシージャに引数を渡してみる

例として、セルA1に入力した数値を消費税込みに計算する処理を考えます。

コード例

Option Explicit
Public Const tax As Double = 1.08 '定数を宣言しておく
 
Sub sample()
    Dim Yen As Long, taxPlus As Long
    Yen = Cells(1, 1)
     taxPlus = 税金計算(Yen)
     MsgBox taxPlus
End Sub
 
Function 税金計算(Yen As Long)
    税金計算 = Yen * tax
End Function

 

 Subプロシージャの「sample」から処理が始まり、セルA1に入力した値をFunctionプロシージャの「税金計算」に渡して、結果を戻り値として「sample」に戻しています。

メッセージボックスに税込みの数値が表示されます。

※消費税は滅多に変更されないので、Subプロシージャ前の宣言ブロックで宣言しました。(2019年増税はどうなるんでしょう。。)

 

別プロシージャの呼び出し

別のプロシージャの呼び出しは、Callステートメントを使って行います。

Callステートメントの利用例

Sub goodMorning()
    Call HELLO 'HELLOを呼び出す

    MsgBox "GoodMorning"

End Sub
 
Sub HELLO()
    MsgBox "HELLO"
End Sub

上の例の場合は、Sub goodMorningを実行すると、まずCallステートメントでSub HELLOが呼び出されて、画面に「HELLO」と表示します。

その後、Sub goodMorningの処理で画面に「GoodMorning」と表示します。

 

このCallステートメントは省略も可能ですが、「Call」ステートメントを使った方が他のSubプロシージャを呼び出していることが明確にわかるので、Subプロシージャ呼び出し時には省略しない方が良いです。

※Callステートメントですが、「戻り値を取得する場合はCallステートメントを省略する」などのルールがあります。

 

【VBAエキスパートの勉強】ExcelVBAベーシック ~2.モジュールとは~

モジュールとは、マクロを記述する専用のエリアのことです。

f:id:melancholy198x:20190415194546j:plain

 

  • 「マクロ」は、プログラミング言語VBA」で記述される。
  • 「マクロ」は、モジュールという専用のエリアに記述する。
  • VBAのコードも、もちろんモジュール内に記述する。

 

今回はそのモジュールについて、書きます。

 

 

モジュールの種類

モジュールはオブジェクト毎にあります。

モジュールを持つオブジェクト

  • ブック(Workbookオブジェクト)
  • シート(Sheetオブジェクト)
  • フォーム(UserFormオブジェクト)

※シートモジュールでは、ワークシート(Worksheetオブジェクト)のモジュールが一般的。また、グラフ専用のグラフシート(Chartオブジェクト)にもモジュールが用意されている

 

オブジェクトに属さない汎用的なモジュール

  • 標準モジュール
  • クラスモジュール

※クラスモジュールは、クラスを定義するときに利用します。

 

<モジュールの例>

f:id:melancholy198x:20190415191836j:plain

 

補足:オブジェクトとは

オブジェクトは、「もの」「主体」「対象物」などの意味で、Excelを構成する部品であり、VBAの操作対象のことです。

 

「セルA1」に100を代入する→セルA1が操作対象

「ワークシート」を増やす→ワークシートが操作対象

 

セルはRangeオブジェクト、セルが存在するワークシートはWorksheetオブジェクト、ワークシートが存在するWorkbookオブジェクトなど、Excelは様々なオブジェクト・部品から構成されています。

 

モジュールにマクロを記述する際のルール

マクロは、どこのモジュールに記述して良いが、以下のようなルールがあるので注意。

 

イベントを利用するマクロはオブジェクトのモジュールに記述

対象のワークシートが選択された状態(アクティブ)にすることで、Activateイベントが発生する。そのイベントを利用して自動で起動するマクロは、Worksheetオブジェクトのモジュールに記述する必要があります。 

 

上位オブジェクトを省略したときの意味が異なる

例えば、以下のコードの場合を説明します。

コード例

Sub sample()
    Range("A1").Value = "hello world"
End Sub

 

上記のようにRangeオブジェクト(セル)の上位オブジェクトが省略されているとき、コードを記述したモジュールによって意味が異なります。

 

Worksheetオブジェクトのモジュールに記述した場合

WorksheetオブジェクトのセルA1が対象になる

 

標準モジュールに記述した場合

アクティブシートのセルA1が対象となる。

 

Worksheetモジュールにコードを書いた場合、マクロを実行すると記述したWorksheetのセルA1が対象になり、

標準モジュールにコードを記述した場合、マクロを実行するとアクティブシートのセルA1が対象になります。

 

宣言できる変数・定数などの制限

すべてのモジュールで使用できるグローバルエリア変数、定数、ユーザー定義型、APIの宣言など、標準モジュールに記述する必要があります。

【VBAエキスパートの勉強】ExcelVBAベーシック ~1.マクロ、VBAとは~

2019年4月中にVBAエキスパート 「ExcelVBAスタンダード」の取得を目標にしていますが、まずはそのひとつ前のレベルである「ExcelVBAベーシック」から勉強していきます。

このブログでこれからしばらくは、VBAエキスパートの勉強方法・VBAエキスパートの公式テキストを基に別のプログラムを作成するなどの内容を連載していく予定です。

まずはベーシックの内容・次にスタンダードの内容を記事にしていきます。

 

もしVBAエキスパートの取得を考えられている方がいらっしゃれば、一緒に勉強していければと思います。

また、未来に取得を考えられている方や、試験前などに読み返しができるような内容にしたいと思っているので、よろしくお願いします!!

 

前置きはここまで。

本日からはVBAベーシックの勉強をしていきます。

 

 

マクロとVBAとは

ざっくりマクロとVBAの説明を書くとすると、以下の通りです。

 

VBAVisual Basic for Applicationの略です。

 

以下で少しだけ詳しくマクロとVBAの説明をします。

 

マクロとは

マクロは、Excelにある様々な機能(計算・グラフ作成など)の内の一つ。

「実際に行った操作を記録して、再実行する機能」だけでなく、Excelに搭載されているプログラミング言語VBAを利用して、マクロからExcelを操作したり、Windows設定をしたり、インターネットからのデータ収集をしたりなど、色々なことが行えます。

 

VBAとは

VBAは、マクロを記述するプログラミング言語。マクロでどのように処理をするかを記述します。

VBAは、プログラミング言語の「Visual Basic」をExcel・Word・OutlookAccessなどアプリケーションのマクロ用にカスタマイズした言語です。

なお、VBAは「イベント駆動型言語」、「オブジェクト指向型言語」という特徴があります。

 

途中で頓挫しているVBA入門編ですが、VBAの基礎的な部分を学べますので、ぜひあわせて読んでいただければ、嬉しいです。

 

www.heilnervba.work

 

本日はここまで。

これからもよろしくお願いいたします。

 

【資格】VBAエキスパート ExcelVBAスタンダード

せっかくExcel VBAを勉強するのなら、あわせてExcel VBAの資格も取得しようと思っています。資格を取得することでスキルの証明になりますし、基礎固めにもなると考えました。

※この記事は2019/4/14時点の情報となります。

 

 

Excel VBAの資格って何があるの?

私がVBAの資格で知っているのは、「VBAエキスパート」のみでした。

インターネットで検索してもVBAの資格は、他になく「VBAエキスパート」の一択のようです。

 

VBAエキスパートについて

VBAエキスパートについて、書いていきます。

念のため、VBAエキスパートのサイトのリンクも貼っておきます。

 

VBAエキスパート

https://vbae.odyssey-com.co.jp/

 

VBAエキスパートの試験の種類

VBAエキスパートは、ExcelAccessの2つがあります。

そして、ExcelAccessそれぞれにベーシックとスタンダードの2つのレベルの試験があります。ベーシックよりもスタンダードの方が、幅広い知識が必要となっています。

 

 

ExcelAccessの両方でスタンダードに合格すると、「VBAエキスパート スタンダードクラウン」という称号が貰えます。

貰ったところでどうなんだろうって感じはありますが、無料なので貰っておいて損は無さそうですね。

 

VBAエキスパートの受験料

ExcelAccessともにベーシックとスタンダードで受験料金が違っています。

 

ベーシックの受験料は「12,960円(12,000+消費税8%)

スタンダードの受験料は「14,580円(13,500+消費税8%)

 

なお、マイクロソフト オフィス スペシャリスト(MOS)、IC3、VBAエキスパート、コンタクトセンター検定試験のひとつでも取得している場合は、以下の割引価格で試験を受けることができます。

 

ベーシックの受験料(割引価格)は「11,664円(10,800+消費税8%)
スタンダードの受験料(割引価格)は「13,176円(12,200+消費税8%)

 

私はMOSを取得しているので、割引価格で受験する予定です。

 

なお、MOS2013上級レベルの場合はPart1とPart2の2科目合格、IC3の場合は資格取得3科目合格、または2科目合格+キーアプリ免除制度利用が割引価格摘要の条件となっています。詳細はしっかりと「VBAエキスパート」のサイトでご確認ください!

 

VBAエキスパートの試験問題

ベーシック・スタンダードともに択一問題、複数選択式問題となっています。

プログラミングで選択問題ってあまり意味もないような気がしますが、資格はあくまでも自分の知識・実力の確認・証明と考えたほうが良いですね。

勉強の際に沢山コードを書いて動かして、身に着けたいと思います。

 

VBAエキスパート試験概要はこちら

https://vbae.odyssey-com.co.jp/about/outline.html

 

VBAエキスパートのテキスト

公式のテキストが販売されています。

 

公式テキスト

https://vbae.odyssey-com.co.jp/study/textsearch.html

 

私は書店でExcelベーシック・スタンダードの2冊を買いました。

ベーシックのテキストが「3,024円(2,800円+消費税8%)

スタンダードのテキストが「3,240円(3,000円+消費税8%)

 

まずは公式テキストで勉強して、Webなどの関連サイトで知識を深めて勉強していこうと思っています。

 

VBAエキスパートは就職・転職に有利?

資格を持っているだけでは不十分だと思います。資格は取ったけれど、VBAを使えないと意味がありません。

資格の取得とあわせて「ExcelVBAでこんなことができます」、「ExcelVBAでこんなものを作りました」などのアピールが出来たら有利だと思います。AccessのデータをExcelから呼び出して表示させるとかできれば、結構なアピールになると思います!

そういったアピールができるように、資格取得の際にはいろいろなものを実際にVBAで作成してみるのが良いと思います。

仕事の業務をVBAで効率化してみたり、家計簿を作ってVBAで色々してみたりするのも良いかもしれません。

 

どの企業もExcelは使っているでしょうし、資格有無というよりも、VBAのスキルがあると色々と重宝されると思います。また、これからプログラミングを勉強しようという方にとっても、VBAは良いんじゃないかなぁと思います。

 

私の目標

4月中にExcelVBAスタンダードの取得を目標とします。 

AccessVBAについては、興味はありますが、資格の取得までは良いかなぁと思っています。テキスト・受験料のこともありますし、AccessVBAの試験勉強の時間を別の勉強(Webなど)や別のことに使いたいと思っています。

 

色々なスキルを身につけて、厳しい社会を生き残れ。って感じです。

【Excel 関数】MAX・MIN

Excelのワークシート関数の「MAX」・「MIN」は、最大値・最小値を求める関数です。

 

 

MAX(マックス)関数

関数式

=MAX(数値)

 

MAX関数は、引数に指定した数値の最大値を返す関数です。引数には最大値を調べるセル範囲を指定します。

 

MIN(ミニマム)関数

関数式

=MIN(数値)

 

MIN関数は、引数に指定した数値の最小値を返す関数です。引数には最小値を調べるセル範囲を指定します。

 

MAX関数・MIN関数の使用例1

よくある各店舗の売上推移の表です。

f:id:melancholy198x:20190413221330j:plain

上の表内の最小売上にMIN関数、最大売上にMAX関数を使ってみました。

セルC8には『=MIN(C3:C5)』、セルD8には『=MIN(D3:D5)』、セルE8には『=MIN(E3:E5)』と関数が入っています。

引数に指定したセル範囲の最小値が表示されています。

 

セルC9には『=MAX(C3:C5)』、セルD8には『=MAX(D3:D5)』、セルE8には『=MAX(E3:E5)』と関数が入っています。

引数に指定したセル範囲の最大値が表示されています。

 

補足:SUM関数・AVERAGE関数

合計売上には「SUM関数」、平均売上には「AVERAGE関数」を使っています。

SUM関数は引数の値を合計の値を返します。

AVERAGE関数は引数の値の平均の値を返します。

 

MAX関数・MIN関数の使用例2

下のような年月日の日付データをMAX関数・MIN関数の引数に指定することも可能です。

f:id:melancholy198x:20190413222814j:plain

セルC2には『=MIN(B:B)』、セルC3には『=MAX(B:B』と関数を入力し、C2には最も古い年月日、C3には最も新しい年月日を表示させています。

※今回はMIN、MAX関数ともに引数を(B:B)と、B列で指定しました。

C2とC3の書式を「標準」のままだ「シリアル値」で表示されてしまうため、書式を「日付」に変更もしてください。

f:id:melancholy198x:20190413223256j:plain

 

日付のデータは「シリアル値」という数値にExcel内部で置き換えられています。書式が「標準」などの時に表示される数値です。

「1900/1/1」がシリアル値の「1」。そこから1日ずつ「1」加算されたものがシリアル値です。

 

今回のような場合は、関数を使わず日付データを入力するのが一般的だと思います。

あくまでも日付データの考え方、日付もMAX・MIN関数の引数にできることを紹介するために、案内いたしました。

 

MAX関数・MIN関数の使用例1で『クイック分析』を使ってみる

以前紹介したクイック分析を、使用例1のデータで使ってみたいと思います。

MAX関数・MIN関数は関係なく、クイック分析の復習がてらに。 

 

クイック分析の記事はこちら

www.heilnervba.work

 

売上推移のグラフを挿入

各店舗の売上推移を折れ線グラフで作成するのもクイック分析からだと簡単。

f:id:melancholy198x:20190413224911j:plain

 

スパークラインを表示

スパークラインを表示して売上推移を表示。

f:id:melancholy198x:20190413224932j:plain

 

クイック分析もいろいろなデータによって使い方がありそうですね。 

 

それでは、お読みいただきありがとうございました。

【Excel 2016】便利機能 クイック分析を使ってみる

今回はExcelの便利機能『クイック分析』をご紹介します。

 

 

クイック分析とは

選択しているセル範囲に対して実行できる機能を表示してくれます。

リボンのタブを切り替えたりする手間が省けるので、覚えておくと時短ができる便利な機能です。

Excel2013以降が利用対象のバージョンだと思います。

 

クイック分析を使ってみよう

実際にどんなものなのか利用してみましょう。

 

1.クイック分析の表示方法

まず、下の左側のような表を作ってます。そして、表の左上「製品名」から右下の「270」までのセルを選択します。すると「クイック分析」が表示されます。

f:id:melancholy198x:20190413214421j:plain


また、セルを選択した状態で右クリックから「クイック分析」を選ぶことも可能です。

f:id:melancholy198x:20190413214539j:plain

 

2.クイック分析の利用方法

試しに表をテーブルに変換してみます。

表のセルを選択した状態で、「クイック分析」>テーブル(T)>テーブルを順次選択します。

テーブルにカーソルを合わすと(クリックする前)、変換後にどういったテーブルになるか表示してくれます。

f:id:melancholy198x:20190413214850j:plain



そして、テーブルでクリックすると、表がテーブルに変換されました。

f:id:melancholy198x:20190413214934j:plain

 


他にも合計行を追加することなどもできます。

f:id:melancholy198x:20190413215325j:plain

 

書式設定・グラフ・合計・テーブル・スパークラインなど、もし、日々の業務に使えるようであれば、どんどん使っていきましょう!

 

それではお読みいただき、ありがとうございました。