[[20240326115957]] 『変動する要素数の場合のSplit関数について』(双葉) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『変動する要素数の場合のSplit関数について』(双葉)

VBAでSplit関数を使用した処理についてご教授いただければ幸いです。
○○〇→○○○ のような文字列に対して「→」で分割する場合、
下記のようなコードを用いて右側のセルに出力しています。
1行目を見出し、A列に入った文字列の最終行までを処理しています。

Sub TEST()

    Dim i As Long, a As Variant
    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        a = Split(Cells(i, 1), "→")
        Cells(i, 2) = a(0)
        Cells(i, 3) = a(1)
    Next i
End Sub

ただ要素数が決まっているパターンでしか使用できない為、
下記のように変動するパターンの場合はどのようなコードで作成すれば
対応出来るかご教授いただければと思います。

(例)下記は全てA列に入力された文字列と仮定
〇〇〇→○○○
○○○→○○○→○○○
○○○
○○○→○○○→○○○→○○○→○○○
○○○→○○○→○○○
※上記を最終行まで「→」毎にB列以降に分割して書き出ししたい

上記のように「→」を境に分割処理を行いたい場合、
要素数が行毎に変動するパターンでの書き出しについて、
最終行まで処理する方法で悩んでおります。

何卒ご教授いただければ幸いです。
宜しくお願い致します。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 こんな感じかな?

 Sub TEST()
     Dim i As Long, a As Variant

     For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
         a = Split(Cells(i, 1) & "→", "→")
         Cells(i, 2).Resize(, UBound(a)) = a
     Next i
 End Sub

 "→"を後ろに補って分割し、最後の空白は転記対象外にする。

(半平太) 2024/03/26(火) 13:16:16


>半太郎 様
早速ご回答頂きありがとうございます。
ご提示頂いたコードで動作したところ、希望通りとなりました。

変動する要素数の場合、「LBound」「UBound」で取得する方法と、
その動作を最終行まで繰り返す動作を合わせるところで四苦八苦しておりましたが、
ご提示頂いたような短い文法で対応出来るのですね・・・

初心者の為、もっと勉学に励みます。
この度はご回答頂きありがとうございました。

(双葉) 2024/03/26(火) 13:26:04


>半平太 様
ユーザー名の誤入力、大変失礼致しました。
(双葉) 2024/03/26(火) 13:27:08

 splitとは別の方法

 Sub test()
    Dim r As Range

    Set r = Range("a2", Cells(Rows.Count, 1).End(xlUp))
    r.TextToColumns Destination:=r.Columns(2), DataType:=xlDelimited, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="→"

 End Sub
(マナ) 2024/03/26(火) 14:04:03

>マナ 様
ご教授頂きありがとうございます。
TextToColumns Destination メソッド というやり方もあるのですね…
大変勉強になります。

関数ではTEXTSPLIT関数が使用出来るので、
VBAでもSplit関数でsか実現出来ないのかと思っておりました。
※対象の関数がVBAに組み込めなかったのが相談の理由でした

1つのやり方に執着せず模索出来るよう勉強致します。

>ご返信頂いた皆様
皆様ご親切に教えて頂いてありがとうございました<(_ _)>

(双葉) 2024/03/26(火) 14:30:50


 Sub test()
    Dim r As Range

    Set r = Range("a2", Cells(Rows.Count, 1).End(xlUp)).Columns(2)
    r.Formula2R1C1 = "=textsplit(rc[-1],""→"")"
    r.EntireRow.Value = r.EntireRow.Value

 End Sub
(マナ) 2024/03/26(火) 15:08:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.