見出し画像

第28回 VBA会 登壇者 Takushi

VBAの悩みはVBAerに聞け
開催日時:2021年12月3日 20時~
登壇者 :Takushi@VBAとGAS勉強中
テーマ :CollectionとErrオブジェクト

画像1

今回はノンプロ研所属のTakushiさん。
VBAでは中上級者が使うCollectionクラスとErrオブジェクトに関する講談でーす。

画像2

画像3

(youtubeと一人車中泊旅行が趣味とな・・・。)

画像4

(ノンプロ件中級講座の講師か・・なんかすごそう。)

画像5

第4回Excelライブラリで魂が抜けた経験あり。
(だから受講者目線で「スッキリする講義を」ってモチベなのね(`・ω・´)b)

画像6

(これでワンステップ追加、全7回をスムーズに理解できるように)

画像7

画像8

OKは貰えたものの期限もないので進まない・・。

画像9

ということでVBA会登壇で自分を追い込んだ!
(つまり踏み台かww)

画像10

(真っ当な目標です!)

画像11

一気に作った資料で時間がどんくらいかかるかわからないですが・・
(講義の練習でもあるのか。よきよき(^^)

(こっから本番)

画像12

(まずは参照設定の概要説明。)

画像13

(続いてオブジェクトブラウザーの確認)

画像14

(オブジェクトブラウザーでVBAを選択するとさっきのリストになる)

画像15

(「ほぼ全てがグローバルメンバー」なのか・・・
 例外は、CollectionとErrオブジェクトだけとな・・・。ほほぉぉ)

画像16

画像17

例えば、Left関数はStringsのメンバーであると共に、グローバルのメンバーでもあるので、Leftと記述するだけで使える。

画像18

画像19

(なるほど・・深く考えたことなかったわ)

画像20

例えばDateやyearも同じ。

画像21

グローバルで定義されたSubプロシージャーは「ステートメント」と呼ばれます。例えばKillステートメントとか。

画像22

画像23

(定数はConstで宣言。省略するとPrivateになる)


ここからサンプル作成

画像24

画像25

画像26

ユーザ定義の定数もオブジェクトブラウザで確認可能。
「VBAProject」で表示される。
Public Constはグローバルレベル。つまりプロジェクト内の全モジュールから利用できる。
(グローバルとPublicってそういうことね)

画像27

(つづいて列挙型=Enum)

画像28

(Enum教徒 発見!)

画像29

画像30

画像31

画像32

(Enumも同様にPublicはグローバル)

画像33

Enumメンバーは、別枠で表示される。

画像34

Enumは数値記載を省略すると直前数値から1足した値になる。

画像36

画像36

つずいてCollection(綴りまちがってます(^^;

画像37

画像38

(インデックスとキーを両方持っている構造・・・)

画像39

(なるほど・・・)

画像40

画像41

(クラス、インスタンスとは・・・を熱く語る時間)

画像42

オブジェクトブラウザで見るとこんな感じ。

画像43

(コードはコピッペ)

画像44

画像45

画像46

Collectionはインデックスでもキーでも要素を抽出できる。

画像47

画像48

「既定のメンバー」とは、省略した場合に使われるメンバー。宝石マーク。

画像49

画像50

(おっ!オブジェクトを格納するのか・・。難易度上がったぞ(`・ω・´)b)

画像51

画像52

(コードはコピッペ)

画像53

(コードはコピッペ)

画像54

(もうちょっと高度なサンプル)

画像55

myCollectionには、p As Pesernオブジェクトが格納される。

画像56

加えて、Enumも活用。

画像57


さらに高度なコードへ

画像58

画像59

画像60

(コードはコピッペ)

画像61

画像62

Initializeがあるから、宣言するだけでデータ読み込み完了しておる(`・ω・´)b

画像63

(コードはコピッペ)

画像64

(Personsクラスにコピッペ)

画像65

(コードはコピッペ)

画像66

Personsクラスの.Itemは、中身がCollection.ItemなのでインデックスでもキーでもOK。

画像67

Itemの戻り値はPersonクラスのため、インテリセンスも有効。

つづいて・・・

画像68

(なに?デフォルトプロパティ化するだと!?)

画像69

(へぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇ)

画像70

(すげぇぇぇ。宝石マークになってるぅぅぅ)

画像71

(うごく!こいつ動くぞ!)

画像72

(ここでコーヒーブレイク)

画像73

つづいてErrオブジェクト

画像74

(ふむふむ)

画像75

これは構文間違いなのでコンパイルエラー。

画像76

(組み込みオブジェクト・・・Newでインスタンス化する必要無し)

画像77

Numberプロパティが既定メンバー。

画像78

画像79

ErrオブジェクトはInformationモジュールのメンバー

画像80

画像81

(ほんとだ。既定メンバーだね(`・ω・´)b)

画像82

画像83

(コードはコピッペ)

ついでにエラー処理の追加説明。

画像85

これがあると、実行時エラーが発生しても無視して次の行を実行する。
これを利用してExistsと同様の動作をするExists2を作る。

画像86

(On Error GoTo 0で再び実行時エラーが発生するようになる)

画像87

(こいつ、動くぞ!)

画像88

(ここで時間切れ)

いいなと思ったら応援しよう!