循环遍历一系列选定的单元格并使用文本到列将 1 个单元格拆分为 4 列

水银

我正在尝试遍历一系列选定的单元格,以将单元格内的文本从 activeCell 拆分为 3 或 4 列。

这是带有两个示例的 Excel 文件的屏幕截图,顶部数据是它应该如何,之后是我需要拆分的原始数据

我有以下代码。如果我逐个单元格地完成工作,但我需要它遍历每个单元格并在我选择的范围内拆分文本,我还需要一种停止执行代码的方法是单元格为空,如果过程是之前完成或者它与任何字符串长度不匹配以继续循环。

我不知道 ElseIf 是否正确。我正在考虑使用 case 语句来检查并查看每个单元格使用哪一种拆分方法。第一个例子很简单,但第二个例子有点棘手,因为当从 Outlook 复制时,你会得到一些空间和 1/ 我想跳过而不是将文本导入到列输出中。这就是为什么我对每个单元格检查字符长度以确定要使用的正确拆分解决方案的原因。

Sub splitStyleFabricColourSize()

Dim cellRow As Range
Dim mergedCells As Range
Dim cellInfo As Long

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set mergedCells = Selection

On Error Resume Next

For Each cellRow In mergedCells.Cells
cellRow.Select

cellInfo = ActiveCell.Characters.Count
Debug.Print cellInfo

If cellInfo = 15 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(11, 1))

ElseIf cellInfo = 17 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, 9), Array(13, 1))

ElseIf cellInfo = 18 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(8, 1), Array(13, 9), Array(14, 1))

ElseIf cellInfo = 22 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, 9), Array(13, 1), _
        Array(17, 9), Array(20, 1))

ElseIf cellInfo = 23 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, 9), Array(13, 1), _
        Array(17, 9), Array(21, 1))

ElseIf cellInfo = 24 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
        OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, _
        9), Array(13, 1), Array(17, 9), Array(22, 1))


ElseIf cellInfo = 25 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array( _
        12, 9), Array(13, 1), Array(17, 9), Array(23, 1))

ElseIf cellInfo = 26 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array( _
        12, 9), Array(13, 1), Array(17, 9), Array(22, 1))

ElseIf cellInfo = 27 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(8, 1), Array( _
        13, 9), Array(14, 1), Array(18, 9), Array(23, 1))

ElseIf cellInfo = 29 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
        OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(8, 1), Array(13, _
        9), Array(14, 1), Array(18, 9), Array(25, 1))

ElseIf cellInfo = 52 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, 9), Array(13, 1), _
        Array(17, 9), Array(20, 1), Array(42, 9))

End If

Next cellRow
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

我遇到了一个问题,想知道您是否可以帮助我。两个示例的字符数均为 24,但由于“-”符号,它们的下方方式不同,因此列的文本将有所不同。我将如何解决这个问题,因为下面的代码与您开始分隔列长度的位置不同。我没有预料到这个问题。如果文本的字符数相同但格式不同,那么代码最终会有一个弱点,那么这将无法正常工作。

ElseIf cellInfo = 24 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
        OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array(12, _
        9), Array(13, 1), Array(17, 9), Array(22, 1))
​
ElseIf cellInfo = 24 Then
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth _
        , OtherChar:="/", FieldInfo:=Array(Array(0, 1), Array(6, 9), Array(7, 1), Array( _
        12, 9), Array(14, 1), Array(18, 9), Array(20, 1))

好吧,我假设这些是空格,对。

Sub TryThis()

'SPLIT INTO COLUMNS
ActiveSheet.Range("A1").Select
splitVals = Split(ActiveSheet.Range("A1").Value, " ")
totalVals = UBound(splitVals)
Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), Cells(ActiveCell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals

End Sub

在此处输入图片说明

这将拆分所有选定的单元格(选定范围内的所有单元格)。

Sub SplitCells()

Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next

Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
For Each Rng In WorkRng

splitVals = Split(Rng.Value, " ")
    totalVals = UBound(splitVals)
    Range(Cells(Rng.Row, ActiveCell.Column + 1), Cells(Rng.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals
Next
End Sub

最后,我不完全确定这是相关的,但根据您的最后一条评论,听起来您需要 LEN 函数和 FIND 函数。
描述

Microsoft Excel LEN函数返回指定字符串的长度。

LEN 函数是 Excel 中的内置函数,归类为字符串/文本函数。它可以用作 Excel 中的工作表函数 (WS) 和 VBA 函数 (VBA)。作为工作表函数,LEN 函数可以作为公式的一部分输入到工作表的单元格中。作为 VBA 函数,您可以在通过 Microsoft Visual Basic 编辑器输入的宏代码中使用此函数。句法

Microsoft Excel 中 LEN 函数的语法是:

LEN( text )

描述

Microsoft Excel FIND 函数返回子字符串在字符串中的位置。搜索区分大小写。

FIND函数是Excel中的内置函数,被归类为字符串/文本函数。它可以用作 Excel 中的工作表函数 (WS)。作为工作表函数,FIND 函数可以作为工作表单元格中公式的一部分输入。句法

Microsoft Excel 中 FIND 函数的语法是:

FIND( substring, string, [start_position] )

参数或参数

substring 要查找的子字符串。string 要在其中搜索的字符串。start_position 可选。它是字符串中搜索开始的位置。第一个位置是 1。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 VBA 将 1 个单元格拆分为 3 个和 4 个单元格

使用VBA将多列拆分为单元格

将一个单元格拆分为R中的多列

根据值将单元格拆分为列

将单元格从2列拆分为行

将单元格值拆分为多列

在表格单元格内使用Bootstrap4 / Flexbox,将单元格分为2列,其中一列为绝对位置

将一个单元格中的字符串(的一部分)添加到同一系列中的另一个单元格中,然后遍历整个列

将具有一系列列中的值的所有单元格复制到一个列中

复制粘贴的单元格每粘贴4个单元格就会更改列

使用数据前缀作为列标题将多行单元格拆分为列

将多值单元格在多于一列中拆分为行(打开优化)

将具有多个数据的单元格拆分为多于一列的多行

使用Python将单元格(使用JSON格式)中的数据拆分为单独的列

Excel VBA在列中重复复制和粘贴一系列单元格

导出跨越两列的一系列单元格的有效方法

根据列填写一系列单元格-VBA?

如何在excel中将一系列单元格与表格列进行比较

使用SQL将子字符串长度可变的单元格中的一个字符串拆分为几个不同的列

将单元格中的值拆分为列和行

功能excel,用于将单元格,vlookup拆分为列和并置

如何将包含列表的数据框单元格拆分为列?

将单元格拆分为列并通过在 python 中填充它们来转置

如何将单元格中的数据拆分为 Excel 上的现有列?

在单元格中的第一个字母之后将pandas dataframe列拆分为两个

Vlookup 或索引匹配一系列单元格 - 1st、2nd、3rd、4th 等

Pandas Dataframe:将列拆分为多列,右对齐不一致的单元格条目

如何在MATLAB中将单元格数组值拆分为两列?

Excel:CountIf(单元格1>单元格2和单元格3>单元格4)