如何在我预先选择的一系列单元格上运行宏?

时间:2012-07-20 17:09:46

标签: excel selection

所以,我有一个宏,它遍历工作表上的很多单元格并对它们做了些什么。

这是代码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

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.

我的问题:如何设置它以便我首先突出显示/从工作表中选择一组单元格,然后激活宏以便宏只适用于该范围内的每个单元格?

3 个答案:

答案 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 - 找到了这个并从中工作。

我根本没有测试过这个,似乎适用于我的简单例子。