関数とは
関数とは特定のタスクを実行するための一連の命令がまとめられたものです。関数を使うことで、複雑な処理を簡単に行うことができます。
関数の基本的な使い方は 特定の名前と引数(必要な情報)を使って呼び出します。関数を呼び出すと、その関数が定義された処理が実行され、結果が返されます。
関数は「マクロ記録」で記録することが出来ないので覚えないといけません。
日時や時刻を操作する関数
- Now関数…現在の日時を返します。引数はありません
- Year関数…引数に指定した日付の年を表す数値を返します
- Month関数…引数に指定した日付の月を表す数値を返します
- Day関数…引数に指定した日付の日を表す数値を返します
- Hour関数…引数に指定した時刻の時を表す数値を返します
- Minute関数…引数に指定した時刻の分を表す数値を返します
- Second関数…引数に指定した時刻の秒を表す数値を返します。
- DateSerial関数…年月日を表す3つの数値から、日付データ(シリアル値)を返します。いわゆる日付を”作る関数です
Sub 日付や時刻を操作する関数()
Range("B1").Value = Now
Range("B2").Value = Year(Range("A1").Value)
Range("B3").Value = Month(Range("A1").Value)
Range("B4").Value = Day(Range("A1").Value)
Range("B5").Value = Hour(Now)
Range("B6").Value = Minute(Now)
Range("B7").Value = Second(Now)
Range("B8").Value = DateSerial(Range("B2"), Range("B3"), Range("B4"))
End Sub
出力結果
文字列を操作する関数
- Len関数…引数に指定した文字列の文字数(長さ)を返します
- Left関数…引数に指定した文字列の左端から指定した文字数分の文字列を返します
- Right関数…引く数に指定した文字列の右端から指定した文字数分の文字列を返します
- Mid関数…引数に指定した文字列のうち開始位置で指定した位置から、文字数で指定した文字数分の文字列を返します
Sub 関数1()
Range("D1").Value = Len(Range("A1").Value)
Range("D2").Value = Left(Range("A1").Value, 3)
Range("D3").Value = Right(Range("A1").Value, 3)
Range("D4").Value = Mid(Range("A1").Value, 5, 5)
End Sub
出力結果
- LCase関数…引数に指定したアルファベットを小文字にします
- UCase関数…引数に指定したアルファベットを大文字にします
- LTrim関数…引数に指定した文字列の左端にあるスペースを取り除きます
- RTrim関数…引数に指定した文字列の右端にあるスペースを取り除きます
- Trim関数…引数に指定した文字列の両端にあるスペースを取り除きます
- Replace関数…引数に指定した文字列の中で、引数「検索文字列」で指定した文字列を引数「置換文字列」に置き換えます。 Replace関数は 文字の中から不要な文字を除去するときによく使います。
- InStr関数…引数に指定した文字列の中で、引数「検索文字列」が存在する位置を数値で返します。「検索文字列」が存在しないとInStr関数は「0」を返すので 文字列の中にある文字が含まれているかどうかを調べるときにも使われます
Sub 関数3()
Range("C1").Value = LCase(Range("A1").Value)
Range("C2").Value = UCase(Range("A2").Value)
Range("C3").Value = LTrim(Range("A3").Value)
Range("C4").Value = RTrim(Range("A4").Value)
Range("C5").Value = Trim(Range("A5").Value)
Range("C6").Value = Replace(Range("A6").Value, "-", "")
Range("C7").Value = InStr(Range("A7").Value, "CD")
End Sub
出力結果
InStr関数の使用例
このVBAのコードはセルA1に “Hello World” という文字がある場合、“World” を抽出してセルB1に表示します。もし “World” が含まれていない場合は、セルB1に “Not found” と表示されます。具体的には、以下の手順を実行します:
- セルA1の値を取得:
セルの値
という変数に、セルA1の内容を文字列として格納します。 - 特定の文字列の位置を検索:
InStr
関数を使用して、セルの値
の中で “World” が最初に出現する位置を位置
という変数に格納します。 - 文字列を抽出:
位置
が0より大きい場合(つまり、“World” が見つかった場合)、Mid
関数を使用してセルの値
から “World” を抽出し、結果
という変数に格納します。 - 抽出結果を表示: 抽出した結果をセルB1に表示します。もし “World” が見つからなかった場合は、セルB1に “Not found” と表示します。
もし “World” が含まれていない場合は、セルB1に “Not found” と表示されます。
Sub 日本語の変数名を使用()
Dim セルの値 As String
Dim 位置 As Integer
Dim 結果 As String
' セルA1の値を取得
セルの値 = Range("A1").Value
' "World" の位置を検索
位置 = InStr(セルの値, "World")
' "World" を抽出
If 位置 > 0 Then
結果 = Mid(セルの値, 位置, 5)
' 抽出結果をセルB1に表示
Range("B1").Value = 結果
Else
Range("B1").Value = "Not found"
End If
End Sub
下は1行目を2行目に変えて Worldがない場合のコードです
Sub 関数5()
Dim セルの値 As String
Dim 位置 As Integer
Dim 結果 As String
' セルA1の値を取得
セルの値 = Range("A2").Value
' "World" の位置を検索
位置 = InStr(セルの値, "World")
' "World" を抽出
If 位置 > 0 Then
結果 = Mid(セルの値, 位置, 5)
' 抽出結果をセルB1に表示
Range("B2").Value = 結果
Else
Range("B2").Value = "Not found"
End If
End Sub
出力結果
StrConv関数
StrConv関数は引数で指定した文字列も文字種を変換します
引数は次のようなものがあります
Sub 関数6()
Range("C2").Value = StrConv(Range("A2").Value, vbUpperCase)
Range("C3").Value = StrConv(Range("A3").Value, vbLowerCase)
Range("C4").Value = StrConv(Range("A4").Value, vbProperCase)
Range("C5").Value = StrConv(Range("A5").Value, vbWide)
Range("C6").Value = StrConv(Range("A6").Value, vbNarrow)
Range("C7").Value = StrConv(Range("A7").Value, vbKatakana)
Range("C8").Value = StrConv(Range("A8").Value, vbHiragana)
End Sub
Format関数
VBAのFormat関数は、指定した書式に従って値を文字列に変換するための関数です。ExcelのTEXT関数と似た機能を持っています。以下が基本的な構文です:
Format(Expression, [Format], [FirstDayOfWeek], [FirstWeekOfYear])
- Expression: 必須。書式を適用する値や式。
- Format: 省略可能。適用する書式の名前またはユーザー定義の書式。
- FirstDayOfWeek: 省略可能。週の最初の曜日を指定する定数。
- FirstWeekOfYear: 省略可能。年の最初の週を指定する定数。
例えば、日付や数値を特定の形式で表示したい場合に使用します。以下は日付を特定の形式で表示する例です:
Sub 関数7()
Dim myDate As Date
myDate = #1/27/2023#
MsgBox Format(myDate, "dddd, mmmm dd, yyyy") ' 結果: "Friday, January 27, 2023"
End Sub
出力結果
今回 あげた以外にも便利な関数はあります。 機会があればまたご紹介したいと思います。
いろいろ使いこなせたらいいですね。
コメント