• 締切済み

テキストファイルの文字列操作

改行やカンマで区切られていないテキストファイルがあります。(「-」は半角スペースと見てください。) 11111-----aaaaaaaa--22222222--55555555-- 44444444--・・・・ といったように、スペースを含む10バイトが1つのデータとなっています。最初の10バイトのデータは必ず内5バイトがスペース、そのあとのデータは2バイトがスペースという決まりがあり、かなりのデータ量があります。 これを 11111 aaaaaaaa 22222222 55555555 44444444 というふうにスペースは除き改行したいのです。 スペースの数が一定ではないので、置換できません。VBAなどでいい方法はありますか?

  • jinah
  • お礼率40% (118/291)

みんなの回答

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.10

> やはりスペースが除かれた全てコードがExcelのA1のセルに1行で表示されただけでした。 > 11111-----aaaaaaaa--22222222--55555555-- 44444444-- 上記データの、"-" 部分を半角スペースに置換してテストしてください。 Sub テストA()   Const strInData   As String _     = "11111   aaaaaaaa 22222222 55555555 44444444 "      Dim varData   As Variant   Dim lngIdx   As Long      varData = Split(strInData, " ", , vbTextCompare)   For lngIdx = LBound(varData) To UBound(varData)     If Len(Trim(varData(lngIdx))) > 0 Then       Debug.Print Trim(varData(lngIdx))     End If   Next lngIdx    End Sub 上記コードで確認した結果、イミディエイトウィンドウに 11111 aaaaaaaa 22222222 55555555 44444444 と表示されませんか? #Acc2000で確認しました。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.9

> インデックスが有効範囲内にありません。とエラーが表示されます > For i = 0 To 5 配列を使う場合&要素数が確定できない場合は、 LBound,UBound を使うといいですね。 imogasi さんのコードを拝借して。。 b = Split(a, " ") For i = LBound(b) To UBound(b)   Cells(j, "a") = b(i)   j = j + 1 Next i ではどうでしょうか?

jinah
質問者

補足

Gin_Fさん、エラーは出なかったんですが、やはりスペースが除かれた全てコードがExcelのA1のセルに1行で表示されただけでした。 なぜスペースが改行に変わらないのでしょう?またテキストファイルに反映はされないのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

#7です。 >インデックスが有効範囲内にありません。とエラーが表示されます For i = 0 To 5 の後のb(i)の要素数 i が0から5が不適当であると言うエラーです。Splitした結果5(6番目)がないということです。Splitの区切り文字(2スペースで私はやりましたが、いろいろ試行して見てください。 また6項目の場合が0-5ですが、0-4にするとか してやって見てください。テストデータ・本番データのデータの有り様と関連しますので、そのデータを見ないと正確には答えられませんが。私も試行錯誤して、私のテスト データでは0-5で旨く行きました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

Split関数でやって見ました。必ず旨く行く自信はないが、他の方法として、下記コードの一部を細工すれば、必ずうまく行くと思う。(スペースでない文字の出現を 調べるとかすれば) (テストデータ) 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 同じ内容なのは手抜きしただけで意味なし。 (コード)VBAまたはVB。エクセルVBAでやった。 Sub test01() Open "c:\my documents\aa2.txt" For Input As #1 j = 1 While Not EOF(1) Line Input #1, a b = Split(a, " ") '2半角スペース For i = 0 To 5 If Mid(b(i), 1, 2) = "" Then GoTo p01 '注 ' MsgBox b(i) Cells(j, "a") = b(i) j = j + 1 p01: Next i Wend Close #1 End Sub (注)ここは=""(空白)とすべきか、=" "と1半角スペースとすべきか?私の例では=""で下記結果になった。 (結果)セルA1:A24 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 11111 aaaaaaaa 22222222 55555555 44444444 aaaaaaaa 22222222 55555555 44444444

jinah
質問者

補足

回答ありがとうございます。 開くファイルのパスを変更して、ExcelVBAで実行しましたが、インデックスが有効範囲内にありません。とエラーが表示されます。ExcelのA1のセルにスペースがなくなった状態のデータ全てが1行で書き出されてしまいました。 Win2000、OfficeXPを使用しています。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.6

アプリや、バージョンが一切不明ですが。。 Split 関数で、分割してやればいいかと。 結果が配列となりますので、For Next でセルなりに書き込んでやれば いいですね。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.5

10文字ずつよみとって、初回5文字、以降8文字だけ表示。 Cでプログラム書いたほうがてっとりばやいのですが、カテゴリが「Microsoftアプリケーション」という事で、Windows Scripting Host/JScriptで: <job><script language="JScript"> var fname = WScript.Arguments.Item(0); var fso = WScript.CreateObject( 'Scripting.FileSystemObject' ); var i = fso.OpenTextFile( fname ) var len_data = 5; while ( !i.AtEndOfStream ){ WScript.Echo( i.Read( 10 ).substr( 0, len_data ) ); len_data = 8; } </script></job>

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

#1のmshr1962です。すみません。訂正します。 テキストファイルでしたね。#1はエクセルの場合です。 「VBAなどで」があったので間違えました。 まあ、エクセルで開いて行えば可能とは思いますが #3の方の言われるように、別のソフトで置換した方が簡単だと思います。

  • schwarzes
  • ベストアンサー率51% (15/29)
回答No.3

正規表現が使用できるテキストエディタで、 1個以上のスペースを改行に置換すればいいと思うのですが? 自分はK2Editorを使用しています

参考URL:
http://web.kyoto-inet.or.jp/people/koyabu/
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

最初の区切りが5スペース、その後のすべての区切りが2スペースなんですよね? "--" → "改行" "---" → "" この2回の置換でできませんか? あるいは "--" → "改行" で1度置換した後、残った3スペースを手動で削除する方法もあります。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

横方向なら「データ」「区切り位置」で「カンマや...」を選択して 「スペース」にチェックで A____|B_______|C_______|D_______|E_______ 11111|aaaaaaaa|22222222|55555555|44444444 の様に分解できます。 これを縦方向にする場合はコピーして、 「形式を選択して貼り付け」で「行と列を入れ替える」

関連するQ&A

  • VBAでの文字列置換

    表題のとおりですが、過去の質問では良い回答が 見当たりませんでした。 ・やりたいこと ”A”->”001” ”B”->”002” ”C”->”003” ”D”->”004” のようにテキストの置換候補があり(置換、置換対象のテキストは全角、半角さまざまです)、 それをExcelのワークシートに適用したいです。 やり方はどういうやり方でも良いです。ただ置換リストは追加、変更する必要があります。 VBAのreplaceを利用した置換マクロを作成すればよいのでしょうか。 当方、Word用の簡単なVBAマクロの作成経験はありますが、 Excelでは利用したことがありません。 ある程度具体的に御教授いただけると助かります。 よろしくお願いします。

  • excelvba 文字列の変更

    Excel2010 VBAについて、ご教授をお願い致します。 1つのセルに入力されている文字列の変更について以下の様に変更したいのですが、簡単にできる方法はございますか? (色々と試しましたが、うまくいきません。)    既内容                → 変更後内容  ・「、」(読点)+改行(読点は半角を含む) → 読点だけにする(改行を削除)  ・「。」(句点)+改行(句点は半角を含む) → 句点だけにする(改行を削除)  ・「,」 (半角のカンマ)+改行    → 半角のカンマだけにする(改行を削除)  ・「.」 (半角のピリオド)+改行   → 半角のピリオドだけにする(改行を削除)  ・改行(のみ)           → 読点(、)にする。 以下にサンプルを記述します。 ☆元データ あああ、(改行) おおお(改行) いいい。(改行) ううう,(改行) えええ.(改行) ☆求める結果の内容(「おおお」の次の文字「、」は改行を置換え) あああ、おおお、いいい。ううう,えええ. よろしくお願いいたします。

  • カンマ形式のテキストファイルの置換

    テキストファイルの変換に困っています. 1,2,3,4 5,6,7,8 というデータを 1 2 3 4 5 というように置換操作でカンマ→改行にしたいと 思っています. ・秀丸の場合 ,→\n(改行文字)でできます. でもメモ帳の場合は\nのようなエスケープシーケンス は使えません メモ帳で置換後の文字列を改行にしたいのですが どのようにしたらいいでしょうか?教えてください メモ帳でだめならエクセルではできないでしょうか?

  • テキストのコピペについて

    お世話になります。 以下の内容で困っております。どなたかご教授お願い致します。 ●PDFに膨大なページの文章が元データとして存在しており、それらのテキストデータを一点一点項目ごとにエクセルのセルへコピーしています。 PDFからエクセルのセルへコピーすると、表示されない文字があります。たとえば、半角(-)や半角(/)など、エクセル上で文字コードを一個一個調べて、置換しようと思ったのですが、置換の必要のない半角(スペース)までもが置換されてしまいます。 エクセル上で調べるとCODE(32)で半角(-)や半角(スペース)となっています。 このような置換をする場合は、正規表現の可能なテキストエディターで 置換するしかないでしょうか?

  • エクセル2003のマクロでテキストファイルのデータを置換しようとしてい

    エクセル2003のマクロでテキストファイルのデータを置換しようとしています。 下記のようなデータが***.txtファイルに入っています。 a)を半角スペース2つに置換したいのですがどうしたらできるのか、 2文字の置換方法をご存知の方教えていただけないでしょうか? LinInputでデータを1行ずつ読み込み、 左の数値データも半角スペースに置換し、 Trimでスペースを削除しようと思います。 【入力データ】 10  55567 444  987   11  456b) 2345 789  a12 12 123a) 456 888 b17 ・ ・ ・ 【出力データ】 55567 444  987   456b) 2345 789 123 456 888 ・ ・ ・

  • Excelのセル内にある特定文字で改行させたい

    ある汎用のシステムから出力されるテキスト(文章)をCSV形式のデータをEXCELデータに変換しています。そのEXCELに変換されたデータは、文章です。 1点問題があります。そのセル内の文章は、ある特定の記号を改行の代わりとして、連続したテキスト文章になっているため、非常に読み辛いものになっていますいます。その改行を意味する特定記号は、複数個存在し、セル内の個数は一定ではありません。  そのため、読み辛さを解消するためい、その特定記号をセル内での改行に置換させる、マクロまたはVBAでの一括処理することが出来ないでしょうか。置換処置後は、特定記号は不要です。 なお、(1)改行を意味する特定記号は、「~|」です。~と|の組み合わせで、それはそれぞれ半角表記されています。(2)1ファイルにおける対象レコード(行)は、約3,000~10,000行あり、手作業での処理は不可能です。 宜しくお願いします。

  • テキストファイル中のカタカナ文字をスペースに変換

    エクセル(VBA)で テキストファイル(.txt)中の半角カタカナ文字を半角スペース文字に置き換えたいのですが ネットで検索しても同じ項目が探しきれませんでした。 どのようなコードが考えられますか ? Office 2019

  • テキストファイルについて

    あるデータがカンマ区切りなのか、タブ区切りなのか、スペース区切りなのかはテキストファイルにしてメモ帳で開いて確認するしかないんでしょうか? 宜しくお願いします。

  • 置換のことで

    エクセルの置換のVBAのことですが。 あるシートに沢山の文字列が入力されています。 abcという文字列が含まれるセルの最後の部分は、必ず以下のようになります。 カンマ 半角スペース 数字 カンマ 半角スペース 数字  閉じカッコ  ,             13    ,            56       ) 数字はばらばらで、1桁か2桁のどちらかで0はないです。 このような状況で、閉じカッコの左側の数字を全て 1 に置換するVBAが知りたいのですが。

  • VBAでテキストファイルからデータを読み込む方法

    VBAでテキストファイルからデータを読み込む方法を探しています。 コンマ区切りのデータを、エクセルに書き込みたいです。 テキストファイルにはコンマ区切りで6個のデータを書き込んであります。 それを、セルD3からD7に書き込む方法を教えていただきたいです。よろしくお願いします。

専門家に質問してみよう