【问题标题】:Convert text to columns in Excel using VBA使用 VBA 将文本转换为 Excel 中的列
【发布时间】:2018-10-23 16:41:15
【问题描述】:

我正在尝试使用宏将文本转换为列,但我无法做到这一点,我试图记录一个宏来实现这一点,但是我遇到了一些问题,因为文本到列 VBA函数需要一个选择,有没有一种方法可以让我选择范围 A7:A50000?甚至更好的 A7:lastnonempty 单元格?

谢谢,

仅供参考,分隔符并不重要,因为我需要这样做才能将文本转换为公式

这是我的代码

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

【问题讨论】:

  • 你试过什么?如果您发布您使用的代码,您应该立即了解如何执行此操作(除非我完全误解了您的问题)。
  • 我试过了,但只有在我只选择了某些东西时才有效,我想让选择动态化(A7:A50000?甚至更好的 A7:lastnonempty 单元格?)

标签: vba excel


【解决方案1】:

试试这个

Sub Txt2Col()
    Dim rng As Range

    Set rng = [C7]
    Set rng = Range(rng, Cells(Rows.Count, rng.Column).End(xlUp))

    rng.TextToColumns Destination:=rng, DataType:=xlDelimited, ' rest of your settings

更新:按钮点击事件作用于另一张纸

Private Sub CommandButton1_Click()
    Dim rng As Range
    Dim sh As Worksheet

    Set sh = Worksheets("Sheet2")
    With sh
        Set rng = .[C7]
        Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp))

        rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote,  _
        ConsecutiveDelimiter:=False, _
        Tab:=False, _
        Semicolon:=False, _
        Comma:=True, 
        Space:=False, 
        Other:=False, _
        FieldInfo:=Array(Array(1, xlGeneralFormat), Array(2, xlGeneralFormat), Array(3, xlGeneralFormat)), _
        TrailingMinusNumbers:=True
    End With
End Sub

注意. 的(例如.Range)它们引用With 语句对象

【讨论】:

  • 您好 CHris,我尝试了您的解决方案,但出现此错误,“Microsoft Excel 一次只能转换一列...”。有什么想法吗?
  • 已更新以说明可能性范围不是列A
  • 这就像一个魅力我刚刚添加了 Worksheet("Sheet") 没有范围 :),谢谢 Chris
  • 还有一个问题,如果我需要对 2 列执行此操作,比如说 A 列和 B 列,我可以循环执行还是应该运行此过程 2 次?
  • 我尝试添加另一个代码块,但现在使用 rng2 = [D],但它无法做到 :(,它不会让我捕获新列的范围
【解决方案2】:

如果有人在使用 UFT 中的 texttocolumns 函数时遇到问题。请尝试使用以下功能。

myxl.Workbooks.Open myexcel.xls
myxl.Application.Visible = false `enter code here`
set mysheet = myxl.ActiveWorkbook.Worksheets(1)
Set objRange = myxl.Range("A1").EntireColumn
Set objRange2 = mysheet.Range("A1")
objRange.TextToColumns objRange2,1,1, , , , true

这里我们使用 coma(,) 作为分隔符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多