Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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.
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.
Reacciones:
3 comentarios: Enlaces a esta entrada
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.
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.
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.
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 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.
No olvidar pulsar de nuevo sobre la escuadra para salir del modo diseño.
Reacciones:
11 comentarios: Enlaces a esta entrada
Etiquetas: Macros
Arrays
El archivo utilizado en los vídeos se puede descargar del siguiente enlace.
excelavanzado_arrays.xlsm
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í:
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