プロが教えるわが家の防犯対策術!

マクロ作成の為に、ご協力下さい。

このようなデータが1つのセル内にあります。
aaaa/bbbb/cccc/dddd

このセルに対して、"/"があったら下のセルに入力するようにしたいです。
aaaa
bbbb
cccc
dddd

どのようにしたら良いか見当がつきません。。。
よろしくお願いいたします。

※区切り位置の機能を縦に使うようなイメージです。

A 回答 (2件)

#1です。



>v = Split(Range("A1").Value, "/")
変数vにSplit関数にて"/"で区切られた配列を格納します。

この場合
v(0)="aaaa"
v(1)="bbbb"
v(2)="cccc"
v(3)="dddd"
となります。

>Range("A2").Resize(UBound(v) + 1).Value
Resize(行、列)で、A2からのセル範囲を変更します。
今回の場合行方向に増やしますので、Resize(行,1)或いはResize(行)となります。
⇒列方向なら、Resize(1,列)或いはResize(,列)となります。
","のつけ方に気をつけて下さい。

>Resize(UBound(v) + 1)
行方向に増やす場合ですが、Ubound関数では添字「()内の数」の最大値を求めます。
ただし、今回は0~3までの内での最大値になりますので3ですが、データ数は4こありますので
+1をしてセル範囲をA2~A5としてます。

>= Application.Transpose(v)
先のセル範囲に対して変数vを代入していきますが、そのままではvは横方向だけにしか
データをきちんと出すことができません。
⇒Range("A2").Resize( ,UBound(v) + 1).Value = v
 とやってみるとA2より右に代入します。
 列方向に代入するなら = v でいけます。

そこで方向を変えるために、TRANSPOSE関数(ワークシート関数)を呼び出します。
⇒Application.が呼び出している物です。
セル範囲を指定して「コピー」右クリックで「形式を選択して貼り付け」
にある「行列を入替える」と言う感じの作業です。

ワークシート関数を使う(WorksheetFunction プロパティ) 
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
ただ「WorksheetFunction」の部分は省けるので、省いてしまってますが。

こんな感じでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

ものすごく分かりやすくて完璧に理解することが出来ました。
いろいろな事に応用できそうなので、今後も使用していきます。

今回はとても助かりました。
ありがとうございました。

お礼日時:2009/02/22 11:22

セルA1にデータがあるとしてA2以下に代入するとしたら、



Sub try()
Dim v

v = Split(Range("A1").Value, "/")

Range("A2").Resize(UBound(v) + 1).Value = Application.Transpose(v)
End Sub

こんな感じかな?
    • good
    • 2
この回答へのお礼

ありがとうございます!!
これでいけそうです。

大変申し訳ないのですが、今後の為に教えていただきたい事があります。
Range("A2").Resize(UBound(v) + 1).Value = Application.Transpose(v)
についてなのですが、何をやっているのかいまいちいわかりません。。。

なんとなく、配列を行と列を入れ替えているのは分かります。

UBound(v) + 1が配列の長さを示しているという事もわかりました。
しかし、それ以外はいまいち調べてもわかりません。

お手数なのですが、どのような意味の関数で、どのような処理になっているか教えていただけませんでしょうか。

お礼日時:2009/02/22 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています