excel - 增加包含数字和文本的所有单元格值
问题描述
嗨,我正在尝试构建一个宏,该宏可以搜索具有任何值的单元格并将其中的数字加一。
我所有的单元格都有一个文本和数字,例如(电影 1、电影 2、汽车)每个单元格都包含一个名称和一个数字.. 名称可能是一个或两个单词或更多.. 数字并不总是在末尾和它通常是从 0 到 200,但并非所有单元格都有数字。
这些单元格遍布工作表,我希望宏搜索其中有价值的任何内容并将数字与文本分开,然后将数字加一。
经过数小时的反复试验,我找到了这段代码:
Sub IncreaseCellValue()
Dim value As Variant
'Add 1 to the existing cell value
If IsNumeric(Range("A1").value) Then
Range("A1").value = Range("A1") + 1
Else
value = Split(Range("A1").value, " ")
Range("A1").value = value(0) & " " & (CInt(value(1)) + 1)
End If
End Sub
现在的问题是此代码只能应用于一个指定的单元格。
解决方案
由于直接使用 excel 单元格会减慢您的执行时间(当要检查大量单元格时),使用数组将是关键:
Option Explicit
Sub IncreaseCellValue()
Dim arr As Variant
'This will hold your whole worksheet. Change the sheet name
arr = ThisWorkbook.Sheets("SheetName").UsedRange.Value
Dim i As Long, j As Long
For i = 1 To UBound(arr) 'for every row
For j = 1 To UBound(arr, 2) 'for every column
Select Case True
Case arr(i, j) = vbNullString
Case arr(i, j) Like "*MyWord*" 'beware Like is Case Sensitive
Case Else
arr(i, j) = AddOne(arr(i, j))
End Select
Next j
Next i
'Paste you array back to the worksheet
ThisWorkbook.Sheets("SheetName").UsedRange.Value = arr
'Note this will paste only values, so if you have formulas they will disappear
End Sub
Private Function AddOne(Value As Variant) As Variant
Dim MySplit As Variant
MySplit = Split(Value, " ")
Dim i As Long
For i = LBound(MySplit) To UBound(MySplit)
If IsNumeric(MySplit(i)) Then
AddOne = AddOne & " " & MySplit(i) + 1
Else
AddOne = AddOne & " " & MySplit(i)
End If
Next i
AddOne = Trim(AddOne)
End Function
推荐阅读
- html - 为什么溢出:隐藏;留下空白CSS?
- parameters - 快速查看动态添加或删除尺寸
- python - 如何可视化 rviz 发布点?
- ios - 使用多线程时,Swift viewController 仍然加载很长时间
- regex - 字符速记\s的实现特性
- android - 如何刷新隐藏片段的 RecyclerView?
- sass - 带有 Blazor Web 程序集的 .scss 中的 css 类中无法识别的属性
- python-3.x - list1 == list2.reverse() 如何在 python 中执行?
- javascript - 为什么这个 Skulpt Python 编辑器没有按预期工作?
- php - paypal api curl退款出现错误AUTHENTICATION_FAILURE