[[20200731210035]] 『VBAを使用した区切り ダブ カンマについて』(ポカタン) ページの最後に飛ぶ

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

 

『VBAを使用した区切り ダブ カンマについて』(ポカタン)

エクセルVBA を使用して十数万行のデータの区切りをしたいと思っています。
対象は「ダブ」と「カンマ」なのですが

データがA〇列に
"abcd","abcd2","abcd3","abcd4","abc,d5"

となっています

これをA〜E列に

abcd abcd2 abcd3 abcd4 abc,d5

と区切りたいのですが

ar = Split(Replace(s, """", ""), ",")

とすると

abcd abcd2 abcd3 abcd4 abc d5

最後の列が「abc」と「d5」が分離してしまいます

どうすれば解決できるのでしょうか。

十数万行の処理行う為、なるべく処理の軽い方法で作成しようと思っているのですが、どなたかご教授いただけませんでしょうか。

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


すいません。追記です。現在検証中のデータ添付しし忘れ取りました。

'

    Dim ar          'Split分割後の配列
    Dim iCol        '列位置
    Dim i           'ループカウンタ
    Dim t  As String         '判別ループカウンタ
    Dim s           '元文字列
    Dim div         '分割後文字列
    Dim k As String 'スペース削除

    'A1セルを初期位置をして選択
    Sheets("Sheet1").Range("A1").Select
    i = 0

    Do
        s = ActiveCell.Offset(i, 0).Value
        'セルに未入力の場合はここで処理を終了する
        If s = "" Then
            Exit Do
        End If

        'カンマ区切りで配列化 ""削除
        ar = Split(Replace(s, """", ""), ",")

        Sheets("Sheet1").Range("A" & i + 1).Value = i

        iCol = ActiveCell.Column

        For Each div In ar

            ActiveCell.Offset(i, iCol).Value = div

            iCol = iCol + 1
        Next

        i = i + 1
    Loop
(ポカタン) 2020/07/31(金) 21:34

>データがA〇列に
>"abcd","abcd2","abcd3","abcd4","abc,d5"

A〇列ってどういう意味ですか?
AO(エイオー)列でもないですよね。
A列ということでいいんですか?

それなら一般機能の「データ区切り」を使うのが一番でしょう。

うーん?タブってどこに関係するんですか?
正確に書いていただきたいですね。

(γ) 2020/07/31(金) 21:41


「区切り位置」でした。訂正です。
どうしてもマクロなら記録してください。
参考情報がえられるはずです。

(γ) 2020/07/31(金) 21:58


もしかしてダブルクォーテーションのことを「ダブ」と呼んでいるのでしょうか。
ローカルな符丁をこういう場で使っても話が通じづらくなるだけです。
(レッキングバースト) 2020/07/31(金) 22:08

早々のご返答ありがとうございます。

誤記及び理解しづらい説明申し訳ござません。

「タブ」ではなく「ダブ(")」と記載したつもりだったのですが

一般機能の「区切り位置」を使用うのがやはり妥当なのですね。

区切位置処理後の作業が複数あり、まとめて処理するのにマクロでできればと考えていたのですが、

お手数をおかけいたしました。

ありがとうございました。
(ポカタン) 2020/07/31(金) 22:12


おお、ダブと濁点だったのですか。失礼しました。
思い込んでいると濁点は見えません。
初めて見ましたね、こういう呼び方。

いや、手作業でやってくださいとは言っていません。
いくらでもマクロにできます。
>どうしてもマクロなら記録してください。
>参考情報がえられるはずです。
これは実行されましたか?

(γ) 2020/07/31(金) 22:24


 ほとんどマクロ記録そのものですが、こんな風に。

 Sub test()
     Dim rng As Range
     Set rng = Range("A1").CurrentRegion.Columns(1)
     rng.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
         Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
         :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
         TrailingMinusNumbers:=True
 End Sub

 もし項目数が不定ということであれば、
 FieldInfo引数のところは、少し多めに定義しておいても問題ないと思います。
(γ) 2020/07/31(金) 22:49

コメント返信:

[ 一覧(最新更新順) ]


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