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
我是 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