- ベストアンサー
"/"でセル内の文字を縦に分割するマクロについて
マクロ作成の為に、ご協力下さい。 このようなデータが1つのセル内にあります。 aaaa/bbbb/cccc/dddd このセルに対して、"/"があったら下のセルに入力するようにしたいです。 aaaa bbbb cccc dddd どのようにしたら良いか見当がつきません。。。 よろしくお願いいたします。 ※区切り位置の機能を縦に使うようなイメージです。
- みんなの回答 (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/vba_ws_kansu.html#WorksheetFunction ただ「WorksheetFunction」の部分は省けるので、省いてしまってますが。 こんな感じでしょうか。
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
セルA1にデータがあるとしてA2以下に代入するとしたら、 Sub try() Dim v v = Split(Range("A1").Value, "/") Range("A2").Resize(UBound(v) + 1).Value = Application.Transpose(v) End Sub こんな感じかな?
お礼
ありがとうございます!! これでいけそうです。 大変申し訳ないのですが、今後の為に教えていただきたい事があります。 Range("A2").Resize(UBound(v) + 1).Value = Application.Transpose(v) についてなのですが、何をやっているのかいまいちいわかりません。。。 なんとなく、配列を行と列を入れ替えているのは分かります。 UBound(v) + 1が配列の長さを示しているという事もわかりました。 しかし、それ以外はいまいち調べてもわかりません。 お手数なのですが、どのような意味の関数で、どのような処理になっているか教えていただけませんでしょうか。
お礼
ありがとうございます!! ものすごく分かりやすくて完璧に理解することが出来ました。 いろいろな事に応用できそうなので、今後も使用していきます。 今回はとても助かりました。 ありがとうございました。