VBA仅复制excel中的特定列以导出为csv

脆脆的馅料

试图将一个 excel 工作表变成一个只有我需要的数据的 csv。基本上我只需要导出包含数据的列。我对使用 vba 宏很陌生。我制作了一个工作表,其中的单元格链接到 A:AF 列中第一行的组合框。问题是,当我尝试将工作表直接另存为 csv 或使用下面的宏导出时,这些组合框链接的单元格似乎被视为数据。第一个(列标题/变量名称)行的示例,然后是我理想情况下在导出的 csv 中看到的一个观察的示例第一行:

Author,Year,Yield,Treatment
Smith,1999,2.6,notill

Author...Treatment 行最初来自链接到组合框的验证列表受限单元格中的选择,Smith...notill 观察是我粘贴的内容。我看到的示例:

Author,Year,Yield,Treatment,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Smith,1999,2.6,notill,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

然后下面的所有观察行的列数相同。这会产生问题,因为如果我在 SAS 中执行 getnames,我现在有新的变量会搞乱合并。我无法指定列,因为每次创建然后导出时,都有不同数量的列。如果您想要的列是已知的,则有办法解决这个问题,例如这个答案但我希望能够说理想情况下“仅复制非空列”,或者“仅复制第一行中具有以下特定文本之一的列”,因为 A2:AF2 只能包含如果它们不是空的,则是 32 种特定事物之一。这是我将所有这些空白列复制到新工作簿并保存的代码。

Sub CopyToCSV()
Dim MyPath As String
Dim MyFileName As String
'The path and file names:
MyPath = "C:\Users\Data\TxY\"
MyFileName = "TxY_" & Sheets("ValidationHeadings").Range("D3").Value & "_" & Format(Date, "ddmmyy")
'Makes sure the path name ends with "\":
If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
'Makes sure the filename ends with ".csv"
If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"
'Copies the sheet to a new workbook:
Sheets("TxYdata").Copy
'The new workbook becomes Activeworkbook:
With ActiveWorkbook
'Saves the new workbook to given folder / filename:

    .SaveAs Filename:= _
        MyPath & MyFileName, _
        FileFormat:=xlCSV, _
        CreateBackup:=False
'Closes the file
    .Close False
End With
End Sub

我知道这必须非常简单(一个没有任何内容的专栏应该以某种方式脱颖而出,对吧?)但我昨天搜索了大约 4 个小时来了解如何做到这一点。我宁愿不在我变成 csv 的每个工作表中以某种方式划分空列。有什么我可以补充的吗

Sheets("TxYdata").Copy

当我在每个工作表中没有一致的列数时,让它只复制我实际输入数据的列?或者其他可以完成工作的东西。非常感谢!

李戴

测试此代码。

Sub TransToCSV()

    Dim vDB, vR() As String, vTxt()
    Dim i As Long, n As Long, j As Integer
    Dim objStream
    Dim strTxt As String
    Dim rngDB As Range, Ws As Worksheet
    Dim MyPath As String, myFileName As String
    Dim FullName As String


    MyPath = "C:\Users\Data\TxY\"
    myFileName = "TxY_" & Sheets("ValidationHeadings").Range("D3").Value & "_" & Format(Date, "ddmmyy")
    If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
    If Not Right(myFileName, 4) = ".csv" Then myFileName = myFileName & ".csv"
    FullName = MyPath & myFileName

    Set Ws = Sheets("TxYdata")
    Set objStream = CreateObject("ADODB.Stream")

    With Ws
        Set rngDB = .Range("a1", "d" & .Range("a" & Rows.Count).End(xlUp).Row)
        'Set rngDB = .Range("a1").CurrentRegion <~~ Else use this codle
    End With

    vDB = rngDB
    For i = 1 To UBound(vDB, 1)
        n = n + 1
        ReDim vR(1 To UBound(vDB, 2))
        For j = 1 To UBound(vDB, 2)
            vR(j) = vDB(i, j)
        Next j
        ReDim Preserve vTxt(1 To n)
        vTxt(n) = Join(vR, ",")
    Next i
    strTxt = Join(vTxt, vbCrLf)

    With objStream
        '.Charset = "utf-8"
        .Open
        .WriteText strTxt
        .SaveToFile FullName, 2
        .Close
    End With
    Set objStream = Nothing

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel VBA仅复制特定列中的非空白行

来自分类Dev

VBA Excel将文件导出为.csv,同时将数据保留在适当的列中

来自分类Dev

Excel VBA将特定的列导出到CSV

来自分类Dev

在 Excel 中为 CSV 选择导出列

来自分类Dev

从Excel导出为CSV

来自分类Dev

将 Pandas DataFrame 转换为 CSV 但仅导出特定列

来自分类Dev

在VBA中复制并粘贴特定的列

来自分类Dev

使用Excel VBA复制列中的范围

来自分类Dev

在Excel-Vba中复制多列

来自分类Dev

仅当Excel VBA中的列(例如名称)上存在数据时,才复制和粘贴列

来自分类Dev

如何仅将特定列包括为Excel表中的轴类别

来自分类Dev

如何仅复制和粘贴每个文件中的特定列?

来自分类Dev

从asp.net导出到Excel时,仅将Excel中的1列格式化为强制文本并将所有其他列保留为数字

来自分类Dev

VBA Excel 将行导出到 .txt 中的列

来自分类Dev

清除Excel VBA中的特定列集

来自分类Dev

VBA多个FreeFile导出为CSV

来自分类Dev

Excel VBA 仅复制粘贴值

来自分类Dev

自动将Excel(XLS)导出为CSV

来自分类Dev

在Asp.net C#中仅将Gridview数据导出为Excel格式

来自分类Dev

仅选择CSV的特定列

来自分类Dev

使用VBA将Access中的特定数据复制到Excel的特定字段中

来自分类Dev

使用令牌仅解析csv文件中的特定列

来自分类Dev

复制粘贴为值 Excel VBA

来自分类Dev

导出(打印,pdf,excel,复制)Angular Data Table中的选定列

来自分类Dev

使用Excel VBA在CSV中验证特定数据

来自分类Dev

Powershell CSV命令使用特定列导出

来自分类Dev

复制Excel范围,并在VBScript中仅将值(pasteSpecial)粘贴为带跳空白

来自分类Dev

如何在Android中实现将sqlite导出为excel / csv文件?

来自分类Dev

excel VBA,在将多个CSV文件复制到一个工作簿中的单元格中创建带有工作表或文件名的列

Related 相关文章

  1. 1

    Excel VBA仅复制特定列中的非空白行

  2. 2

    VBA Excel将文件导出为.csv,同时将数据保留在适当的列中

  3. 3

    Excel VBA将特定的列导出到CSV

  4. 4

    在 Excel 中为 CSV 选择导出列

  5. 5

    从Excel导出为CSV

  6. 6

    将 Pandas DataFrame 转换为 CSV 但仅导出特定列

  7. 7

    在VBA中复制并粘贴特定的列

  8. 8

    使用Excel VBA复制列中的范围

  9. 9

    在Excel-Vba中复制多列

  10. 10

    仅当Excel VBA中的列(例如名称)上存在数据时,才复制和粘贴列

  11. 11

    如何仅将特定列包括为Excel表中的轴类别

  12. 12

    如何仅复制和粘贴每个文件中的特定列?

  13. 13

    从asp.net导出到Excel时,仅将Excel中的1列格式化为强制文本并将所有其他列保留为数字

  14. 14

    VBA Excel 将行导出到 .txt 中的列

  15. 15

    清除Excel VBA中的特定列集

  16. 16

    VBA多个FreeFile导出为CSV

  17. 17

    Excel VBA 仅复制粘贴值

  18. 18

    自动将Excel(XLS)导出为CSV

  19. 19

    在Asp.net C#中仅将Gridview数据导出为Excel格式

  20. 20

    仅选择CSV的特定列

  21. 21

    使用VBA将Access中的特定数据复制到Excel的特定字段中

  22. 22

    使用令牌仅解析csv文件中的特定列

  23. 23

    复制粘贴为值 Excel VBA

  24. 24

    导出(打印,pdf,excel,复制)Angular Data Table中的选定列

  25. 25

    使用Excel VBA在CSV中验证特定数据

  26. 26

    Powershell CSV命令使用特定列导出

  27. 27

    复制Excel范围,并在VBScript中仅将值(pasteSpecial)粘贴为带跳空白

  28. 28

    如何在Android中实现将sqlite导出为excel / csv文件?

  29. 29

    excel VBA,在将多个CSV文件复制到一个工作簿中的单元格中创建带有工作表或文件名的列

热门标签

归档