PerlでExcelマクロを作る


(Nothing’s Carved In Stone 「Spirit Inspiration」)
アニメ『絶園のテンペスト』(2012)
上の動画はこのアニメのOPです。カッコよくて仕方がない。
アニメの方は、続きが気になって仕方がない。最後まで見ないと勿体ない。面白くて仕方がない。

さて、前回に引き続き、急に面白くなって仕方がなくなったExcel。条件付き書式をマクロで追加するという、大変、非効率的ことなのですが、そして仕事では絶対使わないテクニックなのですが、面白いのでもう少しやってみようかと思います。

今回はsysvbannerを使って、Excelのセル位置を決めて、数字を入力したら、banner数字が現れるような条件付き書式を作るマクロを作ります。

前回同様、マクロ記録で、Macro1を生成します。どのようにキー操作をしたのかは、マクロを見ればわかるので、省略します。

Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A$1=0"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

次に、前回同様、置換して、test関数を追加します。

Sub test()
    条件付き書式 Cells(1,2),"=$A$1=1"
End sub
Sub 条件付き書式(セル,条件)
    セル.FormatConditions.Add Type:=xlExpression, Formula1:=条件
    セル.FormatConditions(セル.FormatConditions.Count).SetFirstPriority
    With セル.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    セル.FormatConditions(1).StopIfTrue = False
End Sub

このあたりで一回、このマクロが動くかどうか試しておいた方がよいでしょう。
新規Excelを起動して、 A1に1を入力し、セルB1が赤色になればOKです。

上手くうごいたら、次はlinux。bannerコマンドを動かします。

takk@deb9:~$ banner `seq 0 9`
  ###
 #   #
# #   #
#  #  #
#   # #
 #   #
  ###

   #
  ##
 # #
   #
   #
   #
 #####

 #####
#     #
      #
 #####
#
#
#######

~省略~

 #####
#     #
#     #
 ######
      #
#     #
 #####

takk@deb9:~$ 

これをPerlで加工してVBA用のマクロを作成することにします。
Perlのスクリプトです。

takk@deb9:~$ cat -n excel.pl
     1  $y=0;
     2  $n=1;
     3  while(<>){
     4    chomp;
     5    $y++;
     6    $_=sprintf("%-7s",$_);
     7    @a=split //,$_;
     8    $x=0;
     9    foreach(@a){
    10      $x++;
    11      print "条件付き書式 Cells($y+1,$x+2), \"=\$A\$1=$n\"\n" if /#/;
    12    }
    13    if($y==8){$n++;$y=0}
    14  }
takk@deb9:~$

bannerコマンドと組み合わせて使うとこのように多量のソースコードが生成されます。

takk@deb9:~$ banner `seq 0 9` | perl excel.pl
条件付き書式 Cells(1+1,3+2), "=$A$1=1"
条件付き書式 Cells(1+1,4+2), "=$A$1=1"
条件付き書式 Cells(1+1,5+2), "=$A$1=1"
条件付き書式 Cells(2+1,2+2), "=$A$1=1"

~省略~

条件付き書式 Cells(7+1,4+2), "=$A$1=10"
条件付き書式 Cells(7+1,5+2), "=$A$1=10"
条件付き書式 Cells(7+1,6+2), "=$A$1=10"
takk@deb9:~$ 

これをVBAマクロとして実行すれば、bannerに合わせた条件付き書式が設定されます。

但し、1が0で10が9なので、計算式を一つ挟まないと数字がずれて表示されます。このように数式を使って調節すればよいです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA