[[20210120121252]] 『行末の余計なタブを除去してテキスト保存がしたい』(むーば) ページの最後に飛ぶ

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

 

『行末の余計なタブを除去してテキスト保存がしたい』(むーば)

	A	B	C	D
1	い	ろ	は	
2	あ	い	う	え
3	一	二		
4	A	B	C	

タブ区切りのテキストファイルで保存したいのですが
行末文字以降のタブを削除した状態で保存する方法をご教授ください
VBAで処理したいです

<こうなるのを> 「_」はタブ
い_ろ_は_
あ_い_う_え
一_二__
A_B_C_

<こうしたい>
い_ろ_は
あ_い_う_え
一_二
A_B_C

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


条件文で空白時は未処理とし、出来上がった
書込み用文字列を左から文字列の文字数−1分
切り出したものを書き込めば出来るかも。。。
m(__)m
(隠居じーさん) 2021/01/20(水) 12:44

 こんにちは ^^ ↓ な感じです。他にもたくさん方法は
あるかと。。。m(__)m
 Option Explicit
Sub OneInstanceMain()
    Const zProgramID As String = "IJ00191.xlsm"
    Dim zTb As Workbook
    Dim i As Long
    Dim j As Long
    Dim fnm As String
    Dim v() As Variant
    Dim buf As String
    Dim t As Date
    t = Timer
    Set zTb = Workbooks(zProgramID)
    fnm = zTb.Path & "\mytabsv.txt"
    With zTb.Worksheets("Sheet1")
        v = .Cells(1).CurrentRegion.Value
    End With
    Open fnm For Output As #1
    For i = 1 To UBound(v, 1)
        For j = 1 To UBound(v, 2)
            If v(i, j) <> "" Then
                buf = buf & v(i, j) & Chr(9)
            End If
        Next
        buf = Left(buf, Len(buf) - 1)
        Print #1, buf
        buf = ""
    Next
    Close #1
    Set zTb = Nothing
    MsgBox "終了 " & Format(Int(Timer - t) / 24 / 60 / 60, "hh : mm : ss") & _
                      Format((Timer - t) - Int(Timer - t), ".000") & " 秒"
End Sub
(隠居じーさん) 2021/01/20(水) 12:48

ありがとうございます。

	A	B	C	D
1			は	
2	あ	い	う	え
3	一	二		
4		B	C

上記のようなケースを忘れており

__は
あ_い_う_え
一_二
_B_C

のように出力可能でしょうか?
(むーば) 2021/01/20(水) 13:19


 既に動作する回答を頂いていますが、こんな書き方も。
 Sub test()
     Dim s As String, k As Long, r As Range
     Open "TESTFILE.txt" For Output As #1
     For k = 1 To Cells(Rows.Count, 1).End(xlUp).Row
         Set r = Range(Cells(k, 1), Cells(k, Columns.Count).End(xlToLeft))
         If r.Count > 1 Then
             s = Join(Application.Index(r.Rows.Value, 0), vbTab)
         Else
             s = r.Value
         End If
         Print #1, s
     Next
     Close #1
 End Sub
 (最終行の求め方は、あなたのほうで修正してください。
  要件の後出しに間に合わなかったので。)

 ちなみに、普通にタブ区切りで保存してから、
 正規表現が使えるテキストエディター(例:秀丸)を使って、
 \t*\n
 を
 \n
 に置換するのが手っ取り早いかもしれません。

 なお、出来上がったtextファイルの使途が不明ですが、
 もし、またExcelで読み込む前提なら、
 特にご要望の加工をしなくても、
 開いたファイルは、右端は現状どおりのものになりますよ。
(γ) 2021/01/20(水) 13:29

γ様 ありがとうございます。
問題なく動作することを確認しました。活用させていただきます。

隠居じーさん様 ありがとうございました。
考え方非常に参考になりました。
(むーば) 2021/01/20(水) 13:51


 むーば さん みていなかったです。
すみません。 m(__)m
γさん、 ありがとうございます。
m(__)mm(__)mm(__)m
(隠居じーさん) 2021/01/20(水) 18:05

横から闖入して失礼しました。
 
なお、私のコードで以下のところは
s = Join(Application.Index(r.Rows.Value, 0), vbTab)
↓これでOKでした。
s = Join(Application.Index(r.Value, 0), vbTab)
これは二次元配列をJoinが使えるように一次元配列に変換する目的のものです。
閲覧されている方への補足でした。

(γ) 2021/01/20(水) 22:10


コメント返信:

[ 一覧(最新更新順) ]


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