Excel VBA 循环遍历单元格(包括空白)到最后一个包含数据的单元格并替换的宏

Excel VBA Macro to Loop Through Cells (Including Blanks) to Last Cell with Data and Replace

我是 VBA 的新手,需要帮助编写代码...我的目标是遍历每一行以转到最后一个非空白单元格(每行中有多个空白)该行并替换“;”和 ”}”。然后继续循环到数据集的底部,直到A行不再有数据。

下面是“之前”的例子:

      1          2          3          4          5
 1   {1,.00;              3,.00;
 2   {1,.00;   2,.00;              4,.00;
 3   {1,.00;              3,.50;               5,.00;

下面是“之后”的例子:

      1          2          3          4          5
 1   {1,.00;              3,.00}
 2   {1,.00;   2,.00;              4,.00}
 3   {1,.00;              3,.50;               5,.00}

如果有帮助,代码的模式是:

Regex: .[0-9]{1,2},[$][0-9]{1,3}[.][0-9][0-9].|[0-9]{1,2},[$][0-9]{1,3}[.][0-9][0-9]

奖金,如果你也可以合并替换“1;”与“{1;”对于 A 列中的每个单元格(那太好了 - 我目前只是手动将 A 列中的所有内容替换为“1;”到“{1;”。

让您了解数据量:大约 250 列,超过 25,000 行。

这是我现有的代码,不确定如何循环到下一行(也很想知道我是否可以在不显式调用最后一行的情况下这样做,以防数据发生变化)。

Dim LastCell As String
Dim rng As Range
Dim i As Long

For i = 1 To 223127
' Use all cells on the sheet
'Set rng = Sheets("Paste").Cells

'Or use a range on the sheet
Set rng = Sheets("Parse").Range("29:29")

' Find the last cell
LastCell = Last(3, rng)

' Select from A1 till the last cell in Rng
With rng.Parent
    .Select
    .Range(LastCell).Select
   Selection.Replace What:=";", Replacement:="}", Lookat:=xlPart, _
   SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
   ReplaceFormat:=False

感谢您的帮助,如果我可以提供更多信息,请告诉我。

替换字符串

Option Explicit

Sub ReplaceStrings()
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Worksheets("Parse")
    
    Dim rg As Range: Set rg = ws.UsedRange
    Dim rCount As Long: rCount = rg.Rows.Count
    Dim cCount As Long: cCount = rg.Columns.Count
    
    Dim Data As Variant
    If rCount + cCount = 2 Then
        ReDim Data(1 To 1, 1 To 1): Data(1, 1) = rg.Value
    Else
        Data = rg.Value
    End If
        
    Dim r As Long
    Dim c As Long
    Dim cLen As Long
    Dim cString As String
    
    For r = 1 To rCount
        cString = CStr(Data(r, 1))
        cLen = Len(cString)
        If cLen > 0 Then
            If Left(cString, 1) = "1" Then
                Data(r, 1) = "{1" & Right(cString, cLen - 1)
            End If
        End If
        For c = cCount To 1 Step -1
            cString = CStr(Data(r, c))
            cLen = Len(cString)
            If cLen > 0 Then
                If Right(cString, 1) = ";" Then
                    Data(r, c) = Left(cString, cLen - 1) & "}"
                    Exit For
                End If
            End If
        Next c
    Next r
       
    rg.Value = Data
 
End Sub