[[20141217170511]] 『項目・データ数の多い固定長テキストデータに簡単』(アイポン) ページの最後に飛ぶ

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

 

『項目・データ数の多い固定長テキストデータに簡単に区切りをつけたい』(アイポン)

 項目数が20以上、データ数が1000を超える固定長フィールドのデータをエクセルで開く時、項目同士がくっついてしまっていて区切り線を入れることがとても難しいです。
 ウィザードウィンドウでは、データフィールドの全部を見ることができないので、入れてはいけないところに区切り線を入れてしまうことも考えられます。
 テキストの状態の時にカンマを入れることも考えたのですが、データ数の多さから断念してしまいました。
 何かいい方法はないでしょうか。

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


区切るためのマクロを作成するのが良いでしょう。

ところで、データは全角半角混ざってます? 半角を1、全角を2と数えたい場合、
VBAでは工夫しないといけないので、かなり面倒です。C言語なら簡単なのですが。

あと、改行コードはCRLF? LFのみ?
(???) 2014/12/17(水) 17:21


???さん、ありがとうございます。
データは半角数字と全角文字が混ざっています。
Windowsなので、改行コードはCR+LFかなと思いますが、そこらへんは詳しくないのではっきり断言できません。申し訳ありません。

(アイポン) 2014/12/17(水) 17:33


例えば、1行に4つのデータがある場合の例。(Arrayは、各データのバイト数)

 Sub test()
    Dim F1 As Integer
    Dim vT As Variant
    Dim cBuf As String
    Dim cw() As String
    Dim i As Long
    Dim iR As Long
    Dim iSt As Long

    vT = Array(3, 8, 3, 8)
    ReDim cw(UBound(vT))

    F1 = FreeFile
    Open "C:\test\data.txt" For Input As #F1
    While EOF(F1) = False
        Line Input #1, cBuf
        cBuf = StrConv(cBuf, vbFromUnicode)
        iSt = 1
        For i = 0 To UBound(vT)
            cw(i) = StrConv(MidB(cBuf, iSt, vT(i)), vbUnicode)
            iSt = iSt + vT(i)
        Next i
        iR = iR + 1
        Cells(iR, "A").Resize(, UBound(vT) + 1) = cw
    Wend
    Close #F1
 End Sub
(???) 2014/12/17(水) 17:51

こんにちは

基本的にはマクロ派なんですけど、テキストウィザードで取込めるデータなら
数式でも出来ると思いますよ。

                                  A     B       C       D       E  〜
1行目には項目開始位置                   1       4       13     15
2行目には文字数算出関数               =C1-B1               B2を右方にフィルコピー
3行目からはデータと数式               =MID($A3,B$1,B$2)    B3を右方、下方にフィルコピー

テキストウィザードでセルA3にデータ取込み。

改行コードの無い固定長データとかだと厳しいですけど。

(ウッシ) 2014/12/18(木) 07:54


???さん、ウッシさん。ありがとうございます。
頑張ってやってみたいと思いますm(_ _)m
(アイポン) 2014/12/18(木) 09:26

コメント返信:

[ 一覧(最新更新順) ]


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