目次
VBA関数ラッパーとは?
ExcelのVBAからはワークシート関数を呼び出すことができますが、ExcelのワークシートからはVBAの関数を呼び出すことはできません。
例えば、InStrRev
というVBA関数がありますが、これと同じ機能を持つワークシート関数がないため、仕方なくLen
、Mid
、Substitute
等を組み合わせて同等の機能を実現している人も多いのではないでしょうか?
しかし、独自関数はワークシートから呼び出すことができますので、VBAの関数をラップしたVBA関数ラッパーを独自関数として作ることで、ワークシートから呼び出せるようなります。
対象とするVBA関数
今回、VBA関数ラッパーの対象とする関数は、下記のような基準で選択しています。
- VBAにしか存在しないが、ワークシートでも有用と思われるもの
- ワークシート関数にも同等の機能を持つ関数があるが、名前が異なり使いづらいと思われるもの
例えば、ワークシート関数にはSubstitute
という文字列置換の関数がありますが、Replace
のほうがしっくりくる人も多いのではないでしょうか?
なお、名前が競合しないように、vb
というプレフィクスを付けた関数名にしています。
インストール
任意の名前で標準モジュールを追加し、下記のソースを貼り付けるだけです。
使用方法
使い方はワークシート関数と全く同じです。
セルに=vbReplace("hoge/moge", "/", "\")
のように書くだけです。
カテゴリー | 関数 | 内容 |
---|---|---|
Strings | vbAsc | 文字のアスキーコードを取得 |
Strings | vbChr | アスキーコードに対応する文字を取得 |
Strings | vbLTrim | 文字列の左側の空白を除去 |
Strings | vbRTrim | 文字列の右側の空白を除去 |
Strings | vbReplace | 文字列の特定の文字を置換 |
Strings | vbStrReverse | 文字列の左右を反転する |
Strings | vbString | 指定文字を指定回数繰り返した文字列を取得する |
Strings | vbRepeat | 指定文字列を指定回数繰り返した文字列を取得する |
Strings | vbInStr | 文字列中の指定文字列の位置を取得する(前から検索) |
Strings | vbInStrRev | 文字列中の指定文字列の位置を取得する(後ろから検索) |
Strings | vbLCase | 小文字に変換する |
Strings | vbUCase | 大文字に変換する |
DateTime | vbDateSerial | 年・月・日から日付を取得する |
DateTime | vbTimeSerial | 時・分・秒から時刻を取得する |
DateTime | vbDateAdd | 指定日付から指定期間経過した日付を取得する |
DateTime | vbDateDiff | 2つの日付の間隔を取得する |
Math | vbSgn | 絶対値 |
Math | vbSqr | 平方根 |
Math | vbRnd | 乱数 |
'================================================================================================ ' Strings '================================================================================================ Public Function vbAsc(Expression As String) As Long vbAsc = Strings.Asc(Expression) End Function Public Function vbChr(CharCode As Long) As String vbChr = Strings.Chr(CharCode) End Function Public Function vbLTrim(Expression As String) As String vbLTrim = Strings.LTrim(Expression) End Function Public Function vbRTrim(Expression As String) As String vbRTrim = Strings.RTrim(Expression) End Function Public Function vbReplace(Expression As String, Find As String, Replace As String, Optional Start As Long = 1, Optional Count As Long = -1, Optional Compare As VbCompareMethod = vbBinaryCompare) As String vbReplace = Strings.Replace(Expression, Find, Replace, Start, Count, Compare) End Function Public Function vbStrReverse(Expression As String) As String vbStrReverse = Strings.StrReverse(Expression) End Function Public Function vbString(Number As Long, Character As String) As String vbString = Strings.String(Number, Character) End Function Public Function vbRepeat(Number As Long, Expression As String) As String Dim i As Long Dim ret As String For i = 1 To Number ret = ret & Expression Next i vbRepeat = ret End Function Public Function vbInStr(Optional Start As Variant, Optional String1 As Variant, Optional String2 As Variant, Optional Compare As VbCompareMethod = vbBinaryCompare) As Long vbInStr = Strings.InStr(Start, String1, String2, Compare) End Function Public Function vbInStrRev(StringCheck As String, StringMatch As String, Optional Start As Long = -1, Optional Compare As VbCompareMethod = vbBinaryCompare) As Long vbInStrRev = Strings.InStrRev(StringCheck, StringMatch, Start, Compare) End Function Public Function vbLCase(Expression As String) As String vbLCase = Strings.LCase(Expression) End Function Public Function vbUCase(Expression As String) As String vbUCase = Strings.UCase(Expression) End Function '================================================================================================ ' Date '================================================================================================ Public Function vbDateSerial(Year As Integer, Month As Integer, Day As Integer) As Date vbDateSerial = DateTime.DateSerial(Year, Month, Day) End Function Public Function vbTimeSerial(Hour As Integer, Minute As Integer, Second As Integer) As Date vbTimeSerial = DateTime.TimeSerial(Hour, Minute, Second) End Function Public Function vbDateAdd(Interval As String, Number As Double, D) vbDateAdd = DateTime.DateAdd(Interval, Number, D) End Function Public Function vbDateDiff(Interval As String, Date1, Date2, Optional FirstDayOfWeeek As VbDayOfWeek = vbSunday, Optional FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1) vbDateDiff = DateTime.DateDiff(Interval, Date1, Date2, FirstDayOfWeeek, FirstWeekOfYear) End Function '================================================================================================ ' Math '================================================================================================ Public Function vbSgn(Number) vbSgn = Math.Sgn(Number) End Function Public Function vbSqr(Number As Double) As Double vbSqr = Math.Sqr(Number) End Function Public Function vbRnd(Number) As Single vbRnd = Math.Rnd(Number) End Function
コメント