Excel宏文本转换为列

3

我想为我的 .csv 文件编写“宏”。我需要先在数据上执行“文本到列”,但在尝试记录宏时,我遇到了一个错误:

“行连续过多”。

我选择了 A 列,然后按下了“文本到列”。

宏的代码:

    Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+e
'
    Selection.TextToColumns Destination := Range("A1"), DataType := xlDelimited, _
        TextQualifier := xlDoubleQuote, ConsecutiveDelimiter := FALSE, Tab := FALSE, _
        Semicolon := FALSE, Comma := TRUE, Space := FALSE, Other := FALSE, FieldInfo _
        := Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1),Array(5,1),Array(6,1), _
        Array(7,1),Array(8,1),Array(9,1),Array(10,1),Array(11,1),Array(12,1),Array(13,1 _
        ),Array(14,1),Array(15,1),Array(16,1),Array(17,1),Array(18,1),Array(19,1),Array _
        (20,1),Array(21,1),Array(22,1),Array(23,1),Array(24,1),Array(25,1),Array(26,1), _
        Array(27,1),Array(28,1),Array(29,1),Array(30,1),Array(31,1),Array(32,1),Array( _
        33,1),Array(34,1),Array(35,1),Array(36,1),Array(37,1),Array(38,1),Array(39,1), _
        Array(40,1),Array(41,1),Array(42,1),Array(43,1),Array(44,1),Array(45,1),Array( _
        46,1),Array(47,1),Array(48,1),Array(49,1),Array(50,1),Array(51,1),Array(52,1), _
        Array(53,1),Array(54,1),Array(55,1),Array(56,1),Array(57,1),Array(58,1),Array( _
        59,1),Array(60,1),Array(61,1),Array(62,1),Array(63,1),Array(64,1),Array(65,1), _
        Array(66,1),Array(67,1),Array(68,1),Array(69,1),Array(70,1),Array(71,1),Array( _
        72,1),Array(73,1),Array(74,1),Array(75,1),Array(76,1),Array(77,1),Array(78,1), _
        Array(79,1),Array(80,1),Array(81,1),Array(82,1),Array(83,1),Array(84,1),Array( _
        85,1),Array(86,1),Array(87,1),Array(88,1),Array(89,1),Array(90,1),Array(91,1), _
        Array(92,1),Array(93,1),Array(94,1),Array(95,1),Array(96,1),Array(97,1),Array( _
        98,1),Array(99,1),Array(100,1),Array(101,1),Array(102,1),Array(103,1),Array(104 _
        ,1),Array(105,1),Array(106,1),Array(107,1),Array(108,1),Array(109,1),Array(110, _
        1),Array(111,1),Array(112,1),Array(113,1),Array(114,1),Array(115,1),Array(116,1 _
        ),Array(117,1),Array(118,1),Array(119,1),Array(120,1),Array(121,1),Array(122,1) _
        ,Array(123,1),Array(124,1),Array(125,1),Array(126,1),Array(127,1),Array(128,1), _
        Array(129,1),Array(130,1),Array(131,1),Array(132,1),Array(133,1),Array(134,1)
End Sub

我该如何解决这个问题?

----------------------- 编辑 ----------------------------

我尝试按照您的建议更改了代码:

Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+e
'
    Selection.TextToColumns Destination := Range("A1"), DataType := xlDelimited, TextQualifier := xlDoubleQuote, ConsecutiveDelimiter := FALSE, Tab := FALSE,  Semicolon := FALSE, Comma := TRUE, Space := FALSE, Other := FALSE, FieldInfo _
        := Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1),Array(5,1),Array(6,1), Array(7,1),Array(8,1),Array(9,1),Array(10,1),Array(11,1),Array(12,1),Array(13,1),Array(14,1),Array(15,1),Array(16,1),Array(17,1),Array(18,1),Array(19,1) _
End Sub

尝试保存后,我遇到了一个错误:“编译错误:数组(19,1)的最后一行有无效字符”。

我尝试删除_,但是还是出现了同样的错误。


让我们清楚地说,你在Macro2中的编辑不是完整的子程序吗?我在我的答案中呈现的只是你非常长的原始代码的一部分。我只取了你的六行并使它们紧凑以展示它是如何工作的。你需要对所有的、你自己的完整代码做同样的事情。你不需要把所有东西都压缩成两行。尝试将两个连续的行压缩成一个,但要为完整的代码! - Kazimierz Jawor
嗯,我在想这个“Array()”只有几行和列,所以如果我不使用它,那么宏将选择更少的列和行...那么我需要使用哪些数组呢?我通常只选择A列,然后按“文本分列”。我的.csv文件大小不同,一个有1000行,另一个有10000行... - thaking
嗯,我理解你想向我解释的内容,但是如果你看一下我的第一篇帖子,你会发现没有像Array(Array(1,1),然后Array(2,2))这样的形式......而且它仍然可以工作。它总是只有Array(X,1)。 - thaking
好的,可能你需要切换到ADO(ADODB)技术来从文本文件中检索数据。这种方法非常简单、可靠、广泛使用,并且可以解决你现在遇到的问题。 - Kazimierz Jawor
没问题,很高兴它能够正常工作。 - L42
显示剩余6条评论
3个回答

4

太多的行延续是指您在所呈现的代码中大多数行的末尾会发现的字符:_(下划线)。您需要做的是通过将其中一些行添加到其他行中来压缩代码。

换句话说,您需要减少代码行数,但使它们变得更长。

例子:

'instead of this part of your code:
Selection.TextToColumns Destination := Range("A1"), DataType := xlDelimited, _
    TextQualifier := xlDoubleQuote, ConsecutiveDelimiter := FALSE, Tab := FALSE, _
    Semicolon := FALSE, Comma := TRUE, Space := FALSE, Other := FALSE, FieldInfo _
    := Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1),Array(5,1),Array(6,1), _
    Array(7,1),Array(8,1),Array(9,1),Array(10,1),Array(11,1),Array(12,1),Array(13,1 _
    ),Array(14,1),Array(15,1),Array(16,1),Array(17,1),Array(18,1),Array(19,1),Array _
    '...etc

'you should try to compact it in this way:
Selection.TextToColumns Destination := Range("A1"), DataType := xlDelimited, TextQualifier := xlDoubleQuote, ConsecutiveDelimiter := FALSE, Tab := FALSE,  Semicolon := FALSE, Comma := TRUE, Space := FALSE, Other := FALSE, FieldInfo _
    := Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1),Array(5,1),Array(6,1), Array(7,1),Array(8,1),Array(9,1),Array(10,1),Array(11,1),Array(12,1),Array(13,1),Array(14,1),Array(15,1),Array(16,1),Array(17,1),Array(18,1),Array(19,1),Array _
'...etc

重要提示 在进行此操作时,请确保您在每行末尾的下划线前留有(空)空格。 您需要类似于以下内容:

...) _
..., _
....), _

3
如果每个字段的数据类型相同,您可以使用以下内容:

如果每个字段的数据类型相同,则只需使用以下内容:

Selection.TextToColumns Destination:= Range("A1"), DataType:= xlDelimited, Comma:=True

我想应该可以了吧?
希望这有所帮助。

0

请尝试以下代码,它会提示用户选择一个范围,然后应用文本到列功能。注意:参数值可能会根据您正在处理的数据集而改变。-> 源链接

Sub TextToColumnsRangeSelection()
    On Error Resume Next
    Dim MySelection As Range

    Application.DisplayAlerts = False
    Set MySelection = Application.InputBox(Prompt:="Please select your range", Title:="Select Range", Type:=8)

    MySelection.TextToColumns _
    Destination:=MySelection, _
    DataType:=xlDelimited, _
    TextQualifier:=xlTextQualifierDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, _
    Semicolon:=False, _
    Comma:=True, _
    Space:=False, _
    Other:=False
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接