まりふのひと

Excelでセルを参照している計算式か‥‥ を判断する関数

 Excel2013/VBAで計算式をフィルハンドルでコピーする時、直上のセルが ”=350*0.05" のような場合はコピーせず、セルを参照しているような場合のみ、例えば "=350*(”A11”)” のような場合はコピーする必要性が出てきて作ったコード。

01.Public Function is英字を含む計算式(argセル値 As Variant) As Boolean
02.Dim i As Long
03.Dim lngMojisuu As Long
04.Dim strString As String, str1 As String
05.  
06.  is英字を含む計算式 = False
07.  If argセル値 = "" Then Exit Function
08.  If IsNumeric(argセル値) = True Then Exit Function
09.  
10.  strString = Trim(argセル値)
11.  If Left(strString, 1) <> "=" Then Exit Function
12.  
13.  strString = UCase(strString)
14.  is英字を含む計算式 = True
15.  lngMojisuu = Len(strString)
16.  For i = 2 To lngMojisuu
17.    str1 = Mid(strString, i, 1)
18.    If (str1 Like "[A-Z]") Then Exit Function
19.  Next
20.  is英字を含む計算式 = False
21.      
22.End Function


 最初は、InStr で、文字コードで探していた‥‥

01.  is英字を含む計算式か = True
02.  lngMojisuu = Len(strString)
03.  For i = 1 To lngMojisuu
04.    For j = 65 To 90  'A-Z
05.      If InStr(strString, Chr(j)) > 0 Then Exit Function
06.    Next
07.    For j = 97 To 122  'a-z
08.      If InStr(strString, Chr(j)) > 0 Then Exit Function
09.    Next
10.  Next
11.  is英字を含む計算式か = False

が、やっていることが判りやすいように Like関数に変えた。
上記でも事前に大文字に変えておけば For~Next は1回で済むが...
(03行の For~Next は不要だよね)