質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1008閲覧

Excel VBA split関数マクロのうまい使い方を教えてください。

KANNORYUJI

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/10/02 11:41

編集2020/10/02 11:46

『Excel VBA split関数マクロのうまい使い方を教えてください。』

エクセルworksheet内のC4からC6までの複数行の文字を\でsplitした上で、分割文字を列に並べたいのですが、全ての分割した文字を並べる方法をどなたかご教授願います。

Sub Test() Dim rr As Range Dim bb Range("C4") = "AA\BB\CC\DD" Range("C5") = "AA\BB\CC\DD\EE\FF\GG" Range("C6") = "AA\BB\CC\DD\EE\FF\GG\HH\RR\TT\YY" For Each rr In Range("C4:C6").Rows bb = Split(rr, "\") Cells(rr.Row, 7) = bb(0) Cells(rr.Row, 8) = bb(1) Cells(rr.Row, 9) = bb(2) Cells(rr.Row, 10) = bb(3) Cells(rr.Row, 11) = bb(4) '←C4の列数が4列なのでここでエラーが出る!それを回避したい! Next End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/02 11:45 編集

コードは「コードの挿入」で記入してください。 > ←C4の列数が4列なのでここでエラーが出る!それを回避したい! 何のエラーですか?
KANNORYUJI

2020/10/02 11:48

エラー内容ですが インデックスが有効範囲にありません というエラーがでます。 原因はわかっているのですが、それを回避する方法がわからないため 精通者にお尋ねしたく
meg_

2020/10/02 11:56

コードは「コードの挿入」で記入されましたが、インデントがなく読みにくいままです。(私が修正依頼をしたのはコードを読みやすくして欲しかったからです) > エラー内容ですがインデックスが有効範囲にありませんというエラーがでます。 質問に追記してください。 > 原因はわかっているのですが、それを回避する方法がわからないため 質問者さんが考えている”原因”についても質問に追記するべきです。
KANNORYUJI

2020/10/02 12:00

泣きたくなってきました。どうやら場違いのところに来てしまいました。すみませんでした。
meg_

2020/10/02 12:06

回答者は質問に書いてあることしか分かりません。回答するために必要なので質問や依頼をしています。(質問者さんと回答者ではOS、Excelのバージョン等環境も違うでしょうし、少しでも正確な回答をするための確認作業です)
KANNORYUJI

2020/10/02 12:09

ありがとうございます。 私が求めていたことが出来ました。 今後は質問内容をもっと具体的かつ詳細に書くことに努めます。
meg_

2020/10/02 12:12

hatena19さんの回答がシンプルで良いかもですね。
guest

回答2

0

ベストアンサー

セル範囲のValueに配列を直接代入できます。

vba

1Sub Test1() 2 Dim rr As Range 3 Dim bb 4 Range("C4") = "AA\BB\CC\DD" 5 Range("C5") = "AA\BB\CC\DD\EE\FF\GG" 6 Range("C6") = "AA\BB\CC\DD\EE\FF\GG\HH\RR\TT\YY" 7 On Error Resume Next 8 For Each rr In Range("C4:C6").Rows 9 bb = Split(rr, "\") 10 rr.Offset(, 4).Resize(, UBound(bb) + 1).Value = bb 11 Next 12End Sub

別案

リボンのデータ→データツール→区切り位置 コマンド(TextToColumnsメソッド)を使うと1行でできます。

vba

1Sub Macro1() 2 Range("C4") = "AA\BB\CC\DD" 3 Range("C5") = "AA\BB\CC\DD\EE\FF\GG" 4 Range("C6") = "AA\BB\CC\DD\EE\FF\GG\HH\RR\TT\YY" 5 6 Range("C4:C6").TextToColumns Destination:=Range("G4"), OtherChar:="\" 7End Sub

投稿2020/10/02 12:04

編集2020/10/02 12:15
hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/02 12:18

色々な書き方があるのですね。勉強になります。
KANNORYUJI

2020/10/02 12:22

なんと! teratailへの質問投稿の凄さに今、天にも登る気持ちで感動しています。 エンジニア人生がかなりひらけてきた気がします。 これからもご教授いただきます。
hatena19

2020/10/02 12:23

meg_さんの回答のコードが基本ですのでまずはこれを習得してから、他の方法(私の回答等)も覚えるのがいいと思います。 いろいろな手段をもっていると、場面に応じて最適な方法が選択できますので。
KANNORYUJI

2020/10/02 12:58

はいアドバイスありがとうございます。 これからvbaを使って水準の高い仕事に集中できるように邁進します。
guest

0

VBA

1Sub Test() 2 3 Dim rr As Range 4 Dim bb 5 Dim i As Integer 6 Dim col As Integer 7 8 9 Range("C4") = "AA\BB\CC\DD" 10 Range("C5") = "AA\BB\CC\DD\EE\FF\GG" 11 Range("C6") = "AA\BB\CC\DD\EE\FF\GG\HH\RR\TT\YY" 12 13 For Each rr In Range("C4:C6").Rows 14 bb = Split(rr, "\") 15 col = 7 16 For i = 0 To UBound(bb) 17 Cells(rr.Row, col) = bb(i) 18 col = col + 1 19 Next i 20 Next rr 21 22End Sub

投稿2020/10/02 12:01

meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KANNORYUJI

2020/10/02 12:15

ありがとうございます。For - Next関数の鍛錬中なのでこちらのコードが今は好きです。 想像力が養われるコードに感動しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問