Office関連

Slackのカスタム絵文字を一括作成するVBAマクロ

在宅勤務で使うビジネスチャットサービスとして注目されている「Slack」、私の会社でも導入しています。

Slackにはカスタム絵文字機能があり、私の会社でも「絵文字ジェネレーター」で作成した、

といった絵文字を使用しています。

総務という立場上、社内Slackの管理も行っているのですが、先日ある社員から「自分の名前の絵文字が欲しいんだけどー」と、相談を受けました。

なるほど。
たしかに「田中」や「佐藤」といった絵文字があると便利かもしれません。

とはいえ、絵文字ジェネレーターで個人情報となる名前で絵文字を作成するわけにはいきませんし、そもそも全従業員分の絵文字を一つずつ手作業で作成するのも大変です。

そこで、Excelの従業員リストを元に、Slackのカスタム絵文字を一括で作成するマクロを書くことにしました。

処理内容

マクロの大まかな処理内容は下記の通りです。

  1. カスタム絵文字の元となる画像(シェイプ)を作成
  2. クリップボードにコピー
  3. 画像として保存

クリップボードにコピーされた画像をファイルとして保存する際に使うのが、前回の記事(下記)で紹介したツール(CB2IMG)です。

VBAですべての処理を書けないことはないのですが、コードが複雑になる上に、透過色や画質にまでこだわり出すと非常に面倒くさいことになるので、この部分は無理せず外に出すことにしました。

“すべての処理をVBAで片づけない”、実運用上ではそんな視点も大事だと思います。

絵文字用シェイプを作成するVBAコード

まずは核となる、絵文字用シェイプを作成するコードです。
枠線や文字配置等いろいろと指定していますが、ポイントはワードアートの「変形」にある「四角」です。
これを指定することで、枠いっぱいに文字が広がり、カスタム絵文字にしたときに見やすくなります。

Private Function InsertShape(ByVal sht As Excel.Worksheet, _
                             ByVal shpText As String, _
                             Optional ByVal shpFontName As String = "MS UI Gothic", _
                             Optional ByVal shpForeColor As Long = &H0&, _
                             Optional ByVal shpBackColor As Long = &HFFFFFF) As Excel.Shape
'カスタム絵文字の元となるイメージ作成
'
' sht:イメージ作成先のシート
' shpText:文字列
' shpFontName:フォント
' shpForeColor:文字色
' shpBackColor:背景色
'

  Dim shp As Excel.Shape
  
  Set shp = sht.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 0, 0)
  With shp
    .TextEffect.PresetShape = msoTextEffectShapePlainText
    .ScaleHeight 1, msoFalse, msoScaleFromTopLeft
    .ScaleWidth 1, msoFalse, msoScaleFromTopLeft
    .Height = 94.5 '出力後のサイズが大体 128 x 128ピクセル となるように調整
    .Width = 94.8
    .Line.Visible = msoFalse
    With .Fill
      '.Visible = msoFalse
      .Visible = msoTrue
      .ForeColor.RGB = shpBackColor
      .Transparency = 0
      .Solid
    End With
    With .TextFrame2
      .VerticalAnchor = msoAnchorMiddle
      .HorizontalAnchor = msoAnchorCenter
      .WordArtformat = msoTextEffect1
      With .TextRange
        .ParagraphFormat.Alignment = msoAlignCenter
        .ParagraphFormat.LineRuleWithin = msoFalse
        .ParagraphFormat.SpaceWithin = 10 '段落の間隔10pt
        If Len(shpText) > 2 Then
          .Text = Mid(shpText, 1, 2) & vbNewLine & Mid(shpText, 3) '3文字目以降は改行
        Else
          .Text = shpText
        End If
      End With
      With .TextRange.Font
        '.Line.Visible = msoFalse
        .Line.Transparency = 1
        .Shadow.Visible = msoFalse
        .Bold = msoTrue
        .Fill.ForeColor.RGB = shpForeColor
        .Name = shpFontName
        .NameAscii = shpFontName
        .NameFarEast = shpFontName
        .NameOther = shpFontName
      End With
    End With
  End With
  Set InsertShape = shp
End Function

使い方は下記のようになります。

Public Sub Sample()
  Dim shp As Excel.Shape
  Const cb2img As String = "C:\wk\CB2IMG\CB2IMG.exe" 'CB2IMGのパス
  
  '元画像作成
  Set shp = InsertShape(ActiveSheet, _
                        "齋藤花子", _
                        "UD Digi Kyokasho N-B", _
                        &HFFFFFF, _
                        &H57972B)
  'クリップボードにコピー
  shp.Copy
  'CB2IMGを実行してクリップボードにコピーされた画像をファイルとして保存
  Shell """" & cb2img & """ " & """C:\wk\CB2IMG\img\TEST.png""", vbNormalFocus
End Sub

「InsertShape」で作成したシェイプをクリップボードにコピーし、その後「CB2IMG」を実行してファイルとして保存しています。

Slackのカスタム絵文字を一括作成するVBAコード

あとは従業員リストを用意して繰り返し実行するだけです。
テストには下図のような、「疑似個人情報データ生成サービス」で生成したダミーデータを使うことにしました。

Public Sub BatchCreateEmoji()
'Slackのカスタム絵文字一括作成
  Dim sht As Excel.Worksheet
  Dim shp As Excel.Shape
  Dim wsh As Object
  Dim i As Long
  Const cb2img As String = "C:\wk\CB2IMG\CB2IMG.exe" 'CB2IMGのパス
  Const savefolder As String = "C:\wk\CB2IMG\img\" '画像保存先
  
  Set wsh = CreateObject("Wscript.Shell")
  Set sht = ActiveSheet
  With sht
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      Set shp = InsertShape(sht, .Cells(i, 4).Value, , &H1400E5)
      DoEvents
      shp.Copy
       wsh.Run """" & cb2img & """ " & """" & savefolder & "name-" & .Cells(i, 5).Value & .Cells(i, 6).Value & ".png""", 0, True 'コマンド実行&処理待ち
      shp.Delete
    Next
  End With
  MsgBox "処理が終了しました。", vbSystemModal + vbInformation
End Sub

上記コードでは、CB2IMGの終了待ちを行うため、WshShell.Runメソッドを使用しています。
(処理中にSleepを挟んだ方が安定するかもしれません。)

実際にSlackで登録して使ったのが下図です。
フォントや文字色を調整すれば、もっと見やすくなるかもしれません。

画像が用意できたら後はアップするだけです。
Neutral Face Emoji Tools」を使えば、一括で登録できるのだとか。
(すみません。私は使ったことがないです・・・😅)

また、今回はExcelを使いましたが、PowerPointだとシェイプを直接保存できるExportメソッドが用意されているので、外部ツールを利用することなく処理できるかもしれません🤔

以上のように、Excelのオートシェイプを使ってSlackのカスタム絵文字を作成するマクロを書いてみました。
豊富に用意されている文字装飾効果を簡単に活かせるのがOfficeの強みですね!✨
カスタム絵文字作りにExcelやPowerPointを使う、意外とアリだと思います😁

クリップボードにある画像をファイルとして保存するC#コード前のページ

Office Scripts機能によってWeb版Excelで操作の記録ができるようになりました。次のページ

関連記事

  1. Office関連

    代理人アクセスによって予定を追加するOutlookマクロ

    先日久々にmougの質問に回答しました。マクロを使って、Exc…

  2. Excel

    VBAでTTSエンジンの各種情報を列挙する

    今回はTTSエンジンの各種情報を列挙するマクロを紹介します。Mic…

  3. Office関連

    「入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術」レビュー

    久しぶりにVBA参考書籍のレビューです。今回は沢内晴彦氏が執筆され…

  4. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  5. Office関連

    [雑感]Office 365 Soloに向く人、向かない人

    ここ一週間ほどOffice 365 Soloを触ってみて、ある程度のこ…

  6. Office関連

    [PowerShell]Word文書の透かし文字を変更するスクリプト

    MSDNフォーラムに「PowerShellを使って、Word文書の透か…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP