excel 将文本循环到各列各行的固定宽度

epfja78i  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(159)

我试图建立一个循环,将在数据列中查看每一行,并根据““的第一个示例进行拆分。我可以在一行上运行,但循环从未激活。我尽了最大努力格式化此代码,但无法找到如何使命令显示为不同颜色等的教程。

Dim num
Dim RowCnt As Integer
Dim x As Integer

ActiveCell.Select ' the cell to split
RowCnt = Range(Selection, Selection.End(xlDown)).Rows.Count 'determines #rows in column to split

With ActiveCell ' with block

   For x = 1 To RowCnt ' define # loops

         .Offset(, -1).FormulaR1C1 = "=FIND("" "",RC[1],1)" ' determine first " "
         num = .Offset(, -1).Value ' assign the number of chars to 'num' 

                Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
                FieldInfo:=Array(Array(0, 1), Array(num, 1)), TrailingMinusNumbers:=True ' splits once based on 'num'
         
        .Offset(, -1).ClearContents ' clear 
        .Offset(1, 0).Activate

   Next x

End With
End Sub
6tdlim6h

6tdlim6h1#

使用.offset(x,0).在最后一位激活(刚好在下一个x之上)

  • 你所做的只是每次激活同一个原始细胞 *

你可以用3行代码◇(w/ for循环)实现相同的功能,使用如下代码:

Sub test2()
    'Range("d2").Select
    With Selection
        .Offset(, 3).Formula2R1C1 = _
            "=LET(x_,RC[-3]:OFFSET(RC[-3],MATCH(0,IFERROR(SEARCH("""",RC[-3]:OFFSET(RC[-3],ROWS(C[-3])-ROWS(RC[-3])-1,0)),0),0)-1,0),IF(ISODD(SEQUENCE(1,2,1,1)),MID(x_,1,IFERROR(SEARCH("" "",x_)-1,LEN(x_))),IF(ISERROR(SEARCH("" "",x_)),"""",MID(x_,SEARCH("" "",x_)+2,LEN(x_)))))"
        Range(.AddressLocal, .End(xlDown).Offset(, 1)).Value = Range(Replace(.Offset(, 3).AddressLocal, "$", "") & "#").Value
        .Offset(, 3).ClearContents
    End With
End Sub

这将使用函数:

=LET(x_,D2:OFFSET(D2,MATCH(0,IFERROR(SEARCH("",D2:OFFSET(D2,ROWS(D:D)-ROWS(D2)-1,0)),0),0)-1,0),IF(ISODD(SEQUENCE(1,2,1,1)),MID(x_,1,IFERROR(SEARCH(" ",x_)-1,LEN(x_))),IF(ISERROR(SEARCH(" ",x_)),"",MID(x_,SEARCH(" ",x_)+2,LEN(x_)))))

...这是一个数组函数,它使用req拆分的相关单元格重新生成原始列表。

◆ Office 365兼容性;使用/end/sub/等忽略“3行”。
塔💪

相关问题