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 は不要だよね)