web-dev-qa-db-ja.com

Excelスプレッドシートのすべての行からテキストファイルを作成する

「ワークシート」と呼ばれるExcelスプレッドシートの各行から個別のテキストファイルを作成するのに助けが必要です。テキストファイルに列Aのコンテンツで名前を付けたいのですが、列B〜Gがコンテンツであり、テキストファイルの各列の間にダブルハードリターンがあるので、各列の間に空白行があります。

これは可能ですか?どうすればいいですか。ありがとう!

5
user1775582

@nutschの答えは完全に問題なく、99.9%の確率で機能するはずです。 FSOが利用できないまれなケースですが、これは依存関係のないバージョンです。現状では、ソースワークシートのコンテンツセクションに空白行がないことが必要です。

Sub SaveRowsAsCSV()

Dim wb As Excel.Workbook, wbNew As Excel.Workbook
Dim wsSource As Excel.Worksheet, wsTemp As Excel.Worksheet
Dim r As Long, c As Long

    Set wsSource = ThisWorkbook.Worksheets("worksheet")

    Application.DisplayAlerts = False 'will overwrite existing files without asking

    r = 1
    Do Until Len(Trim(wsSource.Cells(r, 1).Value)) = 0
        ThisWorkbook.Worksheets.Add ThisWorkbook.Worksheets(1)
        Set wsTemp = ThisWorkbook.Worksheets(1)

        For c = 2 To 7
            wsTemp.Cells((c - 1) * 2 - 1, 1).Value = wsSource.Cells(r, c).Value
        Next c

        wsTemp.Move
        Set wbNew = ActiveWorkbook
        Set wsTemp = wbNew.Worksheets(1)
        'wbNew.SaveAs wsSource.Cells(r, 1).Value & ".csv", xlCSV 'old way
        wbNew.SaveAs "textfile" & r & ".csv", xlCSV 'new way
        'you can try other file formats listed at http://msdn.Microsoft.com/en-us/library/office/aa194915(v=office.10).aspx
        wbNew.Close
        ThisWorkbook.Activate
        r = r + 1
    Loop

    Application.DisplayAlerts = True

End Sub
2
ExactaBox

添付のVBAマクロがそれを実行し、txtファイルをC:\ Temp \に保存します。

Sub WriteTotxt()

Const forReading = 1, forAppending = 3, fsoForWriting = 2
Dim fs, objTextStream, sText As String
Dim lLastRow As Long, lRowLoop As Long, lLastCol As Long, lColLoop As Long

lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

For lRowLoop = 1 To lLastRow

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set objTextStream = fs.opentextfile("c:\temp\" & Cells(lRowLoop, 1) & ".txt", fsoForWriting, True)

    sText = ""

    For lColLoop = 1 To 7
        sText = sText & Cells(lRowLoop, lColLoop) & Chr(10) & Chr(10)
    Next lColLoop

    objTextStream.writeline (Left(sText, Len(sText) - 1))


    objTextStream.Close
    Set objTextStream = Nothing
    Set fs = Nothing

Next lRowLoop

End Sub
3
nutsch

他の人の利益のために、私は問題を整理しました。 「Chr(10)&Chr(10)」を「Chr(13)&Chr(10)」に置き換えたところ、問題なく動作しました。

2
Brian

以下の簡単なコードを使用して、Excelの行をテキストファイルまたは他の多くの形式でかなり長い間保存しましたが、それは常に機能していました。

サブsavemyrowsastext()
薄暗いx

Sheet1.Range( "A1:A"&Sheet1.UsedRange.Rows.Count)の各セル
'sheet1を自分の選択に変更できます
saveText = cell.Text
「C:\ wamp\www\GeoPC_NG\sogistate\igala_land\"&saveText&"。php」を開いて#1として出力します
印刷#1、cell.Offset(0、1).Text
閉じる#1
For x = 1 To 3 'ループを3回。
ビープ音 'トーンを鳴らします。
次のx
次のセル
End Sub

注意:

1。列A1 =ファイルタイトル
2。列B1 =ファイルの内容
3。テキストを含む最後の行(つまり空の行)まで

逆の順序で、このようにしたい場合。

1。列A1 =ファイルタイトル
2。列A2 =ファイルの内容
3。テキストを含む最後の行(つまり空の行)まで、Print#1、cell.Offset(0、1).Textを変更するだけです。 to Print#1、cell.Offset(1、0).Text

私のフォルダの場所= C:\ wamp\www\GeoPC_NG\kogistate\igala_land \
私のファイル拡張子= .php、拡張子は自分で選択できます(.txt、.htm、.csvなど)各保存の最後にbipサウンドを含めて、作業が進行しているかどうかを確認します
薄暗いx
For x = 1 To 3 'ループを3回。
ビープ音 'トーンを鳴らします。

2