0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VBA】メール送信時のCc欄編集の効率化

Posted at

特定グループへのメール送信時のマクロシートの作成

メール送信時に特定のグループのメンバーのアドレスを、Cc欄に一括で追加するためのマクロシートの作成を行いました。本記事では、マクロシートの作成手順とその使い方について説明します。

作成しようと思ったきっかけ

約1か月周期で、メンバーが加わったり、メンバーが外れるグループに属していました。そのたびにCc欄の編集を手打ちで行っており、「ボタンを押せば一括で編集ができないかな~」と考えたことがきっかけです。

前提

  • Cc欄に自分のアドレスは含まない
  • アドレスの区切りは「,」とする
  • 「ホーム」シートに30人分のアドレスが入るようにする
  • 使いやすさ重視(誰でも使えるようにする)

使用ツール

  • Microsoft Excel
  • VBA (Visual Basic for Applications)

使用したコード

Sub FilterEmailAddresses()
    Dim wsA As Worksheet
    Dim wsB As Worksheet
    Dim lastRowA As Long
    Dim i As Long
    Dim col As Long
    Dim emailList As String
    Dim excludeName As String

    Set wsA = ThisWorkbook.Sheets("アカウント")
    Set wsB = ThisWorkbook.Sheets("ホーム")

    lastRowA = wsA.Cells(wsA.Rows.Count, "A").End(xlUp).Row

    For col = 2 To 31
        excludeName = wsB.Cells(10, col).Value
        If excludeName <> "" Then
            wsB.Cells(11, col).ClearContents

            emailList = ""
            For i = 2 To lastRowA
                If wsA.Cells(i, 1).Value <> excludeName Then
                    If emailList <> "" Then
                        emailList = emailList & ", "
                    End If
                    emailList = emailList & wsA.Cells(i, 2).Value
                End If
            Next i

            wsB.Cells(11, col).Value = emailList

            With wsB.Cells(10, col).Borders
                .LineStyle = xlContinuous
            End With

            With wsB.Cells(11, col).Borders
                .LineStyle = xlContinuous
            End With
        End If
    Next col
End Sub

シートと変数の設定

  • Sub FilterEmailAddresses()FilterEmailAddressesというサブルーチンの開始点
  • End SubFilterEmailAddressesというサブルーチンの終了点
  • FilterEmailAddressesと名前があることで、サブルーチンの実行(ボタンをクリックすれば実行)をすることが可能になる
    Dim wsA As Worksheet
    Dim wsB As Worksheet
    Dim lastRowA As Long
    Dim i As Long
    Dim col As Long
    Dim emailList As String
    Dim excludeName As String
  • DimはVBAで変数を宣言するためのキーワード
  • Dim wsA As Worksheet「アカウント」シートを指す変数
  • Dim wsB As Worksheet「ホーム」シートを指す変数
  • Dim lastRowA As Long「アカウント」シートの最終行を識別する変数
  • Dim i As Longループのカウンタ変数iを長整数型として宣言するためのもの
  • Dim col As Long列番号を格納するための変数colを宣言するためのもの
  • Dim emailList As Stringメールアドレスのリストを格納するための変数emaillistを宣言するためのもの
  • Dim excludeName As String除外する名前を格納するための変数excludeNameを宣言するためのもの

シートの指定

  • Set wsA = ThisWorkbook.Sheets("アカウント")wsAがアカウントシートを指す
  • Set wsB = ThisWorkbook.Sheets("ホーム")wsBがホームシートを指す
  • lastRowA = wsA.Cells(wsA.Rows.Count, "A").End(xlUp).Row「アカウント」シートの最新の最終行を取得することができる

「ホーム」シートの特定の列の各セルに処理を行う

  • For col = 2 To 31B列からAE列までの処理を行うため(つまり30人までアカウントが登録できる)
  • excludeName = wsB.Cells(10, col).Value10行目のセルからフィルタリングに使う名前(excludeName)を取得する
  • If excludeName <> "" Then 10行目のセルに名前が設定されている場合のみ、フィルタリング処理を続行する
  • wsB.Cells(11, col).ClearContentsフィルタリング結果を表示するための11行目のセルを初期化して、前回の結果が残らないようにする

メールアドレスのフィルタリング

  • emailList = ""フィルタリング結果を連結するための文字列を空に初期化する
  • For i = 2 To lastRowA「アカウント」シートの2行目から最終行までをループする
  • If wsA.Cells(i, 1).Value <> excludeName Then「アカウント」シートのA列の値がexcludeNameと異なる場合に処理を行う
  • If emailList <> "" Then emaillistに1つ以上のアドレスが追加されている場合、「,」を追加してアドレスを区切る
  • emailList = emailList & ", "「アカウント」シートのB列の値をemaillistに追加する
  • End If If wsA.Cells(i, 1).Value <> excludeName Thenの条件文の終了を示す
  • Next i For i = 2 To lastRowAのループの次の繰り返しへ進む指示
  • wsB.Cells(11, col).Value = emailListフィルタリング結果を「ホーム」シートの11行目のB列からAE列に出力する

枠線の設定

  With wsB.Cells(10, col).Borders
                .LineStyle = xlContinuous
            End With

            With wsB.Cells(11, col).Borders
                .LineStyle = xlContinuous
            End With

「ホーム」シートの10行目と11行目のセルに対して枠線の設定をする
xlContinuousというラインスタイルの枠線を追加している

終了点

  • End If If excludeName <> "" Thenの終了点で、除外する名前(excludeName)が空でない場合に行うフィルタリングと表示の処理がここで終了する
  • Next col For col = 2 To 31の次の列に進む指示を示し、「ホーム」シートのB列からAE列までの各列に対して処理を繰り返す

マクロ実行

  • 「アカウント」シートに「アカウント名」と「アドレス」を入力
    アカウントシート.png

  • ホームシートの「更新」ボタンをクリックすればマクロが実行され、10行目に入力されたアカウント以外のアドレスが出力される
    ホームシート.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?