回答編集履歴

1

説明追記

2020/02/26 00:43

投稿

hatena19
hatena19

スコア33761

test CHANGED
@@ -1,3 +1,7 @@
1
+ エラーの原因は下記です。
2
+
3
+
4
+
1
5
  ```vba
2
6
 
3
7
  Function Cleansing(ByVal Log As String) As String
@@ -25,3 +29,83 @@
25
29
  '以下 Log.Value は Log に修正
26
30
 
27
31
  ```
32
+
33
+
34
+
35
+ ---
36
+
37
+ Logという変数名は避けた方かいい、
38
+
39
+ Option Explicitを宣言すべき、
40
+
41
+ という点はttyp03さんも指摘している通りです。
42
+
43
+
44
+
45
+ ---
46
+
47
+ さらに Cleansing関数ですが、`.Value`を削除すればエラーはでなくなりますが、戻り値を設定していないので結果は常に""(空文字列)です。あと、`"/"`以降の切り出しは`Right`ではなく`Mid`です。これらを修正した関数が下記です。
48
+
49
+
50
+
51
+ ```vba
52
+
53
+ Function Cleansing(ByVal Log As String) As String
54
+
55
+ '最終日のみ抽出する
56
+
57
+ Dim Str As Long
58
+
59
+ 'Dim Gal As Long '未使用なので不要
60
+
61
+ Str = InStr(Log, "/")
62
+
63
+ ' Gal = InStr(Log, ")") ' 未使用なので不要
64
+
65
+
66
+
67
+ If Log = "" Then
68
+
69
+ Exit Function
70
+
71
+ Else
72
+
73
+ Log = Mid(Log, Str + 1) 'Midに修正
74
+
75
+ Log = Replace(Log, ")", "")
76
+
77
+ End If
78
+
79
+ Cleansing = Log '関数の戻り値を設定
80
+
81
+ End Function
82
+
83
+ ```
84
+
85
+
86
+
87
+ ---
88
+
89
+ 自分が作成するなら下記のような感じにします。
90
+
91
+
92
+
93
+ ```vba
94
+
95
+ Function Cleansing(ByVal vLog As String) As String
96
+
97
+ '最終日のみ抽出する
98
+
99
+ If vLog = "" Or Not vLog Like "*/*" Then Exit Function
100
+
101
+
102
+
103
+ Cleansing = Split(vLog, "/")(1)
104
+
105
+ Cleansing = Replace(Cleansing, ")", "")
106
+
107
+
108
+
109
+ End Function
110
+
111
+ ```