Office Space : Excel スプレッドシート内のテキストを折り返す
Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
Excel スプレッドシート内のテキストを折り返す
Excel を使用したことがある方であれば、間違いなく列幅の切り詰めという厄介な問題に直面したことがあるはずです。次に示すサンプル スプレッドシートでは、セル B1 に実際は「This is the text that we want to wrap in column B.」というテキストが入っています。ところが、テキスト全体を表示するには列の幅が狭いため、テキストの表示が途切れています。
この問題を解決し、セル B1 の内容全体を表示するには、列の幅を拡大するという方法があります。この方法も有効ですが、セル B1 に大量のテキストが入っている場合、スプレッドシートには列 B しか表示されないことになりかねません。代替策として考えられるのは、セル内のテキストを折り返すことです。テキストの折り返しを有効にすると、サンプル スプレッドシートは次のようになります。
うまくいったと思いませんか。ところで、スクリプトによってテキストの折り返しを有効にすることはできるのでしょうか。
もちろんできます。前の図に示したスプレッドシートを作成するスクリプトを次に示します。
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
Set objRange = objExcel.Range("B1").EntireColumn
objRange.WrapText = TRUE
objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "This is the text that we want to wrap in column B."
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"
このスクリプトでは、まず Excel.Application オブジェクトのインスタンスを作成し、Visible プロパティを True に設定しています (これによって、操作の状況を画面上で確認することができます)。次に、新しいブックとワークシートを追加します。
注目すべき部分はその後に続くコードです。
Set objRange = objExcel.Range("B1").EntireColumn
objRange.WrapText = TRUE
ここでは、Range オブジェクトのインスタンスを作成しています。そのために、セル B1 を選択し、EntireColumn プロパティを使用して列 B 全体を範囲として指定します。
ここで、WrapText プロパティを True に設定します。範囲が列 B のすべてのセルにまたがっているため、列 B のすべてのセルでテキストの折り返しを有効にしたことになります。このスクリプトの最後の 4 行は、テキストの折り返しの効果を確認できるように、セル A1 ~ A4 にテキストを入力しているだけです。
テキストの折り返しを有効にするのと同時に行った方がよい設定の 1 つとして、すべてのセルを対象とした縦位置の変更があります。既定では、テキストは下詰めで表示されます。テキストを上詰めで表示するには、VerticalAlignment プロパティの値を -4160 に設定します (まったくもって奇妙な値です)。次に示すスクリプトは、UsedRange プロパティを使用してワークシート内のデータが挿入された部分を選択しています。データが挿入されている部分を選択したら、その範囲のすべてのセルについて、縦位置を [上詰め] に設定します。
Const xlVAlignTop = -4160
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
Set objRange = objExcel.Range("B1").EntireColumn
objRange.WrapText = TRUE
objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "This is the text that we want to wrap in column B."
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"
Set objRange2 = objWorksheet.UsedRange
objRange2.VerticalAlignment = xlVAlignTop
上記のように設定を変更すると、サンプル スプレッドシートは次のようになります。