2-09.計算・データ処理:日付から曜日を取得するには?

Format関数

Format(値, 書式記号)

日付から曜日を取得するには、Format関数を使うと便利です。Format関数は、引数に指定した値を、指定した書式で返す関数です。

 日付(シリアル値)に対して曜日を表す書式記号(表)を指定すれば、曜日を表す文字列を簡単に取得できます。書式記号は、セルに「ユーザー定義」の表示形式を指定する際の記号と基本的には同じですが、一部異なるものもあります。

【曜日を表す書式記号】

≪曜日の表し方≫ ≪書式記号≫ ≪例≫
漢字1文字で表示 aaa
漢字3文字で表示 aaaa 月曜日
アルファベット3文字で表示 ddd Mon
英単語で表示 dddd Monday

 


日付の曜日を表示する

Sub Sample()

MsgBox Format(Range(“B3”).Value, “aaaa”)

End Sub

 

実行結果

 

 

 

2022年9月12日

2-08.計算・データ処理:文字列から日付データを得るには?

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

 

実行結果

 

 

2022年9月12日

2-07.計算・データ処理:数値から日付データを生成するには?

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

実行結果

 

2022年9月12日

2-06.計算・データ処理:文字種を変換するには?

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

 

実行結果

2022年9月9日

2-05.計算・データ処理:単位が付いた数値を計算するには?

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

 

実行結果

 

2022年9月9日

2-04.計算・データ処理:複数のセルに同じ数式を入れるには?

Formulaプロパティ

セル.Formula

複数のセルに同様の数式を入力するとき、一般には、どれか1つのセルにまず数式を入れて、それをオートフィル機能によってコピーするなどします。

 しかし、もっと簡単な方法もあります。それは、セル範囲に対して、1番目のセルに入力すべき数式を代入するコードを書く方法です。するとExcelは、オートフィルを実行したときと同様に、数式が参照しているアドレスを自動調整して、各セルに入力してくれます。


D3 ~ D6セルに同じ数式を入力する

Sub Sample()

Range(“D3:D6”).Formula = “=B3-C3”

End Sub

実行結果

 

 

 

2022年9月9日

2-03.計算・データ処理:数式がエラーかどうか調べるには?

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

 

実行結果

 

 

2022年9月9日

2-02.計算・データ処理:セルが数式かどうか調べるには?

HasFormulaプロパティ

セル.HasFormula

セルに数式が入力されているかどうかを判定するには、RangeオブジェクトのHasFormulaプロパティを調べます。数式が入力されていると、HasFormulaプロパティがTrueを返しま

す。これをIf文で判定すればよいでしょう。


C7セルに数式が入っているかどうかを調べる

Sub Sample()

If Range(“C7”).HasFormula Then

MsgBox “数式が入力されています。”

Else

MsgBox “数式ではありません。”

End If

End Sub

 

実行結果

2022年9月9日

2-01.計算・データ処理:セルに数式を入力するには?

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の実行例

 

2022年9月9日

1-21.セルの操作:コメント内を検索するには?

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

 

実行結果

 

 

2022年9月9日