5

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

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

4

4 に答える 4

3

添付の 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
于 2012-10-25T22:46:09.000 に答える
3

@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
于 2012-10-26T00:56:51.790 に答える
2

他の人のために、私は問題を解決しました。「Chr(10) & Chr(10)」を「Chr(13) & Chr(10)」に置き換えたところ、完全に機能しました。

于 2013-05-18T17:37:37.543 に答える