ExcelVBAメモ
書籍
業務効率化のため、VBAを書く必要があって悩んでたら(あんま書けない)
こちらの本をおススメしてもらったので購入。今半分くらい。
図が豊富でわかりやすい。
⇒読了20210712
セルのコピー&ペースト
1. セル全体をコピー
セルに設定されている書式も含めセル全体のコピー
Sub Sample2()
Range("A1").Copy Range("C2")
End Sub
2. 値のみコピー
Sub Sample4()
Range("C2") = Range("A1")
End Sub
3. 複数セルをコピー
Sub Sample5()
Range("C1:D5").Value = Range("A1:B5").Value
End Sub
複数セルの値のみコピペがしたかったんだけど
1.しか知らなくて、3.でやっとできた。
ヘルプを読むコツは「すべてを理解しようと思わない」ことです。書いてあるうちの意味の分かるところだけ読んで、意味の分からない部分は飛ばし読みしてください。意味が分からなかったところは、今後VBAを学習していけば、自然と理解できるようになります。
これが一番心に刺さった。
全部理解しないと気が済まなくてすぐ辛くなる。
妥協する所をきめて、少しずつ積み上げていきたい。
SUM関数
使い方
Range(始点セル, 終点セル)
セルA2~最終セルに入っている数値の合計を出す
Sub Sample2()
Range("A2").End(xlDown).Offset(1, 0) = _
"=SUM(" & Range(Range("A2"), Range("A2").End(xlDown)).Address(False, False) & ")"
End Sub
よりメンテナンス性を上げたもの。
対象セルが変わったとき、「Range("A2")」の部分だけ修正すれば良い。
Sub Sample3()
With Range("A2")
.End(xlDown).Offset(1, 0) = _
"=SUM(" & Range(.Address, .End(xlDown)).Address(False, False) & ")"
End With
End Sub
配列を覚えてから、何でも配列に入れてあれこれしがち。
今回は単に数値が入っているセルの合計値が欲しいだけ。
だったらSUMの方がシンプルだと気づき。
配列
静的配列
要素数が決まっている場合に使う配列
Dim 配列名(最大インデックス番号) As 型名
Dim strArry(2) As string
strArry(0) = "VBA"
strArry(1) = "勉強"
strArry(2) = "楽しい"
動的配列
要素数が決まっていない場合に使う配列
Dim 配列名() As 型名
ReDim で動的配列の要素数を変更する。
Dim A() As String
ReDim A(2)
A(0) = "山田"
A(1) = "鈴木"
A(2) = "佐藤"
ReDim A(3)
A(3) = "木村"
MsgBox Join(A)
メッセージボックスの表示は「木村」のみ。
2回目のReDim実行時に、「山田」「鈴木」「佐藤」が削除される。
配列要素を随時追加したい
配列の初期化
配列再定義
配列要素の追加
Outlookのメールを取得したい
- 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
- エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
- エクセルVBAでOutlookの受信メールをワークシートに書き出す方法
ステップ
①メールフォルダにアクセス
GetNamespaceオブジェクトを使う
Outlookのメール予定表連絡先などにアクセスできる
②メールフォルダの操作
③メールの内容を取得してシート書き出し
点在するセルから値を取得したい
セルの値ベタ書きだと後々メンテナンス面倒
VBAでPowerPointを操作したい
Excelで作成した表をPowerPointに貼り付けたい。
PowerPointのオブジェクト構造
PowerPoint Application
|
+- Presentation
|
+- Slide
VBAのオブジェクト構造
操作の対象となるもの
主なオブジェクト
オブジェクト | VBAオブジェクト |
---|---|
アプリケーション | Applicationオブジェクト |
ワークブック | Workbookオブジェクト |
ワークシート | Worksheetオブジェクト |
シート | Sheetオブジェクト |
セル | Cellオブジェクト Rangeオブジェクト |
※書籍から抜粋 |
コレクション
いくつかの同じ種類のオブジェクトをひとまとめにしたもの
主なコレクション
オブジェクト名 | VBAオブジェクト |
---|---|
ブック | Workbooks |
ワークシート | Worksheets |
コレクションの階層構造
Application
|
+- Workbooks
|
+- Worksheets
|
+- Range
オブジェクトを変数に代入
ワークブックを開く
①Workbook型のオブジェクト変数を宣言
②setステートメントで変数とオブジェクトを関連付ける
Dim wb as Workbook
set wb = Workbooks("ブック名")