「ワークシート」と呼ばれるExcelスプレッドシートの各行から個別のテキストファイルを作成するのに助けが必要です。テキストファイルに列Aのコンテンツで名前を付けたいのですが、列B〜Gがコンテンツであり、テキストファイルの各列の間にダブルハードリターンがあるので、各列の間に空白行があります。
これは可能ですか?どうすればいいですか。ありがとう!
@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
添付の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
他の人の利益のために、私は問題を整理しました。 「Chr(10)&Chr(10)」を「Chr(13)&Chr(10)」に置き換えたところ、問題なく動作しました。
以下の簡単なコードを使用して、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回。
ビープ音 'トーンを鳴らします。