teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

説明追記

2020/02/26 00:43

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,3 +1,5 @@
1
+ エラーの原因は下記です。
2
+
1
3
  ```vba
2
4
  Function Cleansing(ByVal Log As String) As String
3
5
  '↑ Logは文字列(String)
@@ -11,4 +13,44 @@
11
13
  '↑ これでOK
12
14
 
13
15
  '以下 Log.Value は Log に修正
16
+ ```
17
+
18
+ ---
19
+ Logという変数名は避けた方かいい、
20
+ Option Explicitを宣言すべき、
21
+ という点はttyp03さんも指摘している通りです。
22
+
23
+ ---
24
+ さらに Cleansing関数ですが、`.Value`を削除すればエラーはでなくなりますが、戻り値を設定していないので結果は常に""(空文字列)です。あと、`"/"`以降の切り出しは`Right`ではなく`Mid`です。これらを修正した関数が下記です。
25
+
26
+ ```vba
27
+ Function Cleansing(ByVal Log As String) As String
28
+ '最終日のみ抽出する
29
+ Dim Str As Long
30
+ 'Dim Gal As Long '未使用なので不要
31
+ Str = InStr(Log, "/")
32
+ ' Gal = InStr(Log, ")") ' 未使用なので不要
33
+
34
+ If Log = "" Then
35
+ Exit Function
36
+ Else
37
+ Log = Mid(Log, Str + 1) 'Midに修正
38
+ Log = Replace(Log, ")", "")
39
+ End If
40
+ Cleansing = Log '関数の戻り値を設定
41
+ End Function
42
+ ```
43
+
44
+ ---
45
+ 自分が作成するなら下記のような感じにします。
46
+
47
+ ```vba
48
+ Function Cleansing(ByVal vLog As String) As String
49
+ '最終日のみ抽出する
50
+ If vLog = "" Or Not vLog Like "*/*" Then Exit Function
51
+
52
+ Cleansing = Split(vLog, "/")(1)
53
+ Cleansing = Replace(Cleansing, ")", "")
54
+
55
+ End Function
14
56
  ```