【簡単Excelマクロ・VBA】セルの書式設定|文字列、数値、日付、時間、通貨、色、罫線など|セルの基本操作 #006
いつもありがとうございます。
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
本稿では、セルの基本操作に焦点を当て、セルの書式設定のうち「文字列、数値、日付、時間、通貨、色、罫線」について解説いたします。
VBAで仕事量は半分に、成果は2倍にしていきましょう。初心者の方でも理解しやすいように、わかりやすく解説していきます。ぜひ、ご覧ください。
また、関連する姉妹記事もご用意しております。もしよろしければ、合わせてご覧ください。
姉妹記事
ことばの意味
- セル
ワークシートのひとつひとつのマス目のことです。 - ノンプログラマー
プログラミングを主な仕事にしていない人たちのことです。 - マクロ
VBAを使って作成される「機能」のことです。 - VBA
Visusal Basic for Application の略で、プログラミング言語のことです。
関連記事
VBAにおける「セルの基本操作」の全体像
マクロを作成するにあたり、セルの操作は何かと必要になります。セルの基本操作の全体像は以下の記事で解説しております。
本稿では、セルの基本操作に焦点を当て、セルの書式設定のうち「文字列、数値、日付、時間、通貨、色、罫線」について解説いたします。
VBAで「セルの書式設定」を行う方法
セルの書式設定には、代表的なものとして以下のようなものがあります。
- 文字列
- 数値
- 日付
- 時間
- 通貨
- 色
- 罫線
これらについて、順に解説していきます。
文字列
セルの書式を「文字列」に設定するには、以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "@"
このように、Range オブジェクトの NumberFormatプロパティ に "@" を指定することで、文字列とすることができます。
マクロ実行結果では、数値型の「100」が、文字列の「100」になっているのが分かります。値が左寄せになっているのが、文字列型になった証拠です。
ことばの意味
- オブジェクト
操作する対象のことです。 - Rangeオブジェクト
セルやセルの範囲を操作するためのオブジェクトです。1つのセルから複数のセルにまたがる範囲までを指定でき、指定された範囲に対してデータの入力、書式の変更、値の取得などを行います。 - プロパティ
オブジェクトの属性のことです。オブジェクトの状態を制御したり、情報を取得したりするために使用されます。
数値
標準的な数値
セルの書式設定を「数値」にするには、以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "0.00_ "
ここで ”0.00_ ” の右端にはアンダーバーと半角スペースが記述されています。このアンダーバー("_")は、この後に続く文字の幅の分だけ余白を入れる機能を持っています。
この場合には、アンダーバーの後に半角スペース(" ")が記述されていますので、半角スペース分の余白を入れて表示されます。この余白を入れたスタイルがExcelで良くみるスタイルです。
"0.00_ " の小数点以下のゼロの数は、小数点以下の桁数を表します。上記の例では小数点以下の桁数が2、つまり小数点第二位までを表示します。
小数点以下1桁=小数点第一位まで表示したい場合は "0.0_ "、小数点以下3桁=小数点第三位まで表示したい場合は "0.000_ " と記述します。
小数点以下の桁がゼロ、つまり整数の場合は "0_ "と記述します。
3桁区切り
扱う数値が大きくなってくると、3桁区切りを表示させたくなる場合があるかと思います。3桁区切りは、以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "#,##0_ "
"#,##0_" は、千の位(3桁毎)で区切る指示です。”#,##0” が 千の位を表します。一の位だけ「0」で、十の位以上は「#」で表しています。
# は、必要に応じて数値を表示するためのプレースホルダーです。例えば数値が「1000」であれば「1,000」と表示しますが、「100」であれば千の位は表示する必要が無いので「0,100」ではなく、単に「100」と表示します。
プレースホルダーとは、後からインプットされる数値を表示するために確保する仮の場所のことです。確保しておいた仮の場所に表示するものがなければ、何も表示しません。
これを「#」ではなく「0」を使い "0,000_ " と記述すると、数値が「1000」の場合は「1,000」と表示されますが、「100」の場合は「0,100」と不自然な表示がされてしまいます。「0」を使うと必要な場合のみ表示する仮の場所ではく、実態が無くとも表示される場所として確保されてしまいます。
数値がマイナスの場合に赤字にする
数値がマイナスの場合に、赤文字で表示するには以下のように記述します。"0_ ;[赤]-0_ " のセミコロン(";")の前側がプラスの場合、後ろ側がマイナスの場合の表示の指示です。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "0_ ;[red]-0_ "
パーセンテージ形式
数値をパーセンテージ形式で表示するには以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "0%"
”0%” のように、 0 の後に% を付記することでパーセンテージ表示になります。
小数点以下の桁数を指定する場合は、以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "0.00%"
この場合は、小数点以下の 0 が2つですので、小数点以下2桁でパーセンテージ表示されます。
日付
セルの書式設定を「日付」にするには以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormatLocal = "yyyy/mm/dd"
日付には様々な指定方法がありますので、下表に示します。
指定のしかた | 意味 | 詳細 |
---|---|---|
d | 日付 | 日付の数値が1桁の場合、先頭に0をつけない ex)1日 --> 1 |
dd | 日付 | 日付の数値が1桁の場合、先頭に0をつける ex) 1日 --> 01 |
m | 月 | 月の数値が1桁の場合、先頭に0をつけない ex)1月 --> 1 |
mm | 月 | 月の数値が1桁の場合、先頭に0をつける ex)1月 --> 01 |
mmm | 月 | 省略形の英語での月の名前 ex)1月 --> Jan |
mmmm | 月 | 英語での月の名前 ex) 1月 --> January |
yy | 年 | 年を下2桁で表示 ex) 2007年 --> 07 |
yyyy | 年 | 年を4桁で表示 ex) 2007 年--> 2007 |
時間
セルの書式設定を「時間」にするには以下のように記述します。”hh:mm:ss” は "時:分:秒"を表します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "hh:mm:ss"
以下のように記述すると12時間制のAM/PM形式で表示されます。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormat = "hh:mm AM/PM"
通貨
セルの書式設定を「通貨」にするには以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Cells(2, 2).NumberFormatLocal = "\#,##0_ "
"\#,##0_ "
の部分が通貨を指定している部分です。"\"
は通貨記号、"#,##"
は3桁区切り、"0"
は小数点以下の桁数(この場合は整数)を表します。それぞれ所望のものに変更して使用できます。
色
色についてはこちらの記事で解説しております。もしよろしければ、ご覧ください。
罫線
指定範囲の外枠に罫線を引く BorderAround
指定範囲の外枠に罫線を引くには以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).BorderAround Weight:=xlThin
Range
オブジェクトに BorderAround
メソッドを用い、引数に Weight:=xlThin
を設定しています。
BorderAround
メソッドは指定範囲の外枠に罫線を引くメソッドです。Weight
は線の太さを決めるプロパティです。引数の Weight:=xlThin
で、線の太さを「細線」に設定しています。
ことばの意味
- メソッド
オブジェクトを操作するための「命令文」のことです。 - 引数
引数とは、メソッドや関数、プログラムを制御するために渡す値やオブジェクトのことです。 - 関数
特定の処理をまとめたもののことです。入力値を受け取り、それに基づいた結果を出力します。
指定範囲の外枠と内側に一律に線を引く Borders
指定範囲の外枠と内側に一律に線を引くには以下のように記述します。
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders.Weight = xlThin
Range オブジェクトの Borders.Weight プロパティに xlThin (細線)を設定しています。
指定範囲の一辺に線を引く Borders(xlEdgeX)
指定範囲の上辺に線を引くには以下のように記述します。
' 指定範囲の上辺に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlEdgeTop).Weight = xlThin
Range オブジェクトの Borders(xlEdgeTop).Weight プロパティに xlThin(細線) を設定しています。
同様に、底辺、左辺、右辺に線を引くには以下のように記述します。
' 指定範囲の底辺に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlEdgeBottom).Weight = xlThin
' 指定範囲の左辺に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlEdgeLeft).Weight = xlThin
' 指定範囲の右辺に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlEdgeRight).Weight = xlThin
指定範囲の内側に線を引く Borders(xlInsideX)
指定範囲の内側の垂直方向に線を引くには以下のように記述します。
' 指定範囲の内側・垂直方向に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlInsideVertical).Weight = xlThin
Range オブジェクトの Borders(xlInsideVertical).Weight プロパティに xlThin(細線) を設定しています。
同様に、指定範囲の内側の水平方向に線を引くには以下のように記述します。
' 指定範囲の内側・水平方向に線を引く
ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders(xlInsideHorizontal).Weight = xlThin
線の詳細を設定する
線の種類、太さ、色などの詳細を設定するには以下のように記述します。
' With ステートメントで Borders を指定
With ThisWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(4, 4)).Borders
' 線の種類を破線(xlDash)に設定
.LineStyle = xlDash
' 線の色をテーマカラーの青に設定
.ThemeColor = xlThemeColorAccent5
' 線の色の明るさを標準(0)に設定
.TintAndShade = 0
' 線の太さを太線(xlMedium)に設定
.Weight = xlMedium
End With
各プロパティと、そのバリエーションを解説します。
LineStyle
LineStyle
は線の種類に関するプロパティです。下表のような引数を設定できます。
引数 | 内容 |
---|---|
xlContinuous | 実線 |
xlDash | 破線 |
xlDashDot | 一点鎖線 |
xlDashDotDot | 二点鎖線 |
xlDot | 点線 |
xlSlantDashDot | 斜め破線 |
xlDouble | 二重線 |
xlLineStyleNone | 線無し |
ThemeColor & TintAndShade
ThemeColor
はテーマの色に関するプロパティです。TintAndShade
は色の明るさを設定するプロパティです。
色は、ThemeColor以外にも様々なバリエーションがあります。こちらの記事に詳述しております。
Weight
Weight
は線の太さに関するプロパティです。下表のような引数を設定できます。
引数 | 内容 |
---|---|
xlHairLine | 極細線 |
xlThin | 細線 |
xlMedium | 太線 |
xlThick | 極太線 |
NumberFormat と NumberFormatLocal の違い
前述のコードで NumberFormat と NumberFormatLocal という2つのプロパティを使用いたしました。これらの違いは次のようになっています。
おわりに
ご覧いただきありがとうございました。
今回の記事では、セルの基本操作のうち「セルの書式設定|文字列、数値、日付、時間、通貨、色、罫線など」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
尚、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。
筆者の記事関連経験
- VBA使用経験約20年
実務に使用するマクロを多数作成してきました。 - Python 3 エンジニア認定基礎試験
経済産業省が定めたガイドライン「ITスキル標準(ITSS)」に掲載されている民間資格です。
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。