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

回答編集履歴

1

サンプルコード追記

2020/02/07 01:36

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,6 +1,8 @@
1
1
  そもそもActiveCellを対象に処理をするという発想から変えましょう。
2
2
  非アクティブでも処理は可能です。対象セルを変数に入れて処理をするという発想で行きましょう。
3
+
3
- 現状のコードはたぶんピント外れです。
4
+ また、現状のコードはたぶんピント外れです。配列が逆順になっているということはないです。行をそゅう入してますが、それがおかしいので順番もおかしくなっているのです。きれいな逆順になっているわけではないので、逆にいれていけば解決するという問題ではないです。
5
+
4
6
  具体的にどのようなデータがあって、どのような結果が欲しいのかまずは、言葉とデータ例で説明してください。
5
7
 
6
8
  やりたいことは、
@@ -59,4 +61,40 @@
59
61
  | | はひふへ |
60
62
 
61
63
  上記の推測であってますか。
62
- 違っているなら、上記のような感じで、仕様が明確に分かるように説明してください。
64
+ 違っているなら、上記のような感じで、仕様が明確に分かるように説明してください。
65
+
66
+ サンプルコード追記
67
+ ---
68
+ 上記の仕様だとして、サンプルコードを作成してみました。
69
+ 前回の回答からロジックも大幅に見直しました。
70
+
71
+
72
+ ```vba
73
+ Sub Macro1()
74
+
75
+ DataSplitInsert ActiveSheet.Range("A1")
76
+
77
+ End Sub
78
+
79
+ Function DataSplitInsert(DataCell As Range) As Range
80
+ Dim Origin As String: Origin = DataCell.Value
81
+
82
+ Dim Lines: Lines = Split(Origin, vbLf)
83
+ Dim i As Long
84
+ For i = 0 To UBound(Lines)
85
+ Lines(i) = Mid(Lines(i), 2) '行頭の丸数字を削除
86
+ Next
87
+ Origin = Join(Lines, "、")
88
+ Origin = Replace(Origin, "/A", "、")
89
+
90
+ Dim Items: Items = Split(Origin, "、")
91
+ Dim l As Long: l = UBound(Items)
92
+
93
+ Dim c As Range: Set c = DataCell.Offset(, 1) '出力先: DataCellの右の列
94
+ c.Offset(1).Resize(l - 1).EntireRow.Insert '追加件数分行挿入
95
+ c.Resize(l).Value = WorksheetFunction.Transpose(Items)
96
+ Set DataSplitInsert = c.Offset(l)
97
+ End Function
98
+ ```
99
+
100
+ A列の複数のデータを処理するために、処理をFunctionにしました。これをループで呼び出せば、複数データ処理にできます。