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

回答編集履歴

3

説明追記

2020/12/08 00:42

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -21,6 +21,7 @@
21
21
 
22
22
  上記のコードを踏まえて、汎用関数にすると、
23
23
 
24
+ **コード1**
24
25
  ```vba
25
26
  Public Function ExtractText(myStr As String, FindStr As String) As String
26
27
  Dim ary
@@ -34,6 +35,7 @@
34
35
  これを使って、F列を最後まで、処理するには、ループを使うことになります。
35
36
  いろいろありますが、For Each を使うと簡潔に記述できます。
36
37
 
38
+ **コード2**
37
39
  ```vba
38
40
  Public Sub Proc1()
39
41
  Dim Rng As Range, res As String
@@ -45,4 +47,8 @@
45
47
  Rng.Offset(, 1).Value = res
46
48
  Next
47
49
  End Sub
48
- ```
50
+ ```
51
+
52
+ 説明補足
53
+ ---
54
+ 上記の**コード1**、**コード2**をコピーして標準モジュールに貼り付けて、`Proc1`を実行してください。

2

説明の改善、コード修正

2020/12/08 00:42

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -16,6 +16,9 @@
16
16
 
17
17
  エクセルのセル内の改行は vbLf
18
18
 
19
+ 追記
20
+ ---
21
+
19
22
  上記のコードを踏まえて、汎用関数にすると、
20
23
 
21
24
  ```vba
@@ -27,13 +30,14 @@
27
30
  End If
28
31
  End Function
29
32
  ```
33
+
30
34
  これを使って、F列を最後まで、処理するには、ループを使うことになります。
31
35
  いろいろありますが、For Each を使うと簡潔に記述できます。
32
36
 
33
37
  ```vba
34
38
  Public Sub Proc1()
35
39
  Dim Rng As Range, res As String
36
- For Each Rng In Rnage("F3", Range("F2").End(xlDown))
40
+ For Each Rng In Range("F3", Range("F2").End(xlDown))
37
41
  res = ExtractText(Rng.Text, "1.File List:")
38
42
  If res = "" Then
39
43
  res = ExtractText(Rng.Text, "Product No. :")

1

コード追記

2020/12/07 11:22

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -14,4 +14,31 @@
14
14
  Range("G3").Value = FindStr & Split(Split(myStr, FindStr)(1), vbLf & vbLf)(0)
15
15
  ```
16
16
 
17
- エクセルのセル内の改行は vbLf
17
+ エクセルのセル内の改行は vbLf
18
+
19
+ 上記のコードを踏まえて、汎用関数にすると、
20
+
21
+ ```vba
22
+ Public Function ExtractText(myStr As String, FindStr As String) As String
23
+ Dim ary
24
+ ary = Split(myStr, FindStr)
25
+ If UBound(ary) > 0 Then
26
+ ExtractText = FindStr & Split(Split(myStr, FindStr)(1), vbLf & vbLf)(0)
27
+ End If
28
+ End Function
29
+ ```
30
+ これを使って、F列を最後まで、処理するには、ループを使うことになります。
31
+ いろいろありますが、For Each を使うと簡潔に記述できます。
32
+
33
+ ```vba
34
+ Public Sub Proc1()
35
+ Dim Rng As Range, res As String
36
+ For Each Rng In Rnage("F3", Range("F2").End(xlDown))
37
+ res = ExtractText(Rng.Text, "1.File List:")
38
+ If res = "" Then
39
+ res = ExtractText(Rng.Text, "Product No. :")
40
+ End If
41
+ Rng.Offset(, 1).Value = res
42
+ Next
43
+ End Sub
44
+ ```