Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA将多个文本转换为Excel中的列_Excel_Vba - Fatal编程技术网

使用VBA将多个文本转换为Excel中的列

使用VBA将多个文本转换为Excel中的列,excel,vba,Excel,Vba,很抱歉,我是第一次尝试VBA,我不太确定如何执行多列的“文本到”列 我已在列AN、AO和AP中设置了我的值 我想: 1) 将文本列A转换为AQ-AZ 2) 将AO列的文本转换为BA-BE列 3) 将AP列的文本转换为BF-BJ列 我以这种方式开始我的代码,但无论我尝试的范围是什么,都会显示一个错误: Dim count As Integer count = Worksheets("Sheet0").Range("A1", Worksheets("Sheet0").Range("A1").En

很抱歉,我是第一次尝试VBA,我不太确定如何执行多列的“文本到”列

我已在列AN、AO和AP中设置了我的值

我想: 1) 将文本列A转换为AQ-AZ

2) 将AO列的文本转换为BA-BE列

3) 将AP列的文本转换为BF-BJ列

我以这种方式开始我的代码,但无论我尝试的范围是什么,都会显示一个错误:

Dim count As Integer

count = Worksheets("Sheet0").Range("A1", 
Worksheets("Sheet0").Range("A1").End(xlDown)).Rows.Count - 1

For i = 1 To count
????接下来会发生什么


我希望对这些列执行文本转换,但这些列中有空单元格,因此我引用了列A,它是我的数据的完整列表


样本数据:

或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub


示例代码:

另一种可能更容易理解的方法是:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("B2:B?,F2:F?,J2:J?", "?", lr))
    Set rng2 = .Range(Replace("C2:E?,G2:I?,K2:M?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub
或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub

样本结果:

或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub


注1:只需更改范围参考以满足您的需要


注2:因为您没有提供什么类型的数据,也没有使用什么分隔符;您可能需要使用参数

这里是一个快速示例:


样本数据:

或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub


示例代码:

另一种可能更容易理解的方法是:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("B2:B?,F2:F?,J2:J?", "?", lr))
    Set rng2 = .Range(Replace("C2:E?,G2:I?,K2:M?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub
或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub

样本结果:

或者在您的具体情况下:

Option Explicit

Sub Sample()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range

With Sheet1 'Change according to your sheets CodeName
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range(Replace("AN2:AN?,AO2:AO?,AP2:AP?", "?", lr))
    Set rng2 = .Range(Replace("AQ2:AZ?,BA2:BE?,BF2:BJ?", "?", lr))
    For x = 1 To rng1.Areas.Count
        rng1.Areas(x).TextToColumns Destination:=rng2.Areas(x), DataType:=xlDelimited, Comma:=True
    Next x
End With

End Sub


注1:只需更改范围参考以满足您的需要


注2:因为您没有提供什么类型的数据,也没有使用什么分隔符;你可能需要玩弄这些参数

运气好吗@jade.elvest谢谢你,JvdV!它无缝地满足了我的需要do@jade.elves很高兴听到这个消息。在这种情况下,请通过点击答案左边的复选标记来接受答案,如果有帮助的话,也可以考虑进行投票。它无缝地满足了我的需要do@jade.elves很高兴听到这个消息。在这种情况下,请通过点击答案左边的复选标记来接受答案,如果有帮助的话,也可以考虑投票。