質問編集履歴

2

追記 マクロ動作しましたが・・・

2017/01/16 15:04

投稿

marutoki
marutoki

スコア16

test CHANGED
File without changes
test CHANGED
@@ -28,35 +28,53 @@
28
28
 
29
29
  【追記】
30
30
 
31
- 数多くご意見、あうござい
31
+ rrryutaro様教えによなんか下記コードで動作しした
32
32
 
33
- 私の理解力と理想としは初心者が背伸びしマクロを取り入れがベストな気がします。
33
+ ただ、あくまで「縦x横x高さ」すべそろっ場合で、
34
34
 
35
- ですで、う少しお力添えをいただければ思いま
35
+ 高さないの(「縦x横」)がある、当然でが、
36
36
 
37
- あえず、イメージとしては、
37
+ 「インデックスが有効範囲にあません。」
38
38
 
39
- Split関数で文字列を区切る
39
+ となります
40
40
 
41
- 配列を並び替えて転記る。
41
+ Splitで抽出したvの値は0,1,2でよね?
42
42
 
43
- 高さ無い場合もあるのでLBoundで配列指定して転記
43
+ これを0,1の時、0,1,2の時で処理を分ける必要がある
44
44
 
45
- という感じでいろいろ参考させていただいて書いてみました。
45
+ 例えば v = Split(r, "x")の後
46
46
 
47
- 英単語が分かるからって英語が喋れるわけもなく・・行き詰りましたorz
47
+ IF文を入れて
48
48
 
49
- Splitのところで、
49
+ V=0,1のみ then
50
50
 
51
- 「引数の数が一致していません。または不正なプロパティを使用しています。」
51
+ Cells(i, "V") = v(LBound(v))
52
52
 
53
+ Cells(i, "U") = v(LBound(v) + 1)
54
+
53
- と出ますorz
55
+ else
56
+
57
+ Cells(i, "V") = v(LBound(v))
58
+
59
+ Cells(i, "U") = v(LBound(v) + 1)
60
+
61
+ Cells(i, "T") = v(LBound(v) + 2)
62
+
63
+
64
+
65
+ う~ん、
66
+
67
+ このあたりの書き方がなんとも分かりません・・・。
68
+
69
+
70
+
71
+
54
72
 
55
73
 
56
74
 
57
75
  ```ここに言語を入力
58
76
 
59
- Sub Split()
77
+ Sub 並び替え()
60
78
 
61
79
 
62
80
 
@@ -64,13 +82,15 @@
64
82
 
65
83
  Dim r As Range ' ループ作業用
66
84
 
85
+ Dim v As Variant
86
+
67
87
  Dim i As Long
68
88
 
69
89
 
70
90
 
71
91
  ' データ範囲をセット
72
92
 
73
- Set myRng = Range(Cells(2, "F"), Cells(Rows.count, "F").End(xlUp))
93
+ Set myRng = Range(Cells(5, "F"), Cells(Rows.Count, "F").End(xlUp))
74
94
 
75
95
 
76
96
 
@@ -82,13 +102,13 @@
82
102
 
83
103
  For Each r In myRng
84
104
 
85
- r = Split(myRng, "x")
105
+ v = Split(r, "x")
86
106
 
87
- Cells(i, "V") = r(LBound(r) + 2)
107
+ Cells(i, "V") = v(LBound(v))
88
108
 
89
- Cells(i, "U") = r(LBound(r) + 1)
109
+ Cells(i, "U") = v(LBound(v) + 1)
90
110
 
91
- Cells(i, "T") = r(LBound(r))
111
+ Cells(i, "T") = v(LBound(v) + 2)
92
112
 
93
113
  i = i + 1
94
114
 

1

追記、マクロやってみました。

2017/01/16 15:04

投稿

marutoki
marutoki

スコア16

test CHANGED
File without changes
test CHANGED
@@ -23,3 +23,109 @@
23
23
  出来れば数値はコピー貼り付けしたいので、関数ではなく
24
24
 
25
25
  エクセルの書式設定や基本設定、もしくはマクロで良い方法がないでしょうか?
26
+
27
+
28
+
29
+ 【追記】
30
+
31
+ 数多くのご意見、ありがとうございます。
32
+
33
+ 私の理解力と理想としては初心者が背伸びしてマクロを取り入れるがベストな気がします。
34
+
35
+ ですので、もう少しお力添えをいただければと思います。
36
+
37
+ とりあえず、イメージとしては、
38
+
39
+ Split関数で文字列を区切る。
40
+
41
+ 配列を並び替えて転記する。
42
+
43
+ 高さが無い場合もあるのでLBoundで配列指定して転記
44
+
45
+ という感じでいろいろ参考にさせていただいて書いてみました。
46
+
47
+ が、英単語が分かるからって英語が喋れるわけもなく・・行き詰りましたorz
48
+
49
+ Splitのところで、
50
+
51
+ 「引数の数が一致していません。または不正なプロパティを使用しています。」
52
+
53
+ と出ますorz
54
+
55
+
56
+
57
+ ```ここに言語を入力
58
+
59
+ Sub Split()
60
+
61
+
62
+
63
+ Dim myRng As Range ' F列のデータ範囲
64
+
65
+ Dim r As Range ' ループ作業用
66
+
67
+ Dim i As Long
68
+
69
+
70
+
71
+ ' データ範囲をセット
72
+
73
+ Set myRng = Range(Cells(2, "F"), Cells(Rows.count, "F").End(xlUp))
74
+
75
+
76
+
77
+ 'T列(高さ)、U列(横)、V列(縦)としたい
78
+
79
+ ' ループ処理
80
+
81
+ i = 5
82
+
83
+ For Each r In myRng
84
+
85
+ r = Split(myRng, "x")
86
+
87
+ Cells(i, "V") = r(LBound(r) + 2)
88
+
89
+ Cells(i, "U") = r(LBound(r) + 1)
90
+
91
+ Cells(i, "T") = r(LBound(r))
92
+
93
+ i = i + 1
94
+
95
+ Next
96
+
97
+
98
+
99
+ End Sub
100
+
101
+
102
+
103
+ ①2行目から対象範囲の最終行までループ処理
104
+
105
+ (行ループここから)
106
+
107
+ ②ループ処理行のF列から値を取得
108
+
109
+ ③取得した値を"x"で分割(Split関数を利用)
110
+
111
+ ⇒配列 (0): 縦
112
+
113
+ 配列 (1): 横
114
+
115
+ 配列 (2): 高さ が格納される
116
+
117
+ ④配列0~2の値を列V~Tに出力する
118
+
119
+ ⇒Cells(ループ行, "V") = 配列(0)
120
+
121
+ Cells(ループ行, "U") = 配列(1)
122
+
123
+ Cells(ループ行, "T") = 配列(2)
124
+
125
+ (行ループここまで)
126
+
127
+ ⑤対象範囲の最終行までループ処理
128
+
129
+
130
+
131
+ ```