所以,我有一个宏,它遍历工作表上的很多单元格并对它们做了些什么。
Private Sub ReplaceFormulaWithValues()
Dim lastrow As Long, r1 As Long
Dim temp As String, arTemp
Dim temp2 As String
Dim temp3 As String
Dim letter
temp3 = ""
' Get the last row in the worksheet
lastrow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
For r1 = 1 To lastrow
For r2 = 0 To 10
letter = Chr(Asc("A") + r2)
letter = letter + LTrim(Str(r1))
' If A & B aren't blank, make the formula of cell C equal to A + B.
If Sheet1.Range(letter).Value <> "" And Mid(Sheet1.Range(letter).Formula, 1, 1) = "=" Then
If Asc(Mid(Sheet1.Range(letter).Formula, 2, 1)) >= 65 And Asc(Mid(Sheet1.Range(letter).Formula, 2, 1)) <= 90 Then
' Get the formula for the current C cell
temp = Replace(Sheet1.Range(letter).Formula, "=", "")
'Create an array by splitting the formula on the + sign
arTemp = Split(temp, "+")
temp2 = Sheet1.Range(arTemp(0)).Value
For i = 1 To UBound(arTemp)
temp3 = Sheet1.Range(arTemp(i)).Value
temp2 = temp2 & "+" & temp3
Next i
Sheet1.Range(letter).Value = "=" & temp2
End If
End If
Next
Next
End Sub
This就是它的作用:
for instance, let's say that the formula of cell C2 is C2=A1+B1, where A1 = 10 and B1 = 20.
I would like to change it so that the formula of cell C2 is C2=10+20.
However, I don't want the formula displayed in the cell or anything.
我的问题:如何设置它以便我首先突出显示/从工作表中选择一组单元格,然后激活宏以便宏只适用于该范围内的每个单元格?
答案 0 :(得分:1)
程序当前使用两个for循环遍历工作表中的所有单元格。可以修改这些循环,以便仅使用Application.Selection循环遍历当前选择。
所以你的代码看起来像这样:
For Each cell In Selection.Cells
' If A & B aren't blank, make the formula of cell C equal to A + B.
If cell.Value <> "" And Mid(cell.Formula, 1, 1) = "=" Then
If Asc(Mid(cell.Formula, 2, 1)) >= 65 And Asc(Mid(cell.Formula, 2, 1)) <= 90 Then
' Get the formula for the current C cell
temp = Replace(cell.Formula, "=", "")
'Create an array by splitting the formula on the + sign
arTemp = Split(temp, "+")
temp2 = ActiveSheet.Range(arTemp(0)).Value
For i = 1 To UBound(arTemp)
temp3 = ActiveSheet.Range(arTemp(i)).Value
temp2 = temp2 & "+" & temp3
Next i
cell.Value = "=" & temp2
End If
End If
Next
我还使用ActiveSheet而不是Sheet1,以便您可以在任何工作表上运行它。
答案 1 :(得分:1)
我不会重写你的代码 - 但通常你可以遍历你选择的一堆单元格:
Sub ClearZeroCells()
Dim cell As Range
For Each cell In Selection
If cell = 0 Then cell.ClearContents
' or you can put your own code here.
Next cell
End Sub
答案 2 :(得分:0)
我想做一些我认为你想要做的事情。
它(宏评估选择)应该查看选择中包含公式(starts =)的每个单元格,并将其更改为半评估公式。
Sub EvaluateTarget(ByVal Target As Range)
Dim Result As String
Dim Cell As Range
Dim Precedent As Range
Dim Formula As String
Dim CellReference As String
Dim CellFormula As String
Formula = Target.Formula
For Each Cell In Target.SpecialCells(xlCellTypeFormulas)
For Each Precedent In Cell.DirectPrecedents
CellReference = Replace(Precedent.Address, "$", "")
CellFormula = Replace(Precedent.Formula, "=", "")
Formula = Replace(Formula, CellReference, CellFormula)
Next Precedent
Next Cell
Target.Value = Replace(Target.Address, "$", "") & Formula
End Sub
Sub EvaluateSelection()
Dim Cell As Range
For Each Cell In Selection.Cells
If Left(Cell.Formula, 1) = "=" Then
EvaluateTarget Cell
End If
Next Cell
End Sub
Reference - 找到了这个并从中工作。
我根本没有测试过这个,似乎适用于我的简单例子。