我如何在我select的一系列单元格上运行macros?

所以,我有一个macros,通过工作表上的许多单元格循环,并做他们的东西。

这是代码http://pastie.org/4290581

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 

这是它的作用:

 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. 

我的问题:我如何设置,以便我可以突出显示/从工作表中select一组单元格,那么激活macros,使macros只能在该范围内的每个单元格上工作?

程序当前通过两个for循环遍历表单中的所有单元格。 这些循环可以修改为只循环使用Application.Selection的当前select。

所以你的代码如下所示:

 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,以便您可以在任何工作表上运行它。

我不会重写你的代码 – 但是通常你可以遍历你select的一堆单元格,像这样:

 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 

我已经做了一些事情来做我认为你正在努力实现的事情。

它(The Macro EvaluateSelection)应该查看select中包含公式(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 

参考 – find这个,并从中工作。

我没有testing过这么多,似乎适用于我的简单例子。