Precisa de uma Macro do Excel para somar um intervalo de comprimento variável

1

Eu estou tentando criar uma macro que é capaz de reconhecer quantas linhas têm valores acima dela e soma apenas essa faixa. Se você olhar a imagem anexada, eu preciso ser capaz de clicar nas células B4, B10 e B21 e executar a macro e fazer com que apenas some os valores nesse intervalo.

Portanto, para a célula B4, preciso que a macro saiba que precisa somar as células B1 a B3.

Para a célula B10, preciso que a macro saiba automaticamente que precisa somar o intervalo de 4 células (de B6 a B9).

Para a célula B21, preciso que a macro identifique automaticamente que o intervalo de soma é agora 9 linhas (B12 a B20).

AsMacrosqueeuuseisomarãoapenasumintervalodecélulas(porexemplo,somarãoapenasas5célulasimediatamenteacimadacélulaondeamacroéexecutada(vertrechoabaixo):

SubMacro22()''Macro22Macro'WithRelativeReferencesturnedon.''KeyboardShortcut:Ctrl+o'ActiveCell.FormulaR1C1="=SUM(R[-5]C:R[-1]C)"
End Sub

Minha segunda tentativa fará com que a macro some todas as células acima dela.

Sub test()
ActiveCell.Value = "=SUM(" & Range(Cells(1, ActiveCell.Column), Cells(ActiveCell.Row - 1, ActiveCell.Column)).Address(False, False) & ")"
End Sub

Isso é possível? Pelo que eu vi, deveria ser possível, mas é super complicado fazer a macro fazer isso.

    
por Jonathan Hopta 13.02.2015 / 18:33

2 respostas

1

E se você realmente quiser uma macro, use isso (tirado principalmente de aqui , com algumas melhorias):

Option Explicit

Sub AutoSum()
    Const SourceRange = "C:F"
    Dim NumRange As Range, formulaCell As Range
    Dim SumAddr As String
    Dim c As Long

    For Each NumRange In Columns(SourceRange).SpecialCells(xlConstants, xlNumbers).Areas
        SumAddr = NumRange.Address(False, False)
        Set formulaCell = NumRange.Offset(NumRange.Count, 0).Resize(1, 1)
        formulaCell.Formula = "=SUM(" & SumAddr & ")"

        'change formatting to your liking:
        formulaCell.Font.Bold = True
        formulaCell.Font.Color = RGB(255, 0, 0)

        c = NumRange.Count
    Next NumRange

End Sub

Isso funciona em números nas colunas C a F , mude para qualquer outro intervalo desejado no início do código (constante SourceRange ).

Apenas certifique-se de que suas áreas de números não se toquem.

    
por 13.02.2015 / 18:58
0

Em vez de uma macro, parece-me que o que você está fazendo é já faz parte do Excel como um recurso, chamado AutoSum .

Basta posicionar o cursor sob um conjunto contíguo de números (uma região no Excel) e pressionar o botão AutoSoma. O Excel apresentará a fórmula para você.

O botão AutoSum está na faixa de opções, na guia "Início", muito à direita, e possui um ícone como um sigma ( ).

Veja um tutorial .

    
por 13.02.2015 / 18:45