回答編集履歴

3

説明追記

2020/12/08 00:42

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -44,6 +44,8 @@
44
44
 
45
45
 
46
46
 
47
+ **コード1**
48
+
47
49
  ```vba
48
50
 
49
51
  Public Function ExtractText(myStr As String, FindStr As String) As String
@@ -70,6 +72,8 @@
70
72
 
71
73
 
72
74
 
75
+ **コード2**
76
+
73
77
  ```vba
74
78
 
75
79
  Public Sub Proc1()
@@ -93,3 +97,11 @@
93
97
  End Sub
94
98
 
95
99
  ```
100
+
101
+
102
+
103
+ 説明補足
104
+
105
+ ---
106
+
107
+ 上記の**コード1**、**コード2**をコピーして標準モジュールに貼り付けて、`Proc1`を実行してください。

2

説明の改善、コード修正

2020/12/08 00:42

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -34,6 +34,12 @@
34
34
 
35
35
 
36
36
 
37
+ 追記
38
+
39
+ ---
40
+
41
+
42
+
37
43
  上記のコードを踏まえて、汎用関数にすると、
38
44
 
39
45
 
@@ -56,6 +62,8 @@
56
62
 
57
63
  ```
58
64
 
65
+
66
+
59
67
  これを使って、F列を最後まで、処理するには、ループを使うことになります。
60
68
 
61
69
  いろいろありますが、For Each を使うと簡潔に記述できます。
@@ -68,7 +76,7 @@
68
76
 
69
77
  Dim Rng As Range, res As String
70
78
 
71
- For Each Rng In Rnage("F3", Range("F2").End(xlDown))
79
+ For Each Rng In Range("F3", Range("F2").End(xlDown))
72
80
 
73
81
  res = ExtractText(Rng.Text, "1.File List:")
74
82
 

1

コード追記

2020/12/07 11:22

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -31,3 +31,57 @@
31
31
 
32
32
 
33
33
  エクセルのセル内の改行は vbLf
34
+
35
+
36
+
37
+ 上記のコードを踏まえて、汎用関数にすると、
38
+
39
+
40
+
41
+ ```vba
42
+
43
+ Public Function ExtractText(myStr As String, FindStr As String) As String
44
+
45
+ Dim ary
46
+
47
+ ary = Split(myStr, FindStr)
48
+
49
+ If UBound(ary) > 0 Then
50
+
51
+ ExtractText = FindStr & Split(Split(myStr, FindStr)(1), vbLf & vbLf)(0)
52
+
53
+ End If
54
+
55
+ End Function
56
+
57
+ ```
58
+
59
+ これを使って、F列を最後まで、処理するには、ループを使うことになります。
60
+
61
+ いろいろありますが、For Each を使うと簡潔に記述できます。
62
+
63
+
64
+
65
+ ```vba
66
+
67
+ Public Sub Proc1()
68
+
69
+ Dim Rng As Range, res As String
70
+
71
+ For Each Rng In Rnage("F3", Range("F2").End(xlDown))
72
+
73
+ res = ExtractText(Rng.Text, "1.File List:")
74
+
75
+ If res = "" Then
76
+
77
+ res = ExtractText(Rng.Text, "Product No. :")
78
+
79
+ End If
80
+
81
+ Rng.Offset(, 1).Value = res
82
+
83
+ Next
84
+
85
+ End Sub
86
+
87
+ ```