Power Automate Desktop VBScriptでExcelを操作する
凝ったことをしないならVBScript?
Excelの書式設定を少し整えたい。でもVBA使ってマクロブックで保存するほどでもないし、
かといってショートカットキーやマウスカチカチするのもちょっとな……。
ということがあったのでVBScript使ってみました。
使い方
公式サイトに上がっているサンプルコードが参考になります。
'Opens the Excel file'
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("%ExcelFile%")
objExcel.Application.Visible = True
'Selects the specified sheet'
Set objSheet = objWorkbook.Sheets("SheetName")
'Autofits the columns of the sheet'S
for col=1 to 19
objSheet.columns(col).AutoFit()
next
'Saves and closes the Excel file'
objWorkbook.Save
objWorkbook.Close SaveChanges = True
VBSがVBAと違うのは、Excelアプリケーションを開いて閉じる処理が必要ってところですかね。
…………こんな説明でいいんでしょうか。説明へたくそですよね。詳しくは公式サイトをご覧ください。
書式設定をする
今回は、データテーブルを新規シートに出力したあとに
罫線の追加、見出しを中央揃え、セルの塗りつぶしの3つを行いたいと思います。
最終的にこのような見た目にしたい。
Column1 | Column2 | Column3 |
---|---|---|
データ | データ | データ |
データ | データ | データ |
というわけで、実際に操作しながらマクロを記録してみます。
コード全体
Sub Macro1()
'
' Macro1 Macro
'
'
Selection.CurrentRegion.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A1:C1").Select
Range("C1").Activate
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
End Sub
Selection.CurrentRegion.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
あほみたいに長いコードが出てきました。ここから不要な部分を削除して短く…していこうかと思ったのですが、面倒くさいので最初から解答を見ちゃいます。
以下のサイトが参考になります。
ちなみにですが、このサイトをご存じでない方がいたら、VBAやExcel全般についてめちゃくちゃ詳しく説明されているのでぜひ見に行ってみることをおすすめします。[1]
単純に格子状に罫線を引くだけならこれでOK
Sub Macro5()
Range("B2:C5").Borders.LineStyle = True
End Sub
ということで、これを参考にしてVBScriptのコードを作っていきます。
Set dataAll = objSheet.UsedRange
dataAll.Borders.LineStyle = True
できました。UsedRangeで使用済みセル範囲を取得してdataAllに代入。
dataAllに格子罫線を引いています。
UsedRangeについて知りたい方は、この記事など参考になります。
見出し
記録されたコード。
Range("A1:C1").Select
Range("C1").Activate
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
冒頭のRangeでセル範囲を固定させるのも
ここを変数にして使うのもいまいちなので
別の方法で見出しを取得したいと思います。Resizeを使います。
表全体がわかっているところから見出し部分を取得するなら、
表全体.Resize(1)
とすると、表の1行目だけ取得できます。
Set header = dataAll.Resize(1)
With header
.HorizontalAlignment = xlCenter
.Interior.ThemeColor = xlThemeColorAccent6
.Interior.TintAndShade = 0.799981688894314
End With
という感じで作ってみましたが、実はこれ、VBScriptでは動きません。
VBScriptでは、xl定数は使えないので数値に置き換える必要があります。
置き換えた結果がこちら。
Set header = dataAll.Resize(1)
With header
.HorizontalAlignment = -4108
.Interior.ThemeColor = 10
.Interior.TintAndShade = 0.8
End With
これで動きます。……やっぱり数値だとわかりにくい……。
こういう記事もありました。これは良い。定数を自分で定義しちゃうのもありですよね。
Const xlCenter = -4108
Const xlThemeColorAccent6 = 10
Set header = dataAll.Resize(1)
With header
.HorizontalAlignment = xlCenter
.Interior.ThemeColor = xlThemeColorAccent6
.Interior.TintAndShade = 0.8
End With
'Opens the Excel file'
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("%ExcelFile%")
objExcel.Application.Visible = True
'Selects the specified sheet'
Set objSheet = objWorkbook.Sheets("%SheetName%")
Set dataAll = objSheet.UsedRange
dataAll.Borders.LineStyle = True
Const xlCenter = -4108
Const xlThemeColorAccent6 = 10
Set header = dataAll.Resize(1)
With header
.HorizontalAlignment = xlCenter
.Interior.ThemeColor = xlThemeColorAccent6
.Interior.TintAndShade = 0.8
End With
'Saves and closes the Excel file'
objWorkbook.Save
objWorkbook.Close SaveChanges = True
VBScriptを使ったその他のサンプル
あとがき
PADじゃなくてVBA? VBSの記事になっちゃいました。
サンプルの列を自動調整する方法ですけど、アクションで用意されているので実際に使う場合はそれ使ったほうが良いと思います。
-
VBAエキスパート 公式テキストの執筆もされているとてもすごいお方です。 ↩︎
Discussion