Copia a suma das celas seleccionadas no Portapapeis

Ás veces leva moito tempo chegar a algunhas cousas. Pero cando XA se inventaron, despois parecen obvios e mesmo banais. Da serie "que, era posible?".

Desde as primeiras versións, a barra de estado na parte inferior da xanela de Microsoft Excel mostraba tradicionalmente os totais das celas seleccionadas:

Copia a suma das celas seleccionadas no Portapapeis

Se o desexaba, incluso era posible facer clic co botón dereito sobre estes resultados e seleccionar no menú contextual exactamente cales son as funcións que queremos ver:

Copia a suma das celas seleccionadas no Portapapeis

E recentemente, nas últimas actualizacións de Excel, os desenvolvedores de Microsoft engadiron unha función sinxela pero enxeñosa: agora, cando fai clic nestes resultados, cópiase no portapapeis.

Copia a suma das celas seleccionadas no Portapapeis

A beleza. 

Pero que pasa cos que aínda non (ou xa?) teñen unha versión deste tipo de Excel? Aquí é onde as macros sinxelas poden axudar.

Copiando a suma das celas seleccionadas no Portapapeis mediante unha macro

Abrir na pestana revelador (Desenvolvedor) editor Visual Basic ou use este atallo de teclado alt+F11. Insira un novo módulo baleiro a través do menú Inserir – Módulo e copia alí o seguinte código:

Sub SumSelected() If TypeName(Selección) <> "Range" Entón sae Sub con GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selección) .PutInd Subboard  

A súa lóxica é sinxela:

  • Primeiro vén a "protección contra o parvo": comprobamos o que se destaca exactamente. Se non se seleccionan celas (pero, por exemplo, un gráfico), saia da macro.
  • A continuación, use o comando Getobxecto creamos un novo obxecto de datos onde se almacenará máis tarde a nosa suma das celas seleccionadas. Un código alfanumérico longo e incomprensible é, de feito, unha ligazón á rama do rexistro de Windows onde se atopa a biblioteca Biblioteca de obxectos de Microsoft Forms 2.0, que pode crear tales obxectos. Ás veces, este truco tamén se chama vinculación tardía implícita. Se non o usas, terías que facer unha ligazón a esta biblioteca no ficheiro a través do menú Ferramentas - Referencias.
  • A suma das celas seleccionadas considérase un comando Folla de traballoFunción.Suma(Selección), e despois a cantidade resultante colócase no portapapeis co comando Poñer no Portapapeis

Para facilitar o seu uso, pode, por suposto, asignar esta macro a un atallo de teclado usando o botón Macros aba revelador (Desenvolvedor - Macros).

E se queres ver o que se copiou exactamente despois de executar a macro, podes activar o panel Portapapeis usando a frecha pequena na esquina inferior dereita do grupo correspondente. A principal (Inicio) guía:

Copia a suma das celas seleccionadas no Portapapeis

Non só a cantidade

Se, ademais da cantidade banal, queres outra cousa, podes usar calquera das funcións que nos proporciona o obxecto Función folla de traballo:

Copia a suma das celas seleccionadas no Portapapeis

Por exemplo, hai:

  • Suma - suma
  • Media - media aritmética
  • Contar: número de celas con números
  • CountA: número de celas cubertas
  • CountBlank: número de celas baleiras
  • Min - valor mínimo
  • Máximo - valor máximo
  • Mediana - mediana (valor central)
  • ... etc.

Incluíndo filtros e filas-columnas ocultas

E se as filas ou as columnas están ocultas (manual ou mediante un filtro) no intervalo seleccionado? Para non telos en conta nos totais, teremos que modificar lixeiramente o noso código engadindo ao obxecto Selección propiedade SpecialCells (xlCellTypeVisible):

Sub SumVisible() Se TypeName(Selección) <> "Range" Entón sae Sub con GetObject("Novo:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(Selection.SpecialCell)Tellsype PutInClipboard Finalizar con End Sub  

Neste caso, o cálculo de calquera función total aplicarase só ás celas visibles.

Se necesitas unha fórmula viva

Se soñas, podes atopar escenarios nos que é mellor copiar non un número (constante), senón unha fórmula viva no búfer, que calcula os totais que necesitamos para as celas seleccionadas. Neste caso, terás que pegar a fórmula a partir de fragmentos, engadindo a ela a eliminación de signos de dólar e substituíndo a coma (que se usa como separador entre enderezos de varios rangos seleccionados en VBA) cun punto e coma:

Sub SumFormula() Se TypeName(Selección) <> "Range" Entón sae Sub con GetObject ("Novo:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Substituír.(Seleccionar Enderezo, ",", ";"), "$", "") e ")" .PutInClipboard End With End Sub  

Suma con condicións adicionais

E, finalmente, para os completamente maníacos, pode escribir unha macro que resuma non todas as celas seleccionadas, senón só aquelas que cumpran as condicións dadas. Así, por exemplo, unha macro terá un aspecto que coloca a suma das celas seleccionadas no búfer, se os seus valores son superiores a 5 e, ao mesmo tempo, están cheas de calquera cor:

 Sub CustomCalc() Dim myRange As Range If TypeName(Selección) <> "Range" Logo Saír Sub para cada cela da selección Se cell.Value > 5 E cell.Interior.ColorIndex <> xlNone Entón, se myRange Is Nothing Entón Establece myRange = cell Else Establecer myRange = Unión(myRange, cell) End If End If Next cell With GetObject("Novo:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) .PutInClip Subboard  

Como podes imaxinar facilmente, as condicións pódense establecer absolutamente calquera, ata os formatos de celas, e en calquera cantidade (incluso enlazándoas con operadores lóxicos ou ou e). Hai moito espazo para a imaxinación.

  • Converter fórmulas en valores (6 xeitos)
  • Que son as macros, como usalas, onde inserir código de Visual Basic
  • Información útil na barra de estado de Microsoft Excel

Deixe unha resposta