【问题标题】:How to run Text to Columns only IF column contains data如何仅在列包含数据时运行文本到列
【发布时间】:2016-06-24 15:23:39
【问题描述】:

我需要在一个范围内为列 MACRO 运行文本,该范围因导入的数据而异。我已经有了拆分 vba,只需记录它,但是当列为空白时,它会给我一个“没有要解析的数据”错误。可能有 2 列到 10 列,所以 如果该列为空白,我需要让 vba 忽略“将文本拆分为列”

vba 相当新,所以代码是基本的,但并不复杂。这是我为其中一列记录的拆分:

 Columns("C:C").Select
    Selection.TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :=":", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True

它还拆分列 E、G、I 和 K

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    您可以创建一个循环,查看每一列,如果 CountA() 为 0,则表示其中没有数据。

    Sub t()
    Dim myCols() As Variant
    Dim i As Long
    
    myCols = Array(3, 5, 7, 9, 11)
    
    For i = LBound(myCols) To UBound(myCols)
        If WorksheetFunction.CountA(Columns(myCols(i))) <> 0 Then
            Columns(myCols(i)).TextToColumns Destination:=Cells(1,myCols(i)), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=":", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
        End If
    Next i
    
    End Sub
    

    如果您需要添加/减去列,只需编辑 myCols 数组。

    【讨论】:

    • 我对此进行了测试,但它最终替换了 C 列中第一次拆分后的数据。它正确拆分了 C,但随后 D 列中的数据被删除,并替换了 C 列中的数据如果有意义,请使用 E 列中的数据。问题是目的地总是C1吗?而不是它当前正在进行的任何循环的开始?
    • 尝试将 Range("C1") 更改为 Cells(1,i) 之类的东西 --- 或者您想要的任何位置,例如 Cells(1,i+10)
    • @CodyG。 - 啊,我没听懂,谢谢!我会编辑我的帖子。
    • @Excellerator - 我已经编辑了代码。抱歉,我第一次没有赶上目的地。
    • @BruceWayne 与新编辑一起工作。非常感谢你们!
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多