Open8

ExcelVBAメモ

Eri AsaEri Asa

セルのコピー&ペースト

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を学習していけば、自然と理解できるようになります。

これが一番心に刺さった。
全部理解しないと気が済まなくてすぐ辛くなる。
妥協する所をきめて、少しずつ積み上げていきたい。

Eri AsaEri Asa

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の方がシンプルだと気づき。

Eri AsaEri Asa

配列

静的配列

要素数が決まっている場合に使う配列

リンク先抜粋
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

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

Eri AsaEri Asa

Outlookのメールを取得したい

ステップ

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

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

Eri AsaEri Asa

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

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

Eri AsaEri Asa

VBAのオブジェクト構造

操作の対象となるもの

主なオブジェクト

オブジェクト VBAオブジェクト
アプリケーション Applicationオブジェクト
ワークブック Workbookオブジェクト
ワークシート Worksheetオブジェクト
シート Sheetオブジェクト
セル Cellオブジェクト
Rangeオブジェクト
※書籍から抜粋

コレクション

いくつかの同じ種類のオブジェクトをひとまとめにしたもの

主なコレクション

オブジェクト名 VBAオブジェクト
ブック Workbooks
ワークシート Worksheets

コレクションの階層構造

リンク先抜粋
Application
  |
  +- Workbooks
       |
       +- Worksheets
            |
            +- Range

オブジェクトを変数に代入

ワークブックを開く
①Workbook型のオブジェクト変数を宣言
②setステートメントで変数とオブジェクトを関連付ける

Dim wb as Workbook
set wb = Workbooks("ブック名")