VBAエキスパート対策
変数と配列

Excel VBAエキスパート対策です
公開日:2018-03-12 最終更新日:2019-08-26

変数と配列


・静的変数
・動的配列
・オブジェクト変数
・ユーザー定義型


【ここでのポイント】

覚えるべき項目がはっきりしているので、学びやすい章だと思います。

静的変数は、
プログラミング言語の変数としての意義は大きいのですが、
かといって、VBAにおいて頻繁に使うものでもなければ、無くてはならないものでもありません。
こういうものがあるのだということだけ覚えれば十分でしょう。

動的配列は、
VBA開発において必須であり、応用は無限にありVBAになくてはならないものです。
ベーシックに配列はなかったのに、いきなり動的配列として項目に上がっています。
この意図が少々腑に落ちませんが、
公式テキストでも静的変数から説明されているので、まずは配列とは何かから学んでください。
そして、ReDimは試験に必ず出題されるはずなので、ここはしっかり覚えて下さい。

オブジェクト変数は、
VBAの基本なので、本来は簡単な使い方くらいはベーシックでやっておいた方が良いとさえ思うものです。
使い方自体は簡単で、変数宣言の型指定とSetステートメントだけです。
ただし、プロパティ・メソッドの戻り型を意識しなければならない点は少し難しいかもしれません。

ユーザー定義型は、
プログラミング言語の機能としては極めて重要なものです。
VBA開発での高機能なマクロ作成では、これが使えるかどうかで開発効率が大きく変わってくるものです。
とはいえ、覚えることはTypeステートメントと、ユーザー定義型の変数の使い方だけになります。
文法的な記述方法だけ覚えておけば、試験対策としては問題ないでしょう。

静的変数

2019/05/15からの「VBAエキスパート」リニューアルに伴い出題範囲から削除されました。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。

プロシージャ内でDimステートメントで宣言した変数の値は、プロシージャが終了すると失われてしまいます。
プロシージャを連続で起動したり、連続でCallしても、変数は新たに用意されるため値は残りません。

プロシージャが終了しても、変数の値をそのまま残すことが出来るのが静的変数です。

静的変数がクリアされるタイミング
静的変数の保持期間は、プロシージャが定義されているモジュールと同じになります。
つまり、モジュールがリセットされると静的変数もリセットされます。

MOS VBA エキスパート スタンダード

また、
Endステートメントが実行されると静的変数は失われます。

静的という言葉の意味
プログラミング言語の静的(Static)は、動的(Dynamic)に対する言葉になります。

静的とは事前に行われるもの、動的はその場で行われるもの
このくらいの意味で理解してください。

言葉が分かりづらいのですが、変数の割り当て方法と考えるとわかり易いと思います。
変数の静的割り当て、一度割り当てたらそれを使う。
変数の動的割り当て、毎回新たに割り当てる。

静的変数は、
Staticステートメントで宣言します。
プロシージャ レベルで使用します。

Staticステートメントの詳しい構文はかなり難しいく、VBA試験の範囲外になります。
そこで、
通常の変数として、数値(IntegerやLong)、文字列(String)
これらを静的変数として宣言する記述と、その使い方、動作結果について説明します。

静的変数は、結果としてモジュールレベル変数と同じ動作となります。
その違いは、プロシージャの外部に変数を公開しているかどうかになります。
モジュールレベル変数は、他のプロシージャによって書き換えられますが、
静的変数は、他のプロシージャの影響を受けません。
つまり、
静的変数は、宣言したプロシージャだけで使えるモジュールレベル変数と考えても良いでしょう。

Option Explicit

Private i1 As Long

Sub sample1()
  Call sample2
  Call sample2
End Sub

Sub sample2()
  Static i2 As Long
  i1 = i1 + 1
  i2 = i2 + 1
  MsgBox "i1:" & i1 & vbLf & "i2:" & i2
End Sub

このsampleを何度か実行して確認してください。
何度か実行したら、今度は「リセット」して再度実行してみて下さい。

試験問題として、どのような問題が出されるかですが、
恐らく出題されるとしても、Dim宣言した変数との動作違いや、
静的変数について説明文の正否くらいではないかと思います。

動的配列

配列の概念

配列は、値を格納するために多くの区画を持つ1つの変数です、
集合住宅やアパートにたとえられますが、
要は、変数の箱を複数つなげたものと理解すれば良いでしょう。

1つの箱には、1つの値しか入れられませんが、その箱が複数つながっていますので、
結果として、複数の値をいれられるのが配列という事になります。
通常の変数が、1つの変数に1つの値を格納している点で大きく異なっています。

通常の変数 VBA マクロ 画像

配列    VBA マクロ 画像


配列が格納しているすべての値を参照する場合は、配列全体を参照することもできますし、
配列のインデックス番号(配列内の位置)を指定することで、個々の要素を参照することもできます。

配列のインデックス番号の最小値は、通常は0になります。
(Option Baseで変更可能ですが、使うべきではありませんし試験にも出ないでしょう)

配列の、箱(値を入れられる)の数を固定して変更しない場合と、
VBA内で、必要に応じて箱の数を変更する場合があります。

箱の数を固定するのを、静的配列と呼び、
箱の数を固定せずVBAで動的に変更するのを、動的配列と呼びます。


静的配列

配列の宣言
Dim ステートメント、またはPrivate ステートメント、Public ステートメントで宣言します。

Dim MyArray(10) As Long

インデックスの最小値は 0になりますので、
上記の宣言で、11個要素を持つ 1次元の配列を定義したことになります。

値を入れる時は、

MyArray(0) = 1

このように使用します。

以下の例では、配列に1から順に数値を入れています。

Sub sample()
  Dim MyArray(10) As Long
  Dim i As Long
  For i = 0 To 10
    MyArray(i) = i
  Next i
End Sub

多次元配列
Dim MyArray(10, 5) As String

これは、2次元配列を宣言しています。

ワークシートの、11行、6列のセル範囲を想像してもらえればよいでしょう。

Sub sample()
  Dim MyArray(10, 5) As Long
  Dim i As Long, j As Long
  For i = 0 To 10
    For j = 0 To 5
      MyArray(i, j) = Cells(i + 1, j + 1)
    Next i
  Next i
End Sub

上記では、セル範囲A1~F11を配列に入れています。

次元数の最大値は60となっています。

要素の下限の変更
Dim MyArray(1 To 10) As String

このように定義することで、配列の要素は、1~10の10個になります。

特に、ワークシートとデータのやり取りをする場合は、
このようにした方が、理解しやすく、また、記述もしやすいでしょう。


動的配列

静的配列では、配列の要素数は宣言時点で決められていましたが、
実行時点で要素数を増減できるのが、動的配列になります。

ReDimステートメント
動的配列変数に対するメモリ領域の再割り当てを行います。
プロシージャ レベルで使用します。

ReDim [Preserve] varname(subscripts) [As type]

Preserve

省略可能です。
既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。

varname

必ず指定します。
宣言する変数の名前です。
変数の標準的な名前付け規則に従って指定します。

subscripts

必ず指定します。
配列変数の次元を指定します。
指定できる次元数の最大値は 60 です。
引数 subscripts の構文は、次のとおりです。
[lower To] upper [,[lower To] upper] . . .
引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。
Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。

type

省略可能です。
変数のデータ型を指定します。


キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られます。
つまり、
キーワードPreserveを使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。
添字の下限を変更しようとすると、エラーが発生します。

また、次元数は変更できません。

変数の初期化時には、
数値変数(Integer,Long)は 0 に、
可変長文字列(String)は長さ 0 の文字列 ("") に、
固定長文字列には 0 が埋められ、
バリアント型 (Variant) 変数は Empty値に初期化されます。

要素数の変更について
ReDim MyArray(10, 10)

ReDim MyArray(10)

ReDim MyArray(10, 10)

このように、Redimで次元も要素数も変更できます。

ただし、Redimにより、それまでに配列に入っていた値は失われます。

値を保持したままReDimするには、Preserveを指定します。

ReDim MyArray(10, 10)

ReDim Preserve MyArray(10, 11)

ReDim Preserve MyArray(11, 11)

Preserveを指定することで、値がそのまま残ります。

ただし、
Preserveを指定した場合は、動的配列の最後の次元のサイズのみ変更可能で、
それより上位の次元は変更できません、エラーとなります。


配列で必要となるVBA関数とステートメント

配列を使う上で、必要となるVBA関数がいくつかあります、

LBound 関数
配列の指定された次元で使用できる最小の添字を、長整数型 (Long)の値で返します。

LBound(arrayname[, dimension])

arrayname 必ず指定します。
配列変数の名前です。
変数の標準的な名前付け規則に従って指定します。
dimension 省略可能です。
バリアント型 (内部処理形式 Long の Variant) の値を指定します。
添字の最小値を調べる対象となる配列の次元を示す整数を指定します。
最初の次元なら 1、2 番目の次元なら 2、というように指定します。
引数 dimension を省略すると、1 が指定されたものと見なされます。

UBound 関数
配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。

UBound(arrayname[, dimension])

arrayname 必ず指定します。
配列変数の名前です。
変数の標準的な名前付け規則に従って指定します。
dimension 省略可能です。
バリアント型 (内部処理形式 Long の Variant) の値を指定します。
添字の最小値を調べる対象となる配列の次元を示す整数を指定します。
最初の次元なら 1、2 番目の次元なら 2、というように指定します。
引数 dimension を省略すると、1 が指定されたものと見なされます。

使用例.
For i = LBound(MyArray, 1) To UBound(MyArray, 1)
  For j = LBound(MyArray, 2) To UBound(MyArray, 2)
    MyArray(i, j) = 0
  Next j
Next i

上記では、2次元配列MyArrayの全次元の全要素に0を入れています。

Array 関数
配列が格納されたバリアント型 (Variant) の値を返します。

Array(arglist)

引数 arglist は、必ず指定します。
引数 arglist には、値のリストをカンマ (,) で区切って指定します。
引数 arglist を指定しない場合は、長さ 0 の配列が作成されます。

指定した値は、バリアント型 (Variant) に格納されている配列の要素に代入されます。

使用例.
Dim MyArray
MyArray = Array(10, 20, 30)

この結果、MyArrayは、
LBound(MyArray)は0、UBound(MyArray)は2となります。

IsArray 関数
変数が配列であるかどうかを調べ、結果をブール型 (Boolean) で返します。

IsArray(varname)

引数 varname は必ず指定します。引数 varname には、変数の識別子を指定します。

IsArray 関数は、指定した変数が配列の場合は、真 (True) を返します。
それ以外の場合は、偽 (False) を返します。
IsArray 関数は、特に配列を含むバリアント型 (Variant) の式 に有効です。

Join 関数
配列に含まれる各要素の内部文字列を結合して作成される文字列を返します。

Join(sourcearray [, delimiter])

sourcearray 必ず指定します。
結合する文字列を含む 1 次元配列を指定します。
delimiter 省略可能です。戻り値となる文字列を区切るのに使用する文字を指定します。
省略すると、スペース (" ") が使用されます。
引数 delimiter が長さ 0 の文字列 (") である場合は、リスト内のすべての項目が区切り文字なしで連結されます。

Filter 関数
指定されたフィルタ条件に基づいた文字列配列のサブセットを含むゼロ ベースの配列を返します。

Filter(sourcesrray, match[, include[, compare]])

sourcearray

必ず指定します。
検索先の 1 次元配列の文字列を指定します。

match

必ず指定します。
検索する文字列を指定します。

include

省略可能です。
引数 sourcearray に指定した配列の各要素の文字列の中に、引数 include が含まれるかどうかを表すブール値を指定します。
引数 include が真 (True) の場合、Filter 関数は、配列の各要素の文字列の中で、引数 match が含まれる配列のサブセットを返します。
引数 include が偽 (False) の場合、Filter 関数は、配列の各要素の文字列の中で、引数 match が含まれない配列のサブセットを返します。

compare

省略可能です。
文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。
設定する値については、次の「設定値」を参照してください。
Option Compare : ステートメントの設定を使用して比較を行います。
vbBinaryCompare : バイナリ モードの比較を行います。
vbTextCompare : テキスト モードの比較を行います。
※バイナリ モードでは、全角半角、大文字小文字が区別されます。
  テキストモードでは、全角半角、大文字小文字が区別されません。


引数 sourcearray 内で引数 match に一致する文字列がなかった場合は、Filter 関数は空の配列を返します。
引数 sourcearray が Null 値であるか、1 次元配列でない場合は、エラーになります。
Filter 関数が返す配列は、一致した項目数分だけの要素が含まれています。

Erase ステートメント
固定サイズの配列の場合は要素を再初期化し、動的配列の場合は割り当てたメモリを解放します。

Erase arraylist

静的数値配列 要素はすべて 0 に設定されます。
静的文字列配列 (可変長) 要素はすべて長さ 0 の文字列 (") に設定されます。
静的文字列配列 (固定長) 要素はすべて 0 に設定されます。
静的バリアント型 (Variant) 配列 要素はすべて Empty 値に設定されます。
ユーザー定義型配列 各要素は、別個の変数として設定されます。
オブジェクト配列 要素はすべて特別な値 Nothing に設定されます。


LBoundとUBound以外は出題されないかもしれませんが、
実務で配列を使う上で、覚えておくべき関数として紹介しています。

試験対策としては、
Redim
Preserve
LBound
UBound

これらをしっかり覚えておけば良いでしょう。

オブジェクト変数

変数のデータ型に、
Object ・・・ オブジェクト型
があります。
数値や文字ではなく、オブジェクトを入れる変数がオブジェクト変数です。


オブジェクトと言っても、いろいろなものがあります。
ブックもシートもセルも、これらは全てオブジェクトです。

Object型は、これらオブジェクトなら何でも入れられるデータ型になります。
総称オブジェクト型とも言います。

しかし、
さらに固有のオブジェクトに対応した、データ型もあります。
Workbook
Worksheet
Range
これらは、それぞれ、
Workbookオブジェクト
Worksheetオブジェクト
Rangeオブジェクト

のデータ型です。

Font
これは、Fontオブジェクトのデータ型になります。

このようにオブジェクト型は、沢山ありますが、良く使うものはそんなに多くありません。
とりあえず、Workbook、Worksheet、Range、この3つを覚えれば良いでしょう。

データ型については、
Variant(バリアント型) > Object(総称オブジェクト型) > 固有オブジェクト型
このような関係になります、つまり、

Variantは、何でも入る
Objectは、オブジェクトなら何でも入る
個別のオブジェクト型は、そのオブジェクトのみ

オブジェクト変数を使うには、Setステートメントが必要になります

Setステートメント

オブジェクトへの参照を、変数に代入します。

この参照を変数に代入というのが解りづらいのでしょう。
オブジェクトの参照、つまり、アドレスを変数にいれるということです。

Set オブジェクト変数 = オブジェクト

変数はプロシージャの終了時点で破棄されます。
オブジェクト変数を意図的に破棄する場合は、Nothingを代入します。

Set オブジェクト変数 = Nothing


メソッドの戻り値をオブジェクト変数に代入

メソッドには値を戻すものがあります。
この時の戻り値には型があります。

メソッドの戻り型がオブジェクトの場合は、Setステートメントでオブジェクト変数に代入できます。

Dim wb As Workbook
Set wb = Workbooks.Open("test.xlsx")

ブックOpenでは、Openしたブックが戻されますので、それをSetステートメントで変数に代入しています。

Dim sht As Worksheet
Set sht = Worksheets.Add

シートAddでは、挿入されたシートが戻されますので、それをSetステートメントで変数に代入しています。


Dim sht As Worksheet
Set sht = Worksheets(1).Copy(After:=Worksheets(1))

これはエラーとなります、Copyメソッドは値を戻しません。

メソッドは戻り値があるもの無いもの、そして、戻り値の型があるので、この点はメソッドごとに覚える必要があります。
とはいえ、
試験としては上記の例を知っていれば十分だと思います。


使用例

Dim ws As Worksheet
Set ws = Worksheets("シート名")
ws.Cells(1, 1) = 1

これは、

Worksheets("シート名").Cells(1, 1) = 1

これと同じ事になります。

Set ws = Worksheets("シート名")

これ以降は、

Worksheets("シート名")別名として、wsを使えると考えてもらって結構です。

Range("A1").Font.Bold = True
Range("A1").Font.Color = vbRed
Range("A1").Font.Size = 12


これは、

Dim MyRange as Range


Set MyRange = Range("A1")

MyRange.Font.Bold = True
MyRange.Font.Color = vbRed
MyRange.Font.Size = 12


このように書き直す事が出来ます。
さらに以下のように書くこともできます。

Dim MyRange As Range
Dim myFont As Font

Set MyRange = Range("A1")
Set myFont = MyRange.Font

With myFont
  .Bold = True
  .Color = vbRed
  .Size = 12
End With

試験対策としては、このVBAコードが読み書きできるようになってください。
Withステートメントと組み合わせたVBAコードをすんなり読めるようになっておいてください。

注意
オブジェクト変数を使うには、Setステートメントが必要になります。

この言葉の意味をしっかり理解してください。

変数宣言のデータ型だけで完結するものではなく、
Setステートメントを使う事で、オブジェクトへの参照が変数に代入されます。
ただし、Setステートメントで代入する変数の型が違う場合はエラーとなります。

VBAコード 正否 理由
Dim myRange As Range
Set myRange = Range("A1")
Range型変数に、SetステートメントでRangeオブジェクトを代入
Dim myRange As Range
myRange = Range("A1")
× Setステートメントを使わずに、オブジェクト型変数へ代入するとエラーとなります
Dim mySheet As Worksheet
Set mySheet = Workbooks(1).ActiveSheet
Worksheet型変数に、SetステートメントでActiveSheetを代入
Dim mySheet As Worksheet
Set mySheet = Workbooks(1).Worksheets
× Worksheet型変数に、Worksheetsコレクションは代入できません
Dim mySheet As Variant
Set mySheet = Workbooks(1).Worksheets
Variant型変数なので、コレクションでも入れられます
Dim mySheet As Worksheet
Set mySheet = Range("A1")
× Worksheet型変数に、SetステートメントでRangeオブジェクトは代入できません
Dim myRange
Set myRange = Range("A1")
Variant型変数に、SetステートメントでRangeオブジェクトを代入
Dim myRange
myRange = Range("A1")
Variant型変数に、セルの値を代入していることになります。
Setステートメントを使った時との違いを理解してください。


試験対策としては、
メソッドの戻り値と、最後の「注意」をしっかり覚えておけば良いでしょう。

ユーザー定義型

ユーザー定義型は、名前の通りユーザーが定義できるデータ型になります。


普通の変数は、1つの値しか入れられませんが、
ユーザー定義型は、複数の異なるデータ型を入れる事が出来ます。

プログラミング言語での一般的な呼び方としては、構造体とも呼ばれます。
構造体は、オブジェクトとも言えます。
(プログラミング言語によっては、オブジェクトそのものです)
オブジェクトが、複数のデータ型の違うプロパティを持っていることと同様に考えてよいものです。

ユーザー定義型は、Typeステートメントで宣言します。

Type ステートメント

Type ステートメントを使って、異なるデータ型を組み合わせた独自のデータ型を作成できます。

ユーザー定義型には 1つまたは複数のデータ型の要素、配列、または事前に定義したユーザー定義型を格納することができます。

[Private | Public] Type varname
elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
・・・

End Type

Public 省略可能です。
すべてのプロジェクトのすべてのモジュールのどのプロシージャからも参照できるユーザー定義型を宣言するときに指定します。
Private 省略可能です。
宣言が行われたモジュール内でのみ参照できるユーザー定義型を宣言するときに指定します。
varname 必ず指定します。
宣言するユーザー定義型の名前です。
変数の標準的な名前付け規則に従って指定します。
elementname 必ず指定します。
ユーザー定義型を構成する要素の名前です。
要素名は、変数の標準的な名前付け規則に従って指定します。
ただし、キーワードを使うこともできます。
subscripts 省略可能です。
配列の要素の次元を指定します。
動的配列を宣言する場合は、かっこだけを指定します。
引数 subscripts の構文は次のとおりです。
[lower To] upper [,[lower To] upper] . . .
引数 lower を省略すると、配列の添字の最小値は Option Base ステートメントによって制御されます。
Option Base ステートメントが記述されていない場合は、添字の最小値は 0 になります。
type 必ず指定します。
要素のデータ型を指定します。
バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ほかのユーザー定義型、オブジェクトの種類のいずれかを指定できます。

Type ステートメントは、モジュール レベルでのみ使用できます。

ユーザー定義型は、その型の変数を宣言して使用します。
つまり、Type ステートメントは型(LongやString等と同様)をユーザーが定義しているということです。

ユーザー定義型は、複数のフィールド(項目)を持つレコードのような使い方が出来ます。

注意点
ユーザー定義型は参照渡しだけで引き渡すことができ、値渡しでは引き渡せません。
ユーザー定義型の変数全体を、直接バリアント型 (Variant) に代入できません。


ユーザー定義型の使い方

通常の変数と同様に、

Dim
Private
Public

で変数宣言します。

その変数宣言のデータ型として
モジュールレベルで宣言してある、ユーザー定義型の名前を指定します。

Type type社員
  番号 As Long
  氏名 As String
  所属 As String
  住所 As String
  電話 As String
End Type

Sub sample()
  Dim 社員 As type社員
  社員.番号 = 1101
  社員.氏名 = "名前"
  ・・・
End Sub

ユーザー定義型の変数を使う時、
ピリオドまで入れると、ユーザー定義型の要素が候補表示されます。

マクロ VBA サンプル画像

ユーザー定義型を自在かつ適切に使えるようになるには、相当の経験が必要になります。

試験対策としては、
Typeステートメントをモジュールレベルで宣言する
ユーザー定義型の変数名と要素名をピリオドでつなぐ
このあたりを把握しておけば大丈夫でしょう。

【業務改善の実務】

静的変数は、特に使う必要はありません。
もちろん使えるなら使っても構いませんが、無理に使うようなものではありません。

オブジェクト変数は必須です。
これは迷い使えるようにならなければなりません。
メソッドの戻り値は、
Setステートメントで変数に代入するか、
Withステートメントで受けるようにVBAを書くと、記述がすっきりして読みやすいVBAコードになります。

動的配列は、マクロを高速化するためには必須になります。
セル範囲を変数に入れて処理できるようになれば、マクロが格段に高速化されます。
大量データを扱うVBAを作成する場合は、絶対に必要になってきますので、ぜひしっかり覚えて下さい。

ユーザー定義型は非常に便利なものですが、
これを適切に使えるようになるには、相応の時間がかかるかもしれません。
しかし、これを使う事のメリットも大きいので、簡単な使い方から徐々に覚えて行ってください。

【本サイト内の関連ページ】

第110回.ユーザー定義型(構造体)Type
・Typeステートメントの構文 ・ユーザー定義型の使い方 ・ユーザー定義型の使用例 ・ユーザー定義型の制限 ・最後に

第111回.静的配列
・配列とは ・静的配列と動的配列 ・配列の宣言 ・多次元配列 ・要素の下限の変更 ・配列について
第112回.動的配列(ReDim)
・ReDimステートメント ・要素数の変更について ・配列について
第113回.配列に関連する関数
・LBound関数とUBound 関数 ・Array関数 ・IsArray 関数 ・Join関数 ・Filter関数 ・Eraseステートメント
第114回.セル範囲⇔配列
・セル範囲⇔配列の基本VBA ・使用例 ・配列およびマクロVBAの高速化に関するページ
第115回.Split関数
・Split関数 ・区切り文字が文字列式内に存在しない場合 ・空文字("")をSplitした場合 ・Split関数の使用例

第52回.オブジェクト変数とSetステートメント
・オブジェクト変数 ・個有のオブジェクト型とは ・Setステートメント ・Setステートメントの使用例 ・WithとSetの使い分け方 ・Setステートメントの実践的な使い方 ・Is演算子によるオブジェクトの比較 ・最後に

配列の使い方について
・配列とは ・1次元の配列 ・2次元の配列 ・3次元以上の配列 ・動的配列 ・動的配列 ・動的配列の要素数の取得 ・配列使用時の注意
VBAの配列まとめ(静的配列、動的配列)
・配列の概念 ・静的配列 ・動的配列 ・セル範囲⇔配列の基本 ・配列で必要となるVBA関数とステートメント ・配列に関する記事の一覧

VBAエキスパート公式テキスト

2019/5/30発売リニューアル版


2019/7/26発売リニューアル版

こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。



同じテーマ「VBAエキスパート対策」の記事

プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
ユーザーフォームとメニューの操作
VBAスタンダード試験対策まとめ


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ