WorksheetFunction
ワークシート関数がVBAで使えない時
今回も、訪問して下さりありがとうございます。
WorksheetFunction(ワークシート関数)がVBAで上手く使えないことが有ります。
日付の関数は上手く使えません。
そんな時は僕のやり方をご紹介します。
スポーツ感覚で楽しめます。Wordが得意と言われると.....「はい!」って
素直に言えない自分が居ます。
VBAを使ってワークシートに計算式を入力する感じです。
例えばこんな表が有るとします。
A列に生年月日 B列に年齢 C列に誕生日月(B列とC列にVBAで表示したい)
実行したらこんな感じにしたい!
年齢から行きます。
'DATEDIFFはWorksheetFunctionが使えません。Formulaもエラーになります。
Sub oneClick()
Dim i As Long
For i = 2 To 220
Dim Date1 As Date
Date1 = Cells(i, 1)
Cells(i, 2).Value = DateDiff("yyyy", Date1, Now())
If Cells(i, 1) = "" Then
Cells(i, 2) = ""
End If
Next i
Sub oneClick()
Dim i As Long
For i = 2 To 220
Dim Date1 As Date
Date1 = Cells(i, 1)
Cells(i, 2).Value = DateDiff("yyyy", Date1, Now())
If Cells(i, 1) = "" Then
Cells(i, 2) = ""
End If
Next i
End Sub
※ワークシート内では=Datediff(開始日,終了日,単位)
単位には”Y"期間内の満年数、”M"期間内の満月数、”D"期間内の満日数
VBAでは期間内の満年数の場合"yyyy"と先に指定して,開始日,終了日となります。
次の月数はどうでしょう?WorksheetFunctionが使えません。Formulaは使えます。
Sub oneClick2()
Range("C2").Formula = "=month(A2)"
Range("C2").AutoFill Destination:=Range("C2:C220")
End Sub
Range("C2").Formula = "=month(A2)"
Range("C2").AutoFill Destination:=Range("C2:C220")
End Sub
こうするとワークシートに関数が入った状態で記述されます。
メリット:誰かが関数を消しても安心です!すぐに修正出来ます。
年齢のところはもちろん、結果が入ってます。
隣の誕生日月には関数が入ってます。
関数を消したい時は、値に変換して下さい。
もう一つ、例として....。
A列に名前 B列にふりがな なんて実務では良くあります。
もちろんこんな時もFormulaは使えます。Phonetic関数はWorksheetFunction使えますけどね。Sub oneClick3()
Range("B2").Formula = "=phonetic(A2)"
Range("B2").AutoFill Destination:=Range("B2:B220")
End Sub
Range("B2").Formula = "=phonetic(A2)"
Range("B2").AutoFill Destination:=Range("B2:B220")
End Sub
※B列にはワークシート関数が記述されます。
工夫次第で何とか記述出来ると思います。
Sub oneClick4()
Dim i As Long
For i = 2 To 220
Cells(i, 2) = Application.WorksheetFunction.Phonetic(Cells(i, 1))
Next i
Dim i As Long
For i = 2 To 220
Cells(i, 2) = Application.WorksheetFunction.Phonetic(Cells(i, 1))
Next i
End Sub
別に....VBAでわざわざしなくても.....。って意見は有ると思います。
ただ、殆どWorksheetFunctionで対応できるのに対応できない時の参考になればと思って書きました。
僕は入力候補を使いたいので、Application.と記述してwoまで書いて入力候補で選択してWorksheetFunctionを入力しています。
最後までお読みいただきありがとうございました。