我正在尝试遍历一系列选定的单元格,以将单元格内的文本从 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] 删除。
我来说两句