Está en la página 1de 9

Tabla Dinámica: cambiar contar por sumar

Archivo de Excel utilizado: cambia_contar_por_sumar.xlsm

En ocasiones al crear una tabla dinámica aparece CONTAR cuando lo que nosotros
deseamos es que aparezca SUMAR. A veces aparece CONTAR y otras veces
aparece SUMAR ¿cuál es el motivo?

Si partimos de una base de datos en forma de tabla donde no existen celdas vacías la
Tabla Dinámica se creará con la opción SUMAR, pero si existe alguna celda vacía en
un campo la Tabla Dinámica se creará con la opción CONTAR.

Si lo que deseamos es SUMAR debemos cambiar una a una todas las columnas
(todos los campos) ya que Excel no permite cambiar todos ellos simultáneamente.
Cuando tenemos muchas columna que cambiar esto supone una tarea repetitiva
bastante tediosa. Para estos casos disponemos de una macro que efectuará el cambio
en todos los campos.

HOJA 1

Disponemos de una pequeña tabla con dos campos numéricos: Unidades y


Facturación. Existen dos celdas vacías que hemos puesto de color amarillo. Al hacer
la tabla dinámica sobre esta base de datos aparece:

 Cuenta de Unidades
 Cuenta de Facturación
que son dos columnas de la tabla dinámica que lo que hacen es contar el número de
registros existentes de cada uno de esos tipos. Nosotros deseamos que efectúe la
SUMA en lugar de la CUENTA. Podemos solucionarlo simplemente poniendo ceros en
las celdas amarillas y al crear la tabla dinámica lo hará con SUMA que el lo que
pretendíamos.

También podemos emplear la siguiente macro.

Sub Cambia_Contar_por_Sumar()
Dim pf As PivotField
With Selection.PivotTable
For Each pf In .DataFields
With pf
.Function = xlSum
.NumberFormat = "#,##0"
.Name = Replace(.Name, "Cuenta", "Suma")
End With
Next pf
End With
End Sub

Antes de ejecutar la macro debe crear la Tabla Dinámica y situar el cursor dentro de la
tabla dinámica.
HOJA 2

Disponemos de una base de datos similar a la anterior pero con 1.000 registros y 27
campos numéricos en los que, al menos, existe una celda vacía en cada uno de ellos
que hemos puesto de color amarillo.

Proponemos como ejercicio que realice la tabla dinámica y que emplee la macro para
convertir CUENTA en SUMA.

Primero cree la tabla dinámica tal y como se ve en la siguiente imagen.

Finalmente sitúe el cursor dentro de la tabla dinámica y ejecute la macro.

Publicado por Adolfo Aparicio a las 12:06

Reacciones:
3 comentarios: Enlaces a esta entrada

Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con


FacebookCompartir en Pinterest

Etiquetas: Macros, Tabla Dinámica

VIERNES, 26 DE SEPTIEMBRE DE 2014

Separar en varias celdas un texto


Puede descargar el siguiente fichero de Excel con la macro y un ejemplo para
practicar su uso.
 separa_texto.xlsm

En Excel se puede escribir un texto en una sola celda que ocupe varios párrafos.
Cuando estamos escribiendo y queremos crear un nuevo párrafo dentro de la misma
celda no tenemos que pulsar ENTER ya que en ese caso la celda se valida y no nos
deja seguir escribiendo el segundo párrafo.

Lo que debemos hacer para pasar al siguiente párrafo es pulsar ALT+ENTER. Esto
es, debemos pulsar la tecla ALT y simultáneamente la tecla ENTER, y así pasamos al
segundo párrafo y podemos seguir escribiendo.

Supongamos que tenemos una única celda con dos o más párrafos y deseamos que
cada párrafo ocupe una celda diferente. Esto se puede hacer de forma manual de la
siguiente forma.

1. Editamos la celda que contiene varios párrafos. Para editarla debemos


estar situados en ella y pulsar la tecla de función F2. También se edita
pulsando doble click sobre la propia celda.
2. Seleccionamos todo el contenido de la celda
3. Pulsamos Control+C para copiar al portapapeles
4. Nos situamos en cualquier celda vacía y que debajo de ella también
tenga algunas celdas vacías tantas. Vamos a necesitar tantas celdas vacías
como párrafos contenga nuestro texto.
5. Pulsamos Control+V que pega el contenido del portapapeles
Con este método hemos conseguido de forma manual separar los diferentes párrafos
en y que cada uno de ellos ocupe una celda diferente.

Ahora queremos hacer esto de forma automática mediante una Macro de Excel,
creando un código VBA (Visual Basic para Aplicaciones).

La macro es la siguiente.

Sub Separa()
Dim toma As String, linea As String
Dim largo As Integer, i As Integer, s As Byte
Dim caracter As String * 1
Dim fila As Long, columna As Integer
Dim A() As Integer
fila = ActiveCell.Row
columna = ActiveCell.Column
toma = ActiveCell.Value
largo = Len(toma)
ReDim A(largo)
For i = 1 To largo
caracter = Mid(toma, i, 1)
If caracter = Chr(10) Then
s = s + 1
A(s) = i
End If
Next i
If s = 0 Then MsgBox ("En la celda activa no se detecta ningún
ENTER"): End
A(s + 1) = largo + 1
For i = 0 To s
linea = Mid(toma, A(i) + 1, A(i + 1) - A(i) - 1)
Cells(fila + i + 1, columna) = linea
Next i
End Sub

Para que funcione correctamente debemos situarnos previamente en una celda que
contenga dos o más párrafos de texto creados pulsando ALT+ENTER para separar
cada uno de ellos.

La macro lo que hace es respetar la celda en la que estamos sin cambiarla y justo
debajo de ella utiliza las celdas que existen para poner en cada una de ellas uno de
los párrafos. Se necesitan tantas celdas vacías debajo de la celda que contiene el
texto como párrafos existan.

Por ejemplo, si tenemos una única celda con el texto siguiente:

Linea1
Linea2
Linea3
Linea4

La macro detecta que existen 27 caracteres. Esto se puede medir con la función
=LARGO
Los caracteres son:

 6 de la primera línea
 6 de la segunda líena
 6 de la tercera líena
 6 de la cuarta línea
 3 retornos de carro
Los retornos de carro son las veces que hemos pulsado ALT+ENTER y el código de
carácter que llevan en CHR 10.
Al final la macro crea debajo de la celda que contiene ese texto (celda amarilla) cuatro
celdas con el texto separado correspondiente a cada uno de los 4 párrafos.

Separar por un carácter


En la Hoja2 hemos creado otro ejemplo donde el usuario decide el carácter separador.
Por ejemplo, podemos separar un texto por la coma.

En la celda D2, de color rosa, ponemos el carácter separador, por ejemplo una coma.
En la celda D3 se calcula el código que corresponde a ese carácter. La coma tiene el
código 44.

En la celda amarilla B5 escribimos el texto que contiene una o varias comas, o el


carácter separador que nos interese. Con el cursor situado en B5 pulsamos el botón
que lanza la macro y se producirá la separación del texto en varias celdas.
Observamos que Dato1 ha quedado bien, pero que Dato2 y los siguientes tienen un
espacio en blanco al inicio. Si deseamos que este espacio inicial no aparezca lo que
haremos es usar la otra macro que hemos habilitado que se lanza pulsando en el
icono de la goma de borrar.

En esta ocasión no hemos lanzado las macros con los botones habituales, hemos
optado por un control ActiveX para la primera y una imagen para la segunda macro.

La macro que se lanza con el botón rotulado como "Separa por carácter" es un botón
de comando (control ActiveX). Para editarlo tenemos que ir a Programador y pulsar
sobre el icono de escuadra para entrar en modo diseño y luego ir a las propiedades,
donde podremos cambiar ligeramente el color de fondo 'BackColor'.
Estando en modo diseño pulsamos con el botón derecho del ratón sobre el botón y
elegimos 'Ver código'. La macro es un evento de tipo click.

Private Sub CommandButton1_Click()


Call SeparaPorCaracter
End Sub

No olvidar pulsar de nuevo sobre la escuadra para salir del modo diseño.

La segunda macro se lanza pulsando sobre el icono de la goma de borrar. Conseguir


asociar una macro a una imagen es más sencillo ya que simplemente se ha de pulsar
sobre el imagen con el botón derecho del ratón y elegir 'Asignar macro'.

Publicado por Adolfo Aparicio a las 0:04

Reacciones:
11 comentarios: Enlaces a esta entrada

Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con


FacebookCompartir en Pinterest

Etiquetas: Macros

SÁBADO, 20 DE SEPTIEMBRE DE 2014

Arrays
El archivo utilizado en los vídeos se puede descargar del siguiente enlace.
 excelavanzado_arrays.xlsm

Un Array es un conjunto de variables.


 Si son de una dimensión hablamos de vectores
 Si son de dos dimensiones hablamos de matrices
 Si son de más de dos dimensiones hablamos de matrices multidimensionales
En general, denominaremos matriz a cualquier Array sea de la dimensión que sea.

Por ejemplo, definimos la matriz A que es un vector de 5 componentes. Se define así:

Dim A(5) as Integer

Con ello hemos definido sus 5 componentes de tipo Integer. Los componentes son:
 A(1)
 A(2)
 A(3)
 A(4)
 A(5)
Esto es un vector de cinco componentes, donde cada uno de ellos puede contener un
valor de tipo integer.
Una matriz de dos dimensiones, rectangular de 5 filas y 7 columnas se define así:

Dim A(5,7) as integer

En este ejemplo todos los componentes son de tipo integer y serían los siguientes:
 A(1,1) A(1,2) A(1,3) A(1,4) A(1,5) A(1,6) A(1,7)
 A(2,1) A(2,2) A(2,3) A(2,4) A(2,5) A(2,6) A(2,7)
 A(3,1) A(3,2) A(3,3) A(3,4) A(3,5) A(3,6) A(3,7)
 A(4,1) A(4,2) A(4,3) A(4,4) A(4,5) A(4,6) A(4,7)
 A(5,1) A(5,2) A(5,3) A(5,4) A(5,5) A(5,6) A(5,7)

PRIMER VÍDEO
 ¿Qué es un array?
 Arrays, Vectores, Matrices.

SEGUNDO VÍDEO
 ReDim para redimensionar matrices.
 Randomize para barajar la semilla del generador de números aleatorios.

TERCER VÍDEO
Ordenar con macro.

CUARTO VÍDEO
 Ordenar aleatorios en VBA
 Uso de matrices
 Tiempo de cálculo

QUINTO VÍDEO
 Usamos la función de VBA Array
 Dejamos valores de un Array en fila y en columna
 Capturamos esos valores con otro Array
 Una macro llama a otra macro con parámetros

CASO PRÁCTICO
Puede ver un ejemplo del uso de matrices y ReDim en un caso práctico que nos
permite separar el texto de una celda que está escrito en varios párrafos y que
finalmente quede cada párrafo en una celda separada. Está en el siguiente enlace:
 Separar en varias celdas un texto
PARA SABER MÁS
 Transferir los datos de un Rango a un Array
 Pasar matrices a una función
 Ordenar un millón de valores
 Transferir los datos de un Rango a un Array
 http://support2.microsoft.com/kb/133135/es
 http://www.cpearson.com/excel/ArraysAndRanges.aspx

También podría gustarte