Open8

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実行時に、「山田」「鈴木」「佐藤」が削除される。

配列要素を随時追加したい

https://zukucode.com/2019/08/vba-array-loop.html

配列の初期化
配列再定義
配列要素の追加

Outlookのメールを取得したい

ステップ

①メールフォルダにアクセス
GetNamespaceオブジェクトを使う
Outlookのメール予定表連絡先などにアクセスできる

②メールフォルダの操作
③メールの内容を取得してシート書き出し

点在するセルから値を取得したい

セルの値ベタ書きだと後々メンテナンス面倒

VBAでPowerPointを操作したい

Excelで作成した表をPowerPointに貼り付けたい。

https://tonari-it.com/excel-vba-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("ブック名")
ログインするとコメントできます