[[20051124093035]] 『テキストファイルをエクセルに変換する』(masabou5) >>BOT

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

 

『テキストファイルをエクセルに変換する』(masabou5)

 001234567↑123456789↑・・・・

 のようなテキストファイルを下記のようにExcelに変換したいのですが、
 なかなかうまく行かず、困っています。よろしくお願いします。

       A   B   C   D   E   F   G   H   I   
 1     0   0   1   2   3   4   5   6   7
 2     1   2   3   4   5   6   7   8   9


 ↑はタブ区切り? 改行無し?
 そのまま読み込むと列数不足?(読み込んでから処理は可能?)

  (INA)

 失礼しました、↑は空白のつもりでした。
 よろしくお願いします。(masabou5)


 どうぞ。

 Sub sample()
 Dim myPath As String 'ファイルパス
 Dim fp As Integer
 Dim buf As Variant, tmp As String
 Dim i As Long, s As Long 'ループカウンタ
 Dim myStr As String '文字列

    myPath = ThisWorkbook.Path & "\test.txt"

    fp = FreeFile

    Open myPath For Input As #fp

        Do Until EOF(fp)
            Line Input #fp, tmp

            buf = Split(tmp, " ") '半角スペースで分割

            With ActiveSheet
                .Range("A1:Z" & UBound(buf)).NumberFormatLocal = "@" 'セルを文字列
                buf = WorksheetFunction.Transpose(buf) '行列入替
                .Range(.Cells(1, 1), .Cells(UBound(buf), 1)) = buf 'セルに出力

                    '−−−文字分解−−−
                    For i = 1 To UBound(buf) '行ループ
                        myStr = .Cells(i, 1).Value

                        For s = 1 To Len(myStr) '文字ループ
                            .Cells(i, s).Value = Mid(myStr, s, 1)
                        Next s
                    Next i

            End With

        Loop
    Close #fp

 End Sub

  (INA)

 INAさん、早速ありがとうございました。
 ただ、式が少し難しいので、じっくり解読してみたいと思います。

 尚、メニューバーの「データ」→「外部データの取り込み」→「データの取り込み」
 から取り込むことは出来ないのでしょうか?(masabou5)


 取り込めますよ。(分割はできませんが) 
 私の質問に対する回答がなかったので、すべてVBAで処理することにしました。
  (INA)

 INAさん、ありがとうございました。(masabou5)

 面白そうなので多少手間のかかる方法をやってみました。
 001234567 123456789 ・・・・
と続くテキストファイルがあるとします。
 
Excelの適当なセルへ=CHAR(10)と入力しておきます。
 
NotePadなどテキストエディタで開き、検索文字列でスペース、
置換文字列でExcelの=CHAR(10)と入力したセルをコピーし貼り付け、置換します。
 001234567"↑"123456789"↑"・・・・
 
と言う風に置換されます。(手元のエディタでは本当に矢印が表示されている)
["]は邪魔なので、同じく置換で、
検索文字列["]、置換文字列に何も指定せずに置換して["]を消します。
以上の処理を終えてテキストファイルを保存。
 
Excelで データの取り込みでこのテキストファイルを取り込みます。
区切り位置を桁ごとに指定して完了。(みやほりん)

 CHAR(10)はラインフィードですね。

 Excelからは外れますが、みやほりんさんの処理前半部分は
正規表現による置換が可能なエディタ(秀丸とかサクラエディタとか)を用いて
スペースを改行コードに置き換える、と言う方法もあるわね。
(ご近所PG)

 INAさん、みやほりんさん、ご近所PGさん、いつもありがとうございます。

 みやほりんさんのご回答で、最初に書きました 001234567↑123456789↑・・・・の、
 ↑ は単なるスペースと思っていましたが、どうも特別な意味があるのでしょうか?
 というのは、試行錯誤で、このテキストファイルのデータをコピーして、セルに
 貼り付けたところ、↑ の区切りで、縦にデータが振り分けられました。
 少し面白いと思ったことでした。(masabou5)

 masabou5さんがご使用のOS以外で作成されたテキストファイルなのかも知れません。
テキストの改行コード
http://www.rsch.tuis.ac.jp/~mizutani/online/with-pc/textline.html
Windowsで言えば、テキストエディタが対応していない場合等に、
CRLFでは無い改行コードについて正しく表示できない場合があります。
(ご近所PG)と思いつくままに

 ご近所PGさん、ありがとうございます。
 >masabou5さんがご使用のOS以外で作成されたテキストファイルなのかも知れません。
 そうなのでしょうか?よく分からないのですが、ネット上のあるファイルです。
 私のOSはWindows XP ですがOSで違うのでしょうか?(masabou5)

 おそらく違うのでしょう。ネット上のサーバーは様々ですから。
Googleなどの検索エンジンにて「改行コード」等と言ったキーワードで検索すると色々と情報が見つかると思います。
一例
http://tech.bayashi.net/pdmemo/chara.html

 前に似たようなこと書いたなぁと思って検索
[[20040929155005]]『置換の限界文字数』
(ご近所PG)

 ご近所PGさん、いろいろとありがとうございました。
 大変勉強になりました。

 ところで、001234567↑123456789・・・Testというファイル名のtextファイル
 というファイルを作り、INAさんに教えていただいた式を使って、
 下記のようなプロシージャを作り、とりあえず当初の目的を達成しました。
 しかし、最初にCommandButton1を押したときは完璧なのですが、
 そのままもう一度CommandButton1を押すと、列が1個追加になり、おかしな動作をします。
 何故でしょうか?

−−−−−−−−−−−−−−−−−−−−−−−

 Private Sub CommandButton1_Click()
    Call 文字分解
 End Sub

 Private Sub CommandButton2_Click()
    Range("A1:J2").ClearContents
 End Sub

 Sub 文字分解()
    Dim i As Long, s As Long 'ループカウンタ
    Dim myStr As String '文字列

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C\Documents and Settings\owner\My Documents\Test.txt" _
        , Destination:=Range("A1"))
        .Name = "001"
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2) '...文字列としての設定
        .Refresh BackgroundQuery:=False 
    End With

    Application.ScreenUpdating = False
    '−−−文字分解−−−
    For i = 1 To 2 '行ループ
        myStr = Cells(i, 1).Value
        For s = 1 To 9 '文字ループ
            Cells(i, s + 1).Value = Mid(myStr, s, 1)
        Next
    Next
    End Sub

 試す時間は無いので適当に……
処理する前に全部初期化してやれば、何度実行しようが同じ結果が得られるかもしれないわね。
その辺から原因を探って見ると良いかもしれないわね。
Excel特有のQueryTables.Addの挙動は良く分からないけど。
詳しい方Help!と。
あと
    Application.ScreenUpdating = False
にしたのをTrueに戻さないで良いのかしら?
(ご近所PG)


 マクロも特殊エディタも必要なくOffice製品だけで出来ますよ。
 
001234567↑123456789↑・・・・
上のテキストをワードで開く
 
置換え
検索する文字 「↑」(←空白のつもり?)
置換え後の文字 「^p」
で、全て置換え。
 
「↑」で改行されたら、文字を全部コピーしてシートに貼り付けても良いし、
別名保存しエクセルで開いても良いし...。
 
別名保存したテキストファイルを開く時、「スペースによって・・・・」を選んで、
フィールドの幅指定のデータプレビューで、1文字づつに分けて開いてください。 
 
貼り付けた場合も、同じような事をしますが、振り分けに時間がかかると思います。
BJ

 ↑は結局LFみたいですよ。貼り付けたら改行されたと言う事みたいだし、
マクロ取込の勉強でもしたかったんじゃないかしら。
 
「^p」ってなんだろうと思って検索……
MS Wordを使いこなす文字列の検索 その3 書式と特殊文字の検索
http://www.shuiren.org/chuden/teach/word/search/search03.htm
2000には特殊文字ってボタン無いな……
(ご近所PG)へぇ×18

 先ずは、ご近所PGさん、ありがとうございました。
 >処理する前に全部初期化してやれば、何度実行しようが同じ結果が得られるかもしれないわね。
 初期化してすべてうまく行きました。
 >Excel特有のQueryTables.Addの挙動は
 これはマクロの記録から取りました、私もよく分かりませんが、とりあえず出来ました。
 BJさん、ありがとうございました。
 もう少し勉強してみます。
 (masabou5)


コメント返信:

[ 一覧(最新更新順) ]


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