Format関数
Format(値, 書式記号)
日付から曜日を取得するには、Format関数を使うと便利です。Format関数は、引数に指定した値を、指定した書式で返す関数です。
日付(シリアル値)に対して曜日を表す書式記号(表)を指定すれば、曜日を表す文字列を簡単に取得できます。書式記号は、セルに「ユーザー定義」の表示形式を指定する際の記号と基本的には同じですが、一部異なるものもあります。
【曜日を表す書式記号】
≪曜日の表し方≫ |
≪書式記号≫ |
≪例≫ |
漢字1文字で表示 |
aaa |
月 |
漢字3文字で表示 |
aaaa |
月曜日 |
アルファベット3文字で表示 |
ddd |
Mon |
英単語で表示 |
dddd |
Monday |
日付の曜日を表示する
Sub Sample()
MsgBox Format(Range(“B3”).Value, “aaaa”)
End Sub
実行結果


DateValue関数
DateValue(文字列)
DateValue関数を使うと、「2022/9/9」「2022年9月9日」「2022-09-09」「令和4年9月9日」のような日付を表す文字列から、日付データ(シリアル値)を生成することができます。「9/9」のように年を省略した文字列の場合は、現在の年と見なします。「2022年9月」のように日を省略した文字列の場合は、1日の日付になります。
なお、日付として認識されない文字列をDateValue関数の引数に指定すると、エラーとなります。次のサンプルコードでは、基にする文字列が日付を表す文字列かどうかをあらかじめIsDate関数で調べることで、エラーを回避しています。
日付を表す文字列から日付データを生成する
Sub Sample()
If IsDate(Range(“B3”).Value) Then
MsgBox DateValue(Range(“B3”).Value)
Else
MsgBox “日付ではありません。”
End If
End Sub
実行結果


DateSerial関数
DateSerial(年, 月, 日)
年、月、日を表す数値から日付データ(シリアル値)を生成するには、DateSerial関数を使います。引数に年、月、日を表す数値を順番に指定します。
次のサンプルコードは、B3、C3、D3セルに入力された年、月、日を表す数値を使って日付データを生成し、メッセージボックスに表示します。結果はWindowsの標準設定に従って、「2022/09/09」のように表示されます。
年、月、日を表す数値から日付データを生成
Sub Sample()
Dim y As Long, m As Long, d As Long
y = Range(“B3”).Value
m = Range(“C3”).Value
d = Range(“D3”).Value
MsgBox DateSerial(y, m, d)
End Sub
実行結果


StrConv関数
StrConv(文字列, 文字種)
大文字と小文字、全角文字と半角文字、ひらがなとカタカナといった、文字種の変換もマクロを使えば一発です。文字種の変換にはStrConv関数を使います。1つ目の引数に文字列、2つ目の引数に変換後の文字種を表す定数(表)を指定します。
なお、StrConv関数は文字列を1つずつしか指定できません。セル範囲に対してまとめて処理したい場合は、For文などを使って処理を繰り返します。
変換後の文字種を指定するための主な定数
大文字にする |
vbUpperCase |
小文字にする |
vbLowerCase |
先頭文字だけ大文字にする |
vbProperCase |
全角文字にする |
vbWide |
半角文字にする |
vbNarrow |
カタカナにする |
vbKatakana |
ひらがなにする
|
vbHiragana |
ひらがなをカタカナに変換する
Sub Sample()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = StrConv(Cells(i, 1).Value, vbKatakana)
Next i
End Sub
実行結果


Val関数
Val(単位付きの数値)
「1000円」などと単位が付いた数値(文字列)を「1000」として計算したいケースがあります。その場合、文字列操作の関数などを使って「円」の文字を分割したり削除したりして、数値部分だけを計算できるようにすべきでしょうか。
実は、このような単位付きの数値を簡単に計算する方法があります。それはVal関数を使うテクニックです。Val関数は、文字列の左から、数値に変換できる部分だけを数値として返します。そこで、Val関数の引数に単位付きの数値を指定するだけで、数値部分のみを手早く計算できます。
「円」という単位付き数値の、数値部分だけを合計
Sub Sample()
Dim Result As Long, i As Long
For i = 1 To 4
Result = Result + Val(Cells(i, 1).Value)
Next i
MsgBox “合計は” & Result & “円”
End Sub
実行結果


Formulaプロパティ
セル.Formula
複数のセルに同様の数式を入力するとき、一般には、どれか1つのセルにまず数式を入れて、それをオートフィル機能によってコピーするなどします。
しかし、もっと簡単な方法もあります。それは、セル範囲に対して、1番目のセルに入力すべき数式を代入するコードを書く方法です。するとExcelは、オートフィルを実行したときと同様に、数式が参照しているアドレスを自動調整して、各セルに入力してくれます。
D3 ~ D6セルに同じ数式を入力する
Sub Sample()
Range(“D3:D6”).Formula = “=B3-C3”
End Sub
実行結果


IsError関数
IsError(調べる対象)
セルに入力された数式がエラーになっているかどうかを判定するには、RangeオブジェクトのValueプロパティを、IsError関数で調べます。IsError関数は、カッコ内に指定した数式や値がエラーになっている場合はTrueを返します。一般には、VBAの処理の中でエラーを調べるときに使いますが、セルのエラーを判定するときにも便利です。
なお、vbCrLfは改行を指定する定数です。
アクティブセルの数式がエラーかどうかを判定する
Sub Sample()
If IsError(ActiveCell.Value) Then
MsgBox ActiveCell.Address & “セルの数式” & vbCrLf _
& ActiveCell.Formula & vbCrLf _
& “はエラーです。”
End If
End Sub
実行結果


HasFormulaプロパティ
セル.HasFormula
セルに数式が入力されているかどうかを判定するには、RangeオブジェクトのHasFormulaプロパティを調べます。数式が入力されていると、HasFormulaプロパティがTrueを返しま
す。これをIf文で判定すればよいでしょう。
C7セルに数式が入っているかどうかを調べる
Sub Sample()
If Range(“C7”).HasFormula Then
MsgBox “数式が入力されています。”
Else
MsgBox “数式ではありません。”
End If
End Sub
実行結果

Formulaプロパティ
セル.Formula / セル.Value
セルに数式を入れるには、RangeオブジェクトのFormulaプロパティに数式を表す文字列を代入します。ただ、セルに数値や文字列を入れるときと同様に、Valueプロパティに数式を
表す文字列を代入してもOKです。先頭に「=」を付けた文字列を、Excelは「数式」と判断しますので、Valueプロパティに代入した場合も、Excelは数式として処理してくれます。
なお、セルに入力されている数式を取得するには、Formulaプロパティを使います。Valueプロパティでは、数式の計算結果が取得されます。
2セルにSUM関数の数式を入力する
Sub Sample()
Range(“C7”).Formula = “=SUM(C3:C6)”
End Sub
実行結果


C7セルの数式を表示する
Sub Sample1()
MsgBox Range(“C7”).Formula
End Sub
サンプル2の実行例


Findメソッド
検索範囲.Find
セルに挿入したコメント内を検索するには、検索を実行するFindメソッドの引数LookInに、定数xlCommentsを指定します。引数LookInには、数式の場合xlFormulas、値の場合はxlValuesを指定します。
検索語は引数Whatに指定します。引数LookAtは、xlPartで部分一致、xlWholeで完全一致の検索を指定できます。そのほか、引数MatchCaseで大文字/小文字、引数MatchByteで全角/半角の区別を、TrueまたはFalseで指定できます。
シート全体(Cells)でコメント内を検索し、見つかったらコメントを表示(Visible)します。
コメント内の文字列を検索し、「猫」見つかったら表示状態にする
Sub Sample()
Dim FoundCell As Range
Set FoundCell = Cells.Find(What:=”猫”,_
LookIn:=xlComments, LookAt:=xlPart)
If FoundCell Is Nothing Then
Msgbox “見つかりませんでした。”
Else
FoundCell.Comment.Visible = True
End If
End Sub
実行結果

