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

回答編集履歴

7

しゅうせい7

2015/05/15 07:37

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -23,19 +23,20 @@
23
23
  Dim currentSaveWord As String
24
24
  Do
25
25
  currentVal = Cells(currentRow, TARGET_COL)
26
-
26
+
27
27
  If currentVal = "好物" Or currentVal = "" Then
28
28
  '好物であればそれまでの文字列をマージして、前回の好物セルに設定
29
29
  If saveRowNum <> -1 Then
30
30
  Cells(saveRowNum, TARGET_COL) = currentSaveWord
31
31
  End If
32
32
  currentSaveWord = ""
33
- saveRowNum = currentRow
33
+ 'saveRowNum = currentRow
34
34
  'If currentVal = "" Then 'mod
35
35
  If currentVal = "" And currentRow - 1 <> saveRowNum Then 'mod
36
36
  '最終行であればマージ後終了
37
37
  Exit Do
38
38
  End If
39
+ saveRowNum = currentRow 'add
39
40
  Else
40
41
  '好物でなければ文字列を保存
41
42
  If currentSaveWord = "" Then
@@ -57,4 +58,5 @@
57
58
  (修正3)そもそもMerge関数自体いらない…
58
59
  (修正4)そして同じ処理はまとめる
59
60
  (修正5)VBAもExitあるようなのでいらないフラグは削除
60
- (修正6)追加要望
61
+ (修正6)追加要望
62
+ (修正7)修正6がバグってた

6

しゅうせい6

2015/05/15 07:37

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -31,7 +31,8 @@
31
31
  End If
32
32
  currentSaveWord = ""
33
33
  saveRowNum = currentRow
34
- If currentVal = "" Then
34
+ 'If currentVal = "" Then 'mod
35
+ If currentVal = "" And currentRow - 1 <> saveRowNum Then 'mod
35
36
  '最終行であればマージ後終了
36
37
  Exit Do
37
38
  End If
@@ -55,4 +56,5 @@
55
56
  (修正2)Merge関数はこのやり方であれば単純置換するだけで良かったので修正しました。
56
57
  (修正3)そもそもMerge関数自体いらない…
57
58
  (修正4)そして同じ処理はまとめる
58
- (修正5)VBAもExitあるようなのでいらないフラグは削除
59
+ (修正5)VBAもExitあるようなのでいらないフラグは削除
60
+ (修正6)追加要望

5

しゅうせい5

2015/05/15 03:47

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -21,8 +21,6 @@
21
21
 
22
22
  Dim currentVal As String
23
23
  Dim currentSaveWord As String
24
- Dim exitFlg As Boolean
25
- exitFlg = False
26
24
  Do
27
25
  currentVal = Cells(currentRow, TARGET_COL)
28
26
 
@@ -35,7 +33,7 @@
35
33
  saveRowNum = currentRow
36
34
  If currentVal = "" Then
37
35
  '最終行であればマージ後終了
38
- exitFlg = True
36
+ Exit Do
39
37
  End If
40
38
  Else
41
39
  '好物でなければ文字列を保存
@@ -45,17 +43,16 @@
45
43
  currentSaveWord = currentSaveWord & vbLf & currentVal
46
44
  End If
47
45
  End If
48
-
49
46
  currentRow = currentRow + 1
50
-
51
- Loop While Not exitFlg
47
+ Loop
52
48
 
53
49
  MsgBox "おわり"
54
-
50
+
55
51
  End Sub
56
52
  ```
57
53
 
58
54
  (修正1)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。
59
55
  (修正2)Merge関数はこのやり方であれば単純置換するだけで良かったので修正しました。
60
56
  (修正3)そもそもMerge関数自体いらない…
61
- (修正4)そして同じ処理はまとめる
57
+ (修正4)そして同じ処理はまとめる
58
+ (修正5)VBAもExitあるようなのでいらないフラグは削除

4

しゅうせい4

2015/05/14 16:36

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -26,19 +26,17 @@
26
26
  Do
27
27
  currentVal = Cells(currentRow, TARGET_COL)
28
28
 
29
- If currentVal = "好物" Then
29
+ If currentVal = "好物" Or currentVal = "" Then
30
30
  '好物であればそれまでの文字列をマージして、前回の好物セルに設定
31
31
  If saveRowNum <> -1 Then
32
- Cells(saveRowNum, TARGET_COL) = Merge(currentSaveWord)
32
+ Cells(saveRowNum, TARGET_COL) = currentSaveWord
33
33
  End If
34
34
  currentSaveWord = ""
35
35
  saveRowNum = currentRow
36
- ElseIf currentVal = "" Then
36
+ If currentVal = "" Then
37
- '最終行であればマージして終了
37
+ '最終行であればマージ終了
38
- If saveRowNum <> -1 Then
38
+ exitFlg = True
39
- Cells(saveRowNum, TARGET_COL) = Merge(currentSaveWord)
40
39
  End If
41
- exitFlg = True
42
40
  Else
43
41
  '好物でなければ文字列を保存
44
42
  If currentSaveWord = "" Then
@@ -59,4 +57,5 @@
59
57
 
60
58
  (修正1)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。
61
59
  (修正2)Merge関数はこのやり方であれば単純置換するだけで良かったので修正しました。
62
- (修正3)そもそもMerge関数自体いらない…
60
+ (修正3)そもそもMerge関数自体いらない…
61
+ (修正4)そして同じ処理はまとめる

3

しゅうせい3

2015/05/14 16:29

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -44,7 +44,7 @@
44
44
  If currentSaveWord = "" Then
45
45
  currentSaveWord = currentVal
46
46
  Else
47
- currentSaveWord = currentSaveWord & "," & currentVal
47
+ currentSaveWord = currentSaveWord & vbLf & currentVal
48
48
  End If
49
49
  End If
50
50
 
@@ -55,14 +55,8 @@
55
55
  MsgBox "おわり"
56
56
 
57
57
  End Sub
58
-
59
- 'マージって呼ぶのか?
60
- Function Merge(inputs As String) As String
61
- Dim output As String
62
- output = ""
63
- Merge = Replace(inputs, ",", vbLf)
64
- End Function
65
58
  ```
66
59
 
67
60
  (修正1)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。
68
61
  (修正2)Merge関数はこのやり方であれば単純置換するだけで良かったので修正しました。
62
+ (修正3)そもそもMerge関数自体いらない…

2

しゅうせい2

2015/05/14 16:26

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -60,18 +60,9 @@
60
60
  Function Merge(inputs As String) As String
61
61
  Dim output As String
62
62
  output = ""
63
- Dim inputList() As String
64
- inputList = Split(inputs, ",")
63
+ Merge = Replace(inputs, ",", vbLf)
65
- Dim i As Integer
66
- For i = 0 To UBound(inputList)
67
- If i <> 0 Then
68
- 'output = output & Chr(13) & Chr(10)
69
- output = output & Chr(10)
70
- End If
71
- output = output & inputList(i)
72
- Next
73
- Merge = output
74
64
  End Function
75
65
  ```
76
66
 
77
- (修正)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。
67
+ (修正)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。
68
+ (修正2)Merge関数はこのやり方であれば単純置換するだけで良かったので修正しました。

1

改行へんこう

2015/05/14 16:25

投稿

Tak1wa
Tak1wa

スコア4791

answer CHANGED
@@ -65,10 +65,13 @@
65
65
  Dim i As Integer
66
66
  For i = 0 To UBound(inputList)
67
67
  If i <> 0 Then
68
- output = output & Chr(13) & Chr(10)
68
+ 'output = output & Chr(13) & Chr(10)
69
+ output = output & Chr(10)
69
70
  End If
70
71
  output = output & inputList(i)
71
72
  Next
72
73
  Merge = output
73
74
  End Function
74
- ```
75
+ ```
76
+
77
+ (修正)swordoneさんからご指摘いただいたようにセル内改行はLFのみとしました。