我正在嘗試開發一個 vba 宏,該宏將從一個單元格中提取兩個數字,然后將它們加在一起。我正在處理的電子表格有一個這樣的欄位:
單元 D1:.60 #2021-71;0.90 #2021-71
我需要取出 .60 和 .90 并將它們加在一起,然后將它們放回單元格中。
作為參考,此列中的其他單元格如下所示:
單元格 D2:.70 #2021-71
我的代碼已經在查看該列并從 # 登錄中洗掉所有內容:
Dim tmp As String
For Each cell In Range("D:M")
If InStr(cell.Value, "#") > 0 Then
tmp = cell.Value
cell.Value = Left(tmp, InStr(tmp, "#") - 1)
End If
我想要做的甚至可能嗎?
uj5u.com熱心網友回復:
我采取了提供自定義功能的方法,然后您可以在作業表上參考。
你可以呼叫任何你想要的函式......!
Public Function SumFirstNumbers(ByVal rngCell As Range) As Variant
Dim arrValues, i As Long, strValue As String, dblValue As String
If InStr(1, rngCell.Text, "#") > 0 Then
arrValues = Split(rngCell.Text, ";")
For i = 0 To UBound(arrValues)
dblValue = 0
strValue = Split(Trim(arrValues(i)), " ")(0)
If IsNumeric(strValue) Then dblValue = CDbl(strValue)
SumFirstNumbers = CDbl(SumFirstNumbers) dblValue
Next
Else
SumFirstNumbers = rngCell.Value
End If
End Function
然后只需在單元格中使用它可能的任何其他功能..

這樣,您可以填寫和填寫,而不必擔心源資料的實際位置。
然后將其放回原始單元格中,只需Copy-> Paste Special-> Values。
如果它產生不正確的結果(在復制回原始單元格之前),可以更改函式并且資料仍然受到保護。
當然,如果需要,這仍然可以合并到更廣泛的宏中。您只需要將其應用于您的原始代碼。
Dim tmp As String
For Each cell In Range("D:M")
If InStr(cell.Value, "#") > 0 Then
tmp = cell.Value
cell.Value = SumFirstNumbers(cell)
End If
Next
……反正是這樣的。
uj5u.com熱心網友回復:
非 VBA 方法
僅使用公式。為了更好地理解,我已經縮進了公式(你可以在公式欄中這樣做)。
=IFERROR(
IF(
ISNUMBER(SEARCH(";",D1)),
VALUE(MID(D1,SEARCH(";",D1) 1,SEARCH("#",D1,SEARCH(";",D1) 1)-SEARCH(";",D1)-1)) VALUE(LEFT(D1,SEARCH("#",D1)-1)),
VALUE(LEFT(D1,SEARCH("#",D1)-1))
),0
)

邏輯:
- 檢查是否有
;使用SEARCH(). 用ISNUMBER()處理公式,如果它不存在。 - 如果有
;則獲取;和#使用之間的文本MID()。使用VALUE()它們將它們轉換為值并將它們相加。 - 如果沒有,
;則只需使用LEFT()獲取之前的號碼#。
VBA 方法
如果您正在尋找 VBA 方法來替換同一列中的值,那么這里是使用WildCards的更快方法。如果你有很多資料,那么最后我使用的地方,把資料放在一個陣列中,然后回圈這個陣列。For Each aCell In rng
邏輯:
讓 Excel 完成大部分臟活!
- 更換每一件事情是之間
";"以及"#"與""使用inbuit.Replace通配符"#*;" - 更換每一件事情那就是后
"#"與""使用通配符"#*" - 洗掉所有空格
- 使用
Evaluate.
代碼:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim rng As Range, aCell As Range
Dim lRow As Long
Set ws = Sheet1
With ws
With .Columns(4)
.Replace What:="#*;", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
.Replace What:="#*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End With
lRow = .Range("D" & .Rows.Count).End(xlUp).Row
Set rng = .Range("D1:D" & lRow)
For Each aCell In rng
aCell.Value = .Evaluate(aCell.Value)
Next aCell
End With
End Sub
在行動

uj5u.com熱心網友回復:
用數字替換
Option Explicit
Sub ReplaceByNumbers()
Const Cols As String = "D:M"
Const FindDelimiter As String = "#"
Const SplitDelimiter As String = ";"
Dim ws As Worksheet: Set ws = ActiveSheet ' improve
Dim rg As Range: Set rg = Intersect(ws.UsedRange, ws.Columns(Cols))
If rg Is Nothing Then Exit Sub ' no data
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 ' one cell only
ReDim Data(1 To 1, 1 To 1): Data(1, 1).Value = rg.Value
Else ' multiple cells
Data = rg.Value
End If
Dim SubStrings() As String
Dim r As Long, c As Long, n As Long
Dim iPos As Long
Dim Total As Double
Dim cString As String
Dim NumberFound As Boolean
For r = 1 To rCount
For c = 1 To cCount
cString = CStr(Data(r, c))
iPos = InStr(cString, FindDelimiter)
If iPos > 0 Then
SubStrings = Split(cString, SplitDelimiter)
For n = 0 To UBound(SubStrings)
If n > 0 Then
iPos = InStr(SubStrings(n), FindDelimiter)
End If
cString = Trim(Left(SubStrings(n), iPos - 1))
If Left(cString, 1) = "." Then cString = "0" & cValue
If IsNumeric(cString) Then
If NumberFound Then
Total = Total CDbl(cString)
Else
Total = CDbl(cString)
NumberFound = True
End If
End If
Next n
If NumberFound Then
Data(r, c) = Total
NumberFound = False
End If
End If
Next c
Next r
rg.Value = Data
MsgBox "Replaced by numbers.", vbInformation, "ReplaceByNumbers"
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405377.html
標籤:
下一篇:跟蹤單元格更改的次數
