Excel 如何转换一组列并将输出保存为CSV

Excel 如何转换一组列并将输出保存为CSV,excel,vba,csv,Excel,Vba,Csv,我在列中有一组很长的信息,有时有数百行(这是通过VBA生成的)。我需要转置它,并将其保存为CSV(因为excel将用完列) 附上该表的屏幕截图 任何帮助都将提前得到感谢 这个问题有两种不同的答案。我相信这对很多其他人来说都是有价值的 您需要将一些代码导出到CSV,例如从这个答案 只需更改写入文件的顺序。例如,在写行之前先写列 Sub WriteFile() Dim ColNum As Integer Dim Line As String Dim LineValues() As V

我在列中有一组很长的信息,有时有数百行(这是通过VBA生成的)。我需要转置它,并将其保存为CSV(因为excel将用完列)

附上该表的屏幕截图

任何帮助都将提前得到感谢


这个问题有两种不同的答案。我相信这对很多其他人来说都是有价值的

您需要将一些代码导出到CSV,例如从这个答案 只需更改写入文件的顺序。例如,在写行之前先写列

Sub WriteFile()

  Dim ColNum As Integer
  Dim Line As String
  Dim LineValues() As Variant
  Dim OutputFileNum As Integer
  Dim PathName As String
  Dim RowNum As Integer
  Dim SheetValues() As Variant

  PathName = Application.ActiveWorkbook.Path
  OutputFileNum = FreeFile

  Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum

  'Print #OutputFileNum, "Field1" & "," & "Field2"

  SheetValues = Sheets("RawData").Range("A1:C249").Value

Dim RowMax
RowMax = UBound(SheetValues)
Dim ColMax
ColMax = 3
ReDim LineValues(1 To RowMax)

  For ColNum = 1 To ColMax
    For RowNum = 1 To RowMax
      LineValues(RowNum) = SheetValues(RowNum, ColNum)
    Next
    Line = Join(LineValues, ",")
    Print #OutputFileNum, Line
  Next

  Close OutputFileNum

End Sub
希望这是一个足够好的版本,可以让您继续使用。

这里有一个较短的版本(我使用Nats代码作为基础)。它应该快得多,因为它不需要循环行

Sub WriteFile()
Dim LR As Long, ColNum As Long, PathName As String, OutputFileNum As String
PathName = Application.ActiveWorkbook.Path
OutputFileNum = FreeFile
Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum
For ColNum = 1 To Cells(1, Columns.Count).End(xlToLeft).column
    LR = Cells(1, ColNum).Offset(Rows.Count - 1, 0).End(xlUp).Row
    CSVString = Join(Application.Transpose(Cells(1, ColNum).Resize(LR, 1)), ",")
    Print #OutputFileNum, CSVString
Next
Close OutputFileNum
End Sub

谢谢。谢谢,谢谢,谢谢