「だるころ」(だぁ~るまさんがこぉ~ろんだ♪)

「だるころ治療院」を開設しようと思って、はてなブログを作りました。 https://darucoro.com/

WorksheetFunctionが使えない関数への対応


スポンサーリンク

★読者登録お願いします

 


 

 

 WorksheetFunction

 ワークシート関数がVBAで使えない時
 

今回も、訪問して下さりありがとうございます。
 
 WorksheetFunction(ワークシート関数)がVBAで上手く使えないことが有ります。
日付の関数は上手く使えません。
そんな時は僕のやり方をご紹介します。
 
よくWordでお絵かきしてますが、実はExcelVBAが一番好きです。
スポーツ感覚で楽しめます。Wordが得意と言われると.....「はい!」って
素直に言えない自分が居ます。
 
それでは今回はExcelVBAです!
 
VBAを使ってワークシートに計算式を入力する感じです。
例えばこんな表が有るとします。
A列に生年月日  B列に年齢 C列に誕生日月(B列とC列にVBAで表示したい)

f:id:darucoro9216kun:20200414145914p:plain

実行したらこんな感じにしたい!
 
f:id:darucoro9216kun:20200414145746p:plain
年齢から行きます。
'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
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
 
こうするとワークシートに関数が入った状態で記述されます。
メリット:誰かが関数を消しても安心です!すぐに修正出来ます。
 

f:id:darucoro9216kun:20200414152151p:plain


年齢のところはもちろん、結果が入ってます。
隣の誕生日月には関数が入ってます。
 
関数を消したい時は、値に変換して下さい。
Range(“C2:C220”).value=Range(“C2:C220”).value
 

もう一つ、例として....。

A列に名前 B列にふりがな なんて実務では良くあります。

f:id:darucoro9216kun:20200414152736p:plain

もちろんこんな時もFormulaは使えます。Phonetic関数はWorksheetFunction使えますけどね。
Sub  oneClick3()
     
       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
End Sub
別に....VBAでわざわざしなくても.....。って意見は有ると思います。
ただ、殆どWorksheetFunctionで対応できるのに対応できない時の参考になればと思って書きました。
 
僕は入力候補を使いたいので、Application.と記述してwoまで書いて入力候補で選択してWorksheetFunctionを入力しています。
 
 最後までお読みいただきありがとうございました。
 

 

友だち追加

プライバシーポリシー