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

質問編集履歴

2

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

2017/01/16 15:04

投稿

marutoki
marutoki

スコア16

title CHANGED
File without changes
body CHANGED
@@ -13,37 +13,47 @@
13
13
  エクセルの書式設定や基本設定、もしくはマクロで良い方法がないでしょうか?
14
14
 
15
15
  【追記】
16
- 数多くのご意見、ありがとうございます。
17
- 理解力と理想としては初心者が背伸びしてマクロを取入れるがベスト気がしま
16
+ rrryutaro様教えによりなんとか下記コードで動作しました
18
- ですので、もう少しお力添えをいただければと思います
17
+ ただ、あくで「縦x横x高さ」べてそろっている場合で、
19
- とりあえず、イメージとしては、
20
- Split関数で文字列を区切る。
21
- 配列を並び替えて転記する。
22
- 高さが無場合もあるLBoundで配列指定して転記
18
+ 高さのないもの(「縦x横」)があると、当然すが、
23
- という感じでいろいろ参考させていただいて書いてみした
19
+ 「インデックスが有効範囲ありせん
24
- が、英単語が分かるからって英語が喋れるわけもなく・・行き詰りましたorz
25
- Splitのところで、
26
- 「引数の数が一致していません。または不正なプロパティを使用しています。」
27
- ますorz
20
+ なります
21
+ Splitで抽出したvの値は0,1,2ですよね?
22
+ これを0,1の時、0,1,2の時で処理を分ける必要がある。
23
+ 例えば v = Split(r, "x")の後に
24
+ IF文を入れて、
25
+ V=0,1のみ then
26
+ Cells(i, "V") = v(LBound(v))
27
+ Cells(i, "U") = v(LBound(v) + 1)
28
+ else
29
+ Cells(i, "V") = v(LBound(v))
30
+ Cells(i, "U") = v(LBound(v) + 1)
31
+ Cells(i, "T") = v(LBound(v) + 2)
28
32
 
33
+ う~ん、
34
+ このあたりの書き方がなんとも分かりません・・・。
35
+
36
+
37
+
29
38
  ```ここに言語を入力
30
- Sub Split()
39
+ Sub 並び替え()
31
40
 
32
41
  Dim myRng As Range ' F列のデータ範囲
33
42
  Dim r As Range ' ループ作業用
43
+ Dim v As Variant
34
44
  Dim i As Long
35
45
 
36
46
  ' データ範囲をセット
37
- Set myRng = Range(Cells(2, "F"), Cells(Rows.count, "F").End(xlUp))
47
+ Set myRng = Range(Cells(5, "F"), Cells(Rows.Count, "F").End(xlUp))
38
48
 
39
49
  'T列(高さ)、U列(横)、V列(縦)としたい
40
50
  ' ループ処理
41
51
  i = 5
42
52
  For Each r In myRng
43
- r = Split(myRng, "x")
53
+ v = Split(r, "x")
44
- Cells(i, "V") = r(LBound(r) + 2)
54
+ Cells(i, "V") = v(LBound(v))
45
- Cells(i, "U") = r(LBound(r) + 1)
55
+ Cells(i, "U") = v(LBound(v) + 1)
46
- Cells(i, "T") = r(LBound(r))
56
+ Cells(i, "T") = v(LBound(v) + 2)
47
57
  i = i + 1
48
58
  Next
49
59
 

1

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

2017/01/16 15:04

投稿

marutoki
marutoki

スコア16

title CHANGED
File without changes
body CHANGED
@@ -10,4 +10,57 @@
10
10
  これを逆向きに配置するというのはやはりマクロでないと不可能でしょうか?
11
11
 
12
12
  出来れば数値はコピー貼り付けしたいので、関数ではなく
13
- エクセルの書式設定や基本設定、もしくはマクロで良い方法がないでしょうか?
13
+ エクセルの書式設定や基本設定、もしくはマクロで良い方法がないでしょうか?
14
+
15
+ 【追記】
16
+ 数多くのご意見、ありがとうございます。
17
+ 私の理解力と理想としては初心者が背伸びしてマクロを取り入れるがベストな気がします。
18
+ ですので、もう少しお力添えをいただければと思います。
19
+ とりあえず、イメージとしては、
20
+ Split関数で文字列を区切る。
21
+ 配列を並び替えて転記する。
22
+ 高さが無い場合もあるのでLBoundで配列指定して転記
23
+ という感じでいろいろ参考にさせていただいて書いてみました。
24
+ が、英単語が分かるからって英語が喋れるわけもなく・・行き詰りましたorz
25
+ Splitのところで、
26
+ 「引数の数が一致していません。または不正なプロパティを使用しています。」
27
+ と出ますorz
28
+
29
+ ```ここに言語を入力
30
+ Sub Split()
31
+
32
+ Dim myRng As Range ' F列のデータ範囲
33
+ Dim r As Range ' ループ作業用
34
+ Dim i As Long
35
+
36
+ ' データ範囲をセット
37
+ Set myRng = Range(Cells(2, "F"), Cells(Rows.count, "F").End(xlUp))
38
+
39
+ 'T列(高さ)、U列(横)、V列(縦)としたい
40
+ ' ループ処理
41
+ i = 5
42
+ For Each r In myRng
43
+ r = Split(myRng, "x")
44
+ Cells(i, "V") = r(LBound(r) + 2)
45
+ Cells(i, "U") = r(LBound(r) + 1)
46
+ Cells(i, "T") = r(LBound(r))
47
+ i = i + 1
48
+ Next
49
+
50
+ End Sub
51
+
52
+ ①2行目から対象範囲の最終行までループ処理
53
+ (行ループここから)
54
+ ②ループ処理行のF列から値を取得
55
+ ③取得した値を"x"で分割(Split関数を利用)
56
+ ⇒配列 (0): 縦
57
+ 配列 (1): 横
58
+ 配列 (2): 高さ が格納される
59
+ ④配列0~2の値を列V~Tに出力する
60
+ ⇒Cells(ループ行, "V") = 配列(0)
61
+ Cells(ループ行, "U") = 配列(1)
62
+ Cells(ループ行, "T") = 配列(2)
63
+ (行ループここまで)
64
+ ⑤対象範囲の最終行までループ処理
65
+
66
+ ```