[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストファイルをエクセルに変換する』(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.