セルの文字配置

カテゴリー名: [ExcelVBAとOLE 基本概念とセル操作

2016/08/13

今回は、セル内で文字の配置を指定する方法を取り上げます。

横方向(水平方向)の配置を HorizontalAlignment
縦方向(垂直方向)の配置を VerticalAlignment で行います。

△ 関連の Program Page


《このページの目次》


    

1. 概要

 A1セルに何か文字が書かれている場合、

 Range("A1").HorizontalAlignment = xlRight とすれば右詰めになります。
つまり、横方向で見たときに右寄せの状態になります。

 Range("A1").VerticalAlignment = xlBottom とすれば下詰めになります。
つまり、縦方向で見たときに下寄せの状態になります。

    

◇ 配置に関する定数一覧

 配置に関する定数は下のとおり。

 VBScript で使えるように、定数を定義する形で掲げます。

-------- ここから
' 横方向(水平方向)
Const xlGeneral = 1  ' 標準
Const xlLeft = -4131  ' 左詰め
Const xlCenter = -4108  ' 中央揃え
Const xlRight = -4152  ' 右詰め
Const xlFill = 5  ' 繰り返し
Const xlJustify = -4130  ' 両端揃え
Const xlCenterAcrossSelection = 7  ' 選択範囲内で中央
Const xlDistributed = -4117  ' 均等割り付け

' 縦方向(垂直方向)
Const xlTop = -4160  ' 上詰め
Const xlCenter = -4108  ' 中央揃え
Const xlBottom = -4107  ' 下詰め
Const xlJustify = -4130  ' 両端揃え
Const xlDistributed = -4117  ' 均等割り付け
-------- ここまで

 VBAのマクロでは、上の定数定義がなくても、いきなり xlTop などと記述して大丈夫です。

 VBScriptの場合はそういう訳にいかないので、必要な定数をスクリプトの前の方で定義しなければなりません。

目次に戻る


    

2. マクロ

 文字の配置を指定するマクロの例を掲げます。

 第1行目の B1:G1 では、横方向の配置を指定しています。

 第1列目の A2:A7 では、縦方向の配置を指定しています。

 最後に、セルの幅と高さを拡げています。

    

-------- ここから
Sub Macro1()
    Range("B1").Value = "標準"
    Range("B1").HorizontalAlignment = xlGeneral
    Range("C1").Value = "左詰"
    Range("C1").HorizontalAlignment = xlLeft
    Range("D1").Value = "中央"
    Range("D1").HorizontalAlignment = xlCenter
    Range("E1").Value = "右詰"
    Range("E1").HorizontalAlignment = xlRight
    Range("F1").Value = "両端"
    Range("F1").HorizontalAlignment = xlJustify
    Range("G1").Value = "均等"
    Range("G1").HorizontalAlignment = xlDistributed

    Range("A2").Value = "標準"
    Range("A2").VerticalAlignment = xlGeneral
    Range("A3").Value = "上詰"
    Range("A3").VerticalAlignment = xlTop
    Range("A4").Value = "中央"
    Range("A4").VerticalAlignment = xlCenter
    Range("A5").Value = "下詰"
    Range("A5").VerticalAlignment = xlBottom
    Range("A6").Value = "両端"
    Range("A6").VerticalAlignment = xlJustify
    Range("A7").Value = "均等"
    Range("A7").VerticalAlignment = xlDistributed

    With Range("A1:G7")
        .ColumnWidth = 20  ' セルの幅を半角20文字分に
        .RowHeight = 33  ' セルの高さを33ポイントに
    End With
End Sub
-------- ここまで

目次に戻る


    

3. OLEを利用するVBScript

 先のマクロと同じ操作を行うVBScriptを掲げます。

 今回、定数がいろいろ出てくるので、定数の定義を別ファイル constants_xl.txt に書いておいて、それを読み込むようにします。

 読み込むためのサブプロシージャ Include を最後の方で定義しています。

    

△ vovXL09.vbs

 1Option Explicit
 2Dim FSO, BookPath
 3Dim EXLapp, WBobj
 4Include "constants_xl.txt"
 5
 6Set FSO = CreateObject("Scripting.FileSystemObject")
 7BookPath = FSO.GetAbsolutePathName("Book1.xls")
 8If (FSO.FileExists(BookPath) = True) Then FSO.DeleteFile(BookPath)
 9Set EXLapp = CreateObject("Excel.Application")  ' Excelの起動
10EXLapp.Visible = True  ' Excelを見える状態に
11Set WBobj = EXLapp.Workbooks.Add()  ' Workbookの新規作成
12With WBobj.ActiveSheet
13    .Range("B1").Value = "標準"
14    .Range("B1").HorizontalAlignment = xlGeneral
15    .Range("C1").Value = "左詰"
16    .Range("C1").HorizontalAlignment = xlLeft
17    .Range("D1").Value = "中央"
18    .Range("D1").HorizontalAlignment = xlCenter
19    .Range("E1").Value = "右詰"
20    .Range("E1").HorizontalAlignment = xlRight
21    .Range("F1").Value = "両端"
22    .Range("F1").HorizontalAlignment = xlJustify
23    .Range("G1").Value = "均等"
24    .Range("G1").HorizontalAlignment = xlDistributed
25
26    .Range("A2").Value = "上詰"
27    .Range("A2").VerticalAlignment = xlTop
28    .Range("A3").Value = "中央"
29    .Range("A3").VerticalAlignment = xlCenter
30    .Range("A4").Value = "下詰"
31    .Range("A4").VerticalAlignment = xlBottom
32    .Range("A5").Value = "両端"
33    .Range("A5").VerticalAlignment = xlJustify
34    .Range("A6").Value = "均等"
35    .Range("A6").VerticalAlignment = xlDistributed
36
37    With .Range("A1:G6")
38        .ColumnWidth = 20  ' セルの幅を半角20文字分に
39        .RowHeight = 33  ' セルの高さを33ポイントに
40    End With
41End With
42WBobj.SaveAs BookPath, xlWorkbookNormal
43EXLapp.quit
44
45Sub Include(ByVal FileName)
46    Dim FSO, FileObj, MyStr
47    Set FSO = CreateObject("Scripting.FileSystemObject") 
48    Set FileObj = FSO.OpenTextFile(FSO.GetAbsolutePathName(FileName))
49    MyStr = FileObj.ReadAll()
50    FileObj.Close
51    Set FSO = Nothing
52    Set FileObj = Nothing
53    ExecuteGlobal MyStr
54End Sub

    

 文字の配置については、マクロとほぼ同様の記述なので説明を加える必要はないと思います。

 定数を定義したファイル constants_xl.txt には2031行の定義が書かれています。

 Excel2010で定義されている定数で、xlで始まるものは全部書かれているはずです。

 別のバージョンのExcelだと定義に異なるところがあるかもしれませんが、概ね共通しているものと思います。

 サブプロシージャの Include については次の項で述べます。

目次に戻る


    

4. サブプロシージャのIncludeとExecuteGlobal

 多くのプログラミング言語では、別のファイルに書かれたプログラムを取り込んで利用できるようになっています。それができないと、少しプログラムの規模が大きくなってくると対応困難です。

 しかし、残念ながら VBScript には「別ファイルを取り込む」機能が備わっていないようです。

 ただ、プログラムが記述された文字列を渡してやると、それを実行する関数があります。ExecuteGlobalがそれです。

 そこで、ファイルに書かれている内容を文字列に代入して、ExecuteGlobal に引き渡してやれば、類似の機能が実現できます。

 それをおこなうのが Include です。改めて下に掲げます。

-------- ここから
Sub Include(ByVal FileName)
    Dim FSO, FileObj, MyStr
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    Set FileObj = FSO.OpenTextFile(FSO.GetAbsolutePathName(FileName))
    MyStr = FileObj.ReadAll()
    FileObj.Close
    Set FSO = Nothing
    Set FileObj = Nothing
    ExecuteGlobal MyStr
End Sub
-------- ここまで

    

 上は、VBScriptで悩んだことメモ - Qiitaで紹介されているものを少しだけ変更したものです。

 今回は定数の定義を取り込むのに使いましたが、よく使うサブプロシージャや関数を別のファイルに書いておいて、必要になったら取り込むというのが一般的かもしれません。

    

 なお、文字列に書かれているものをプログラムとして実行する関数として、
ExecuteGlobal のほかに Execute とか Eval というのもあります。

 それぞれ仕様に違いがあるようです。

〜 以上 〜