8/18/2019 Tabla Cartesiana en Excel
1/42
Tabla cartesiana en ExcelFrancisco 06-04-09
Programación : Ofimática
Se trata de una función que crea una tabla de
referencias cruzadas !l resultado final es" en
a#ariencia" como una tabla dinámica $odo el #roceso está
automatizado utilizando el %isual &asic de las macros de !'cel
(ediante este código se #odr)a co#iar el resultado de una consulta de
agru#ación *que al menos tu+iese dos cam#os de agru#ación* , cruzarla agru#ación #or filas , columnas
Formato de entrada
a entrada es una tabla colocada en una .o/a de cálculo cu,as columnas están
dis#uestas en las siguientes #osiciones:
• as #rimeras columnas o cam#os ser+irán #ara agru#ar #or columnas
• as siguientes columnas agru#arán #or filas
• as ltimas columnas contienen los datos
Análisis visual
1 $abla de origen * os datos de #artida
2 Filas de la tabla destino * Proceso #aso a #aso sobre las filas
3 olumnas de la tabla destino * Proceso #aso a #aso sobre las columnas
4 $abla destino * Proceso #ara colocar los datos
http://proinf.net/login/show/2http://proinf.net/category/programacionhttp://proinf.net/subcategory/programacion/ofimaticahttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis01.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis02.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis03.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis04.pnghttp://proinf.net/category/programacionhttp://proinf.net/subcategory/programacion/ofimaticahttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis01.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis02.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis03.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/analisis04.pnghttp://proinf.net/login/show/2
8/18/2019 Tabla Cartesiana en Excel
2/42
Secuencia animada del #roceso desde el inicio .asta el final
Función principal: CrearTablaCartesiana
Sintaxis:
Public Function CrearTablaCartesiana( _
ByVal origen As Range, ByVal destino As Range, _
ByVal colsColumnas As Integer, _
ByVal colsFilas As Integer, _
ByVal colsDatos As Integer, _
Optional ByVal opcionCombinar As Boolean = True, _
Optional ByVal opcionTotal As Boolean = True, _
Optional ByVal opcionFormatear As Boolean = True, _
Optional ByVal opcionRatios As Boolean = True, _
Optional ByVal opcionAjustar As Boolean = True, _
Optional ByVal opcionFijar As Boolean = True _
) As Boolean
Parámetros de la función
Parámetro Descripción
origen Una celda dentro de la tabla con los datos
destino La celda superior izquierda de la tabla resultado
colsColumnas Nº de columnas de la tabla origen destinadas a ser encabezados de
columnas de la tabla destino
colsFilas Nº de columnas de la tabla origen destinadas a ser encabezados de
filas en la tabla destino
colsDatos Nº de columnas de la tabla origen destinadas a ser datos en la tabla
destinoopcionCobinar Combina las celdas iguales de los encabezados de filas o columnas
opcionTotal Añade una fila inferior con el total de las columnas de datos
opcionForatear Colorea aplica formato a las tablas
opcionA!ustar A!usta automáticamente el anc"o de las columnas
http://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/secuencia.gifhttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/secuencia.gif
8/18/2019 Tabla Cartesiana en Excel
3/42
Parámetro Descripción
opcionFi!ar #i!a los titulos de la "o!a de cálculo
Ejemplos de uso
Código $!emplo
Call CrearTablaCartesiana( _ Acti"e#$eet%Range(&B'&), _ Acti"e#$eet%Range(&B'&), _ ', ', ')
Pantallazo %&%
Call CrearTablaCartesiana( _ Acti"e#$eet%Range(&B'&), _ Acti"e#$eet%Range(&B'&), _ , *, ')
Pantallazo %&'
Call CrearTablaCartesiana( _ Acti"e#$eet%Range(&B'&), _
Acti"e#$eet%Range(&+'&), _ , *, )
Pantallazo '&%
Call CrearTablaCartesiana( _ Acti"e#$eet%Range(&B'&), _ Acti"e#$eet%Range(&+'&), _ ', ', )
Pantallazo '&'
Fórmulas
Se #ueden agregar algunas fórmulas escritas de una forma sim#lificada que luego
se traducen a fórmulas aut5nticas de la .o/a de cálculo !/em#los:
'=Precio*Cantidad
(ignifica que multiplique la celda de la columna Precio por la
celda de la columna Cantidad que se encuentren en la misma fila
que la fórmula)
'=Importe/$Importe
(ignifica que di*ida la celda de la columna Importe en la mismafila que la fórmula por el total de +mporte situado en la fila de
totales)
as fórmulas se .an de introducir cómo si fuesen te'to aadiendo un a#óstrofe al#rinci#io Sólo se #ueden introducir este ti#o de fórmulas en las columnas
corres#ondientes a datos , no a agru#aciones
Código fuente
http://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo1-1.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo1-2.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo2-1.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo2-2.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo1-1.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo1-2.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo2-1.pnghttp://proinf.net/clases/MS-Excel/articulos/TablaCartesiana/imgs/ejemplo2-2.png
8/18/2019 Tabla Cartesiana en Excel
4/42
moduloColor
• onstantes con los )ndices de colores en !'cel
o OO78!7O" OO78&;O" etc
• Funciones:
o ColorearFilas * olorea cebrando gnora la #rimera fila #orque se la considera de
t)tulos
o Colorear * olorea el fondo de los rangos indicadoscon los colores indicados
o CebrarFilas * olorea las filas #ares del rango
indicado
o Cuadricular * &ordea las celdas del rango indicado
o ColorearColumnas * olorea de en columnas con la lista de
colores indicados
o ColorColumnas, ColorFilas, ColorDatos, ColorTitulos,
ColorFormula * olor definido #ara las filas im#ares , #ares de la
tabla destino
moduloCartesiano
• Pblico
o CrearTablaCartesiana * Función #rinci#al
,C ,# ,D
c% f% d%
c% f' d'
- ,C c% c'
,# ,D ,D
f% d% d.
8/18/2019 Tabla Cartesiana en Excel
5/42
c' f% d.
c' f' d/f' d' d/
• Pri+ado
o CopiarDatosCartesianos * o#ia en las #osiciones correctas los
datos de la tabla origen en la tabla destino
o Formular * alcula las fórmulas #endientes on+ierte en fórmulas
reales las fórmulas sim#lificadas
o Copiar * o#ia el rango origen en el destino
o OrdenarFilas * Ordena las filas tomando como criterio de
ordenación las columnas de la #rimera .asta la ltima
C %
0 .A '
0 %
-
A '
0 %0 .
C %
o EliminarFilasDuplicadasConsecutivas * &orra las filas consecuti+os
cu,os contenidos sean los mismos
AA
A
00
-
A&
&
0&
o CompactarFilas * Sube las filas inferiores a#ro+ec.ando los .uecos
de las filas +ac)as
A&
&
0
&
-A
0
8/18/2019 Tabla Cartesiana en Excel
6/42
o DuplicarFilas * ?u#lica cada fila el nmero de +eces indicado
A
0C
'-
AA
0
0C
C
A
0 .-
AA
A
00
0
o FormatearGrupos * ombina las celdas consecuti+as con el mismo
+alor que se encuentren dentro de la misma columna o bien dentro
de la misma fila" segn est5 indicado en el #arámetro ti#o
A A 0 0 0
1 2 3 4 5
- &&&A&&& &&0&&
1 2 3 4 5
o BordearGrupos * &orda las columnas de arriba a aba/o o las filas
de izquierda a derec.a segn los datos de la #rimera fila o de la
#rimera columna
&&&A&&& &&0&&1 2 3 4 5
-6 A 6 0 661 2 3 6 4 5 6
o Transponer * o#ia el rango cambiando filas #or columnas ,+ice+ersa
A0
C
- A 0 C
o Borrar * !limina el contenido de las celdas
o Rellenar * o#ia +eces el rango origen en el rango destino
A 0 - A 0 A 0 A 0 A 0 )))
o RellenarFormato * o#ia el formato de origen en el destino
o Totalizar * rea una fila con el total de cada columna
8/18/2019 Tabla Cartesiana en Excel
7/42
o RangosIguales * >ndica si los contenidos de los dos rangos coinciden
escarga
$odo el código , e/em#los de uso
• tabla8cartesiana82010-06-03'ls@z
Attribute VB_-ae = &o.uloCartesiano_'//0_'_/&
Option 12plicit
34�.ulo Cartesiano3 1ntra.a5
3 6na tabla .e agrupaci�n% 7as colunas in.ican ni"eles .e agrupaci�nen .etalle
3 creciente% 7as �ltias colunas son los .atos33 #ali.a5
3 6na nue"a tabla .�n.e algunas .e las prieras colunas .e agrupaci�n3 se $an .ispuesto en 8ora $ori9ontal% #ee!ante a un pro.uctocartesiano
3 o see!ante a una tabla .in�ica
33'//0:IV: "ersi�n %/ ;8co
8/18/2019 Tabla Cartesiana en Excel
8/42
3'//0:II: "ersi�n % : Controlar en Transponer cuan.o $ay '@colunas
3::::::::::::::::::::::::::::::::::::::::::::::::3 CO-#TA-T1#3::::::::::::::::::::::::::::::::::::::::::::::::
Const #1PARAOR_7I#TA = &D&
3::::::::::::::::::::::::::::::::::::::::::::::::3 F6-CIO-1# 1 PR61BA3::::::::::::::::::::::::::::::::::::::::::::::::
Public #ub Prueba4o.uloCartesiano()3'//0:IV:* 3i prueba As Eors$eet 3i rango As Range, rango' As Range 3#et prueba = #$eets(&pruebas&) 3#et rango = prueba%Range(&*&)%CurrentRegion 3#et rango' = prueba%Range(&?*&)%CurrentRegion
3PR61BA# I-IVI6A71#
3Call Or.enarFilas(rango) 3Call 1liinarFilasuplica.asConsecuti"as(rango) 3Call CopactarFilas(rango) 3Call CobinarGrupos(rango, &CO764-A&) 3Call Transponer(rango, rango') 3Call CobinarGrupos(rango', &FI7A&) 3Call Rellenar(prueba%Range(&?5r&), prueba%Range(&?5ab&)) 3Call Bor.earGrupos(#$eets(&.estino&)%Range(&B@5I/&), &FI7A&) 3Call Bor.earGrupos(#$eets(&.estino&)%Range(&'5I/&), &CO764-A&)
3Call CrearTablaCartesiana( _
Eors$eets(&Ho!a&)%Range(&B'&), _ Eors$eets(&Ho!a&)%Range(&B'&), _ ', ', ', _ opcionFi!ar5=False, _ opcionA!ustar5=False)
3Prueba G1-1RA7
Call BorraratosHo!a(&.estino&) Call BorrarHo!as(&gra8ico&) Call BorrarHo!as(&.inaica&)
Call CrearTablaCartesiana( _
Eors$eets(&origen&)%Range(&B'&), _ Eors$eets(&.estino&)%Range(&B'&), _ ', ', , _ opcionFi!ar5=False, _ opcionTitulos5=True, _ opcionGra8icos5=True, _ patronGra8icos5=&C:B:&, _ patronTotales5=A#A&)
Call CrearTablainaica( _
Eors$eets(&origen&)%Range(&B'&)%CurrentRegion, _
8/18/2019 Tabla Cartesiana en Excel
9/42
', ', )1n. #ub
3::::::::::::::::::::::::::::::::::::::::::::::::3 F6-CIO- PRI-CIPA73::::::::::::::::::::::::::::::::::::::::::::::::
Public Function CrearTablaCartesiana( _ ByVal origen As Range, ByVal .estino As Range, _ ByVal colsColunas As Integer, ByVal colsFilas As Integer, ByValcolsatos As Integer, _ Optional ByVal opcionTotales As Boolean = True, _ Optional ByVal opcionGra8icos As Boolean = False, _ Optional ByVal opcionCobinar As Boolean = True, _ Optional ByVal opcionForatear As Boolean = True, _ Optional ByVal opcionRatios As Boolean = True, _ Optional ByVal opcionA!ustar As Boolean = True, _ Optional ByVal opcionFi!ar As Boolean = True, _ Optional ByVal opcionTitulos As Boolean = True, _ Optional ByVal patronTotales As Variant = &, _
Optional ByVal patronGra8icos As Variant = &C&, _ Optional ByVal patronForatos As Variant = && _) As Boolean
3Funci�n principal33 Origen estino33 TC TF T TC c c'3 c 8 . TF T T3 c 8' .' :: 8 . .*3 c' 8 .* 8' .' .3 c 8' .33
3 Patr�n totales53 1!5 :A:&3 1!5 &=#64(;)DD=AV1RAG1(;)D=RCJ:KLRCJ:'K&3 Abre"iaturas5 #=sua, A=proe.io, :=na.a3
3 Patr�n gr�8icos53 1!5 &C:#:&3 1!5 &CDD#D&3 Abre"iaturas5 C=colunas,#=colunas
apila.as,A=�rea,7=l�nea,B=barras,P=tarta3
3 Patr�n 8oratos53 1!5 &:H:& oculta la segun.a coluna .e .atos3 1!5 &DM%MM/& 8oratea la segun.a coluna33'//0:IV: ;8co
8/18/2019 Tabla Cartesiana en Excel
10/42
I8 colsColunas ;= / Or colsFilas ;= / Or colsatos ;= / T$en 3'//0:V:0 12it Function 1n. I8
3Iniciali9aci�n Application%#creen6p.ating = False 3TR61=para .epurar, FA7#1="ersi�n8inal
3eclaraci�n .e "ariables i origenTitulosColunas As Range, .estinoTitulosColunas As Range i origenTitulosFilas As Range, .estinoTitulosFilas As Range i origenTitulosatos As Range, .estinoTitulosatos As Range
i origenColunas As Range, .estinoColunas As Range
i origenFilas As Range, .estinoFilas As Range i origenatos As Range, .estinoatos As Range
i .estinoTitulosTotal As Range, .estinoTotal As Range
i rangoTraba!o As Range
i 8ilasOrigen As Integer
i 8ilas As Integer, colunas As Integer, rango As Range
3Corregir par�etros #et origen = origen%CurrentRegion #et .estino = .estino%Range(&A&)
3A"eriguar rangos 8ilasOrigen = origen%RoNs%Count
#et origenColunas = origen%O88set(, /)%Resi9e(8ilasOrigen : ,colsColunas) #et origenFilas = origen%O88set(, colsColunas)%Resi9e(8ilasOrigen :, colsFilas) #et origenatos = origen%O88set(, colsColunas colsFilas)%Resi9e(8ilasOrigen : , colsatos) 333 #et origenTitulosColunas = origenColunas%O88set(:, /)%Resi9e() #et origenTitulosFilas = origenFilas%O88set(:, /)%Resi9e() #et origenTitulosatos = origenatos%O88set(:, /)%Resi9e()
#et .estinoColunas = .estino%O88set(/, colsFilas)
#et .estinoFilas = .estino%O88set(colsColunas , /) #et .estinoatos = .estino%O88set(colsColunas , colsFilas) 333 #et .estinoTitulosColunas = .estinoColunas%O88set(, :) #et .estinoTitulosFilas = .estinoFilas%O88set(:) #et .estinoTitulosatos = .estinoatos%O88set(:)
3Coprobaci�n "isual
I8 opcionForatear T$en
8/18/2019 Tabla Cartesiana en Excel
11/42
Colorear ColorColunas(CO7OR_I4PAR), origenColunas,.estinoColunas Colorear ColorFilas(CO7OR_I4PAR), origenFilas, .estinoFilas Colorear Coloratos(CO7OR_I4PAR), origenatos, .estinoatos
I8 opcionTitulos T$en
Colorear colorTitulos, origenTitulosColunas,origenTitulosFilas, origenTitulosatos Colorear colorTitulos, .estinoTitulosColunas,.estinoTitulosFilas, .estinoTitulosatos 1n. I8 1n. I8
3Pasar las CO764-A# Call Copiar(origenColunas, .estinoatos) #et rangoTraba!o = .estinoatos%CurrentRegion Call Or.enarFilas(rangoTraba!o) Call 1liinarFilasuplica.asConsecuti"as(rangoTraba!o) Call CopactarFilas(rangoTraba!o) Call uplicarFilas(rangoTraba!o, "eces5=colsatos)
#et rangoTraba!o = rangoTraba!o%CurrentRegion I8 -ot Transponer(rangoTraba!o, .estinoColunas) T$en 12it Function #et .estinoColunas = .estinoColunas%CurrentRegion Call Borrar(rangoTraba!o) I8 opcionForatear T$en Colorear ColorColunas(CO7OR_I4PAR), .estinoColunas .estinoColunas%Bor.ers%7ine#tyle = 2l-one 1n. I8
3Pasar las FI7A# Call Copiar(origenFilas, .estinoFilas) #et rangoTraba!o = .estinoFilas%CurrentRegion Call Or.enarFilas(rangoTraba!o)
Call 1liinarFilasuplica.asConsecuti"as(rangoTraba!o) Call CopactarFilas(rangoTraba!o) #et .estinoFilas = .estinoFilas%CurrentRegion I8 opcionForatear T$en Colorear ColorFilas(CO7OR_I4PAR), .estinoFilas .estinoFilas%Bor.ers%7ine#tyle = 2l-one 1n. I8
3Pasar los ATO# #et .estinoatos = .estinoatos%Resi9e(.estinoFilas%RoNs%Count,.estinoColunas%Coluns%Count)
3Titulos
Call Copiar(origenTitulosatos, .estinoTitulosatos) #et .estinoTitulosatos = .estinoTitulosatos%Resi9e(,.estinoColunas%Coluns%Count) Call Rellenar(.estinoTitulosatos%Resi9e(, colsatos),.estinoTitulosatos)
Call CopiaratosCartesianos( _
origenColunas, .estinoColunas, _ origenFilas, .estinoFilas, _ origenatos, .estinoatos)
8/18/2019 Tabla Cartesiana en Excel
12/42
Call Forular(.estinoatos, .estinoTitulosatos%Resi9e(, colsatos))
3'//0:V:'
Call RellenarForato(origenatos%Resi9e(), .estinoatos) 3'//0:I:*/ patronForatos = Patron1nArray(patronForatos, colsatos) Call Foratearatos(.estinoatos, patronForatos)
3Coprobaci�n "isual I8 opcionForatear T$en Colorear Coloratos(CO7OR_I4PAR), .estinoatos, colorTitulos,.estinoTitulosatos Call ColorearColunas(.estinoatos, colsatos, Array(CO7OR_41-TA,CO7OR_C171#T1, CO7OR_VAI-I77A, CO7OR_CA-17A, CO7OR_RO#A, CO7OR_7AVA-A,CO7OR_CI17O)) Call CebrarFilas(.estinoatos, Coloratos) Call Cua.ricular(.estinoatos) 1n. I8
3Fila .e totales I8 opcionTotales T$en
patronTotales = Patron1nArray(patronTotales, colsatos)
#et .estinoTotal =
.estinoatos%O88set(.estinoatos%RoNs%Count)%Resi9e() Call Totali9ar(.estinoatos, .estinoTotal, patronTotales) I8 opcionForatear T$en Colorear colorForula, .estinoTotal 1n. I8 1n. I8
3Gr�8icos I8 opcionGra8icos T$en opcionCobinar = False
patronGra8icos = Patron1nArray(patronGra8icos, colsatos)
3Por ca.a coluna .e .atos crear una $o!a .e gr�8ico 3338ilas = .estinoFilas%RoNs%Count colsColunas Call CrearGra8icos( _ .estinoatos, _ .estinoFilas%Coluns%Count, _ .estinoColunas%RoNs%Count, _ colsatos, _ patronGra8icos) 1n. I8
3T�tulos
I8 opcionTitulos T$en 3T�tulos .e colunas #et .estinoTitulosColunas =.estinoTitulosColunas%Resi9e(colsColunas) Call Transponer(origenTitulosColunas, .estinoTitulosColunas) I8 opcionForatear T$en Colorear colorTitulos, colorTitulos, .estinoTitulosColunas 1n. I8
8/18/2019 Tabla Cartesiana en Excel
13/42
3T�tulos .e 8ila Call Copiar(origenTitulosFilas, .estinoTitulosFilas) #et .estinoTitulosFilas = .estinoTitulosFilas%Resi9e(, colsFilas) I8 opcionForatear T$en Colorear colorTitulos, .estinoTitulosFilas 1n. I8
3T�tulos .e Totales #et .estinoTitulosTotal = .estinoTotal%O88set(, :)%Resi9e(, ) .estinoTitulosTotal%Value = &Total& I8 opcionForatear T$en Colorear colorTitulos, .estinoTitulosTotal .estinoTotal%Font%#i9e = .estinoTitulosTotal%Font%#i9e = 5.estinoTitulosTotal%Hori9ontalAlignent = 2lRig$t 1n. I8 1n. I8
3Acabar .e 8oratear I8 opcionForatear T$en I8 opcionTitulos T$en .estinoTitulosColunas%Font%#i9e = 5.estinoTitulosColunas%Hori9ontalAlignent = 2lRig$t .estinoTitulosFilas%Font%#i9e = 5.estinoTitulosFilas%Hori9ontalAlignent = 2lCenter 1n. I8 .estinoTitulosatos%Font%#i9e = 5.estinoTitulosatos%Hori9ontalAlignent = 2lCenter
Call CebrarFilas(origenColunas, ColorColunas)
Call CebrarFilas(origenFilas, ColorFilas) Call CebrarFilas(origenatos, Coloratos)
Call CobinarGrupos(.estinoColunas, &FI7A&, ColorColunas,opcionCobinar) Call CobinarGrupos(.estinoFilas, &CO764-A&, ColorFilas,opcionCobinar)
8ilas = .estinoColunas%RoNs%Count
colunas = .estinoFilas%Coluns%Count / I8 opcionCobinar T$en I8 colsColunas Or colsatos T$en Call Bor.earGruposCobina.os(.estinoatos%O88set(:8ilas)%Resi9e(.estinoatos%RoNs%Count 8ilas), &CO764-A&) 1n. I8
I8 colsFilas T$en Call Bor.earGruposCobina.os(.estinoatos%O88set(,:colunas)%Resi9e(, .estinoatos%Coluns%Count colunas), &FI7A&) 1n. I8 1lse I8 colsColunas Or colsatos T$en Call Bor.earGrupos(.estinoatos%O88set(:8ilas)%Resi9e(.estinoatos%RoNs%Count 8ilas), &CO764-A&) 1n. I8 I8 colsFilas T$en
8/18/2019 Tabla Cartesiana en Excel
14/42
Call Bor.earGrupos(.estinoatos%O88set(,:colunas)%Resi9e(, .estinoatos%Coluns%Count colunas), &FI7A&) 1n. I8 1n. I8
Eit$ .estinoTitulosatos%Bor.ers(2l1.geTop)
%7ine#tyle = 2lContinuous %Eeig$t = 2lT$in %ColorIn.e2 = CO7OR_GRI# 1n. Eit$
1n. I8
I8 opcionA!ustar T$en
Call Autoa!ustarColunas(6nion(.estinoFilas, .estinoatos)) 1n. I8
3Fi!ar t�tulos
I8 opcionFi!ar T$en .estinoatos%Eors$eet%Acti"ate .estinoatos%Cells()%Acti"ate Acti"eEin.oN%Free9ePanes = False Acti"eEin.oN%Free9ePanes = True 1n. I8
3Crear nobres .e rango '//0:V:' 3.estinoatos%-ae = &.atos& 3.estinoTotal%-ae = &total& 333etc%
3Finali9aci�n Application%#creen6p.ating = True
CrearTablaCartesiana = True
1n. Function
Public Function CrearTablainaica( _ source As Range, _ colsColunas As Integer, colsFilas As Integer, colsatos As Integer,_ Optional ByVal nobreTabla As #tring = &tabla_.inaica&, _ Optional ByVal nobreGra8ica As #tring = &gra8ica_.inaica& _) As #tring
3Crea una tabla .in�ica y un gr�8ico .in�ico31ntra.a5
3 6na tabla .e agrupaci�n% 7as colunas in.ican ni"eles .e agrupaci�nen .etalle
3 creciente% 7as �ltias colunas son los .atos33'//0:V: ;8co
8/18/2019 Tabla Cartesiana en Excel
15/42
i C$art As C$art i eti?uetas As Range i cel.a As Range i conta.or As Integer i nobre As #tring i eti?ueta As #tring i orientacion As Integer
nobreTabla = -ue"o-obreHo!a(nobreTabla)
Eit$ source%Eors$eet %Visible = 2l#$eetVisible %#elect 1n. Eit$
#et cac$e = Acti"eEorboo%Pi"otCac$es%A..( _ #ourceType5=2latabase, _ #ourceata5=source) #et pi"ot = cac$e%CreatePi"otTable( _ Tableestination5=&&, _ Table-ae5=nobreTabla, _
e8aultVersion5=2lPi"otTableVersion/)
Acti"e#$eet%-ae = nobreTabla
conta.or = /
#et eti?uetas = source%Resi9e() orientacion = 2lColunFiel.
For 1ac$ cel.a In eti?uetas%Cells
nobre = cel.a%Value eti?ueta = nobre & & conta.or = conta.or #elect Case orientacion
Case 2lColunFiel. pi"ot%Pi"otFiel.s(nobre)%Orientation = orientacion I8 conta.or = colsColunas T$en conta.or = / orientacion = 2lRoNFiel. 1n. I8 Case 2lRoNFiel. pi"ot%Pi"otFiel.s(nobre)%Orientation = orientacion I8 conta.or = colsFilas T$en conta.or = / orientacion = 2lataFiel. 1n. I8 Case 2lataFiel. pi"ot%A..ataFiel. pi"ot%Pi"otFiel.s(nobre), eti?ueta,2l#u pi"ot%Pi"otFiel.s(eti?ueta)%-uberForat =cel.a%O88set()%-uberForat 3&M,MM/%//& I8 conta.or = colsatos T$en 12it For 1n. I8 1n. #elect -e2t
8/18/2019 Tabla Cartesiana en Excel
16/42
I8 pi"ot%ataFiel.s%Count T$en pi"ot%ataPi"otFiel.%Orientation = 2lColunFiel. 1n. I8
#et C$art = C$arts%A..(A8ter5=Acti"e#$eet)
C$art%#et#ourceata source5=Eors$eets(nobreTabla)%Range(&A&) C$art%7ocation E$ere5=2l7ocationAs-eN#$eet C$art%-ae = -ue"o-obreHo!a(nobreGra8ica)
CrearTablainaica = nobreTabla
1n. Function
3::::::::::::::::::::::::::::::::::::::::::::::::
3 F6-CIO-1# A6I7IAR1# 1 7A F6-CI�- PRI-CIPA73::::::::::::::::::::::::::::::::::::::::::::::::
Pri"ate Function CopiaratosCartesianos( _ origenColunas As Range, .estinoColunas As Range, _ origenFilas As Range, .estinoFilas As Range, _
origenatos As Range, .estinoatos As Range _) As Boolean3Copia en las posiciones correctas los .atos .e la tabla origen en latabla .estino3'//0:IV:@
i origCol As Range, origFil As Range, origat As Range
i .estCol As Range, .estFil As Range, .estat As Range i .est As Range i cuenta As Integer, a2Cuenta As Integer i nuFils As Integer, in.Fil As Integer, 8il As Integer i nuCols As Integer, in.Col As Integer, col As Integer i nuatos As Integer
nuatos = origenatos%Coluns%Count
#et origCol = origenColunas%Resi9e()
#et origFil = origenFilas%Resi9e() #et origat = origenatos%Resi9e()
#et .estCol = .estinoColunas%Resi9e(, )
#et .estFil = .estinoFilas%Resi9e() #et .estat = .estinoatos%Resi9e(, nuatos)
in.Col = 5 nuCols = .estinoColunas%Coluns%Count Q nuatos
in.Fil = 5 nuFils = .estinoFilas%RoNs%Count
a2Cuenta = origenatos%RoNs%Count
For cuenta = To a2Cuenta
3Buscar la coluna .es.e .�n.e nos ?ue.aos la "e9 anterior%%%
3 1l bucle 8or sir"e para controlar ?ue no entreos en un buclein8inito For col = To nuCols I8 RangosIguales(origCol, .estCol) T$en
8/18/2019 Tabla Cartesiana en Excel
17/42
12it For 1n. I8 I8 in.Col = nuCols T$en in.Col = #et .estCol = .estinoColunas%Resi9e(, ) 1lse in.Col = in.Col
#et .estCol = .estCol%O88set(, nuatos) 1n. I8 -e2t
3Buscar la 8ila .es.e .�n.e nos ?ue.aos la "e9 anterior%%%
3 1l bucle 8or sir"e para controlar ?ue no entreos en un buclein8inito For 8il = To nuFils I8 RangosIguales(origFil, .estFil) T$en 12it For 1n. I8 I8 in.Fil = nuFils T$en in.Fil =
#et .estFil = .estinoFilas%Resi9e() 1lse in.Fil = in.Fil #et .estFil = .estFil%O88set() 1n. I8 -e2t
#et .est = .estat%O88set(in.Fil : , (in.Col : ) nuatos)
333.est%#elect
Call Copiar(origat, .est)
#et origCol = origCol%O88set()
#et origFil = origFil%O88set() #et origat = origat%O88set() -e2t
1n. Function
Pri"ate Function Forular( _ .atos As Range, _ titulos As Range _) As Boolean
3Calcula las 8�rulas pen.ientes3Con"ierte en 8�rulas reales las 8�rulas sipli8ica.as%31!5 3=PrecioLPrecio signi8ica el precio .i"i.i.o por el total .e
precio3 3=PrecioCanti.a. signi8ica el precio por la canti.a.3'//0:IV:@ ;8co
8/18/2019 Tabla Cartesiana en Excel
18/42
i cru.o As #tring, 8orula As #tring i re8 As #tring, re8Total As #tring
colForula =
8ilTotal = .atos%O88set(.atos%RoNs%Count)%Cells()%RoN nuColsatos = .atos%Coluns%Count nuColsTitulos = titulos%Coluns%Count #et coluna = .atos%Resi9e(, )
For colatos = To nuColsatos
For 1ac$ cel.a In coluna
I8 7e8t(cel.a%Value, ) = &=& T$en I8 cel.a%Value ; cru.o T$en cru.o = cel.a%Value 8orula = cru.o For colTitulo = To nuColsTitulos titulo = titulos%Cells(colTitulo)%Value colRe8 = colTitulo : colForula re8 = &RCJ& colRe8 &K&
re8Total = &R& 8ilTotal &CJ& colRe8 &K& 8orula = Replace(8orula, && titulo,re8Total) 8orula = Replace(8orula, titulo, re8) -e2t 1n. I8 cel.a%ForulaRC = 8orula Eit$ cel.a%Font %ColorIn.e2 = CO7OR_C1-ISA %#i9e = 1n. Eit$ 1n. I8 -e2t
#et coluna = coluna%O88set(, ) colForula = colForula I8 colForula nuColsTitulos T$en colForula = 1n. I8 -e2t
1n. Function
Pri"ate Function Foratearatos( _ .atos As Range, _ listaForatos As Variant _) As Boolean
3Foratea las colunas .e .atos y oculta colunas3'//0:V:' ;8co
8/18/2019 Tabla Cartesiana en Excel
19/42
#et atosConTotales = .atos%Resi9e(.atos%RoNs%Count )
#et coluna = atosConTotales%Resi9e(, )
in.ice = /
For cuenta = To .atos%Coluns%Count
I8 in.ice 6Boun.(listaForatos) T$en in.ice = / 1n. I8 8orato = Tri(listaForatos(in.ice))
#elect Case 8orato
Case &&, &:&5 3-a.a Case &H&5 coluna%1ntireColun%Hi..en = True Case 1lse5 coluna%-uberForat = 8orato 1n. #elect
#et coluna = coluna%O88set(, ) in.ice = in.ice -e2t
1n. Function
Pri"ate Function Copiar(origen As Range, .estino As Range) As Boolean3Copia el rango origen en el .estino%3'//0:IV: Call origen%Copy(.estino)1n. Function
Pri"ate Function Or.enarFilas(rango As Range) As Boolean3Or.ena las 8ilas toan.o coo criterio .e or.enaci�n la prieracoluna,
3luego la segun.a, y as� $asta llegar a la �ltia coluna%3
312cel s�lo pue.e or.enar por tres capos a la "e9%3Para solucionar este problea or.enaos por las tres �ltias colunas,3 luego por las siguientes tres colunas a la i9?uier.a .e las anteriores
3 y 8inalente por las colunas ?ue ?ue.en �s a la i9?uier.a31!eplo5 call Or.enarFilas (s$eets(&or.enar&)%range(&*&)%currentregion)33 C :: A '3 B * B
3 A ' B *3 B C 33'//0:IV: ;8co
8/18/2019 Tabla Cartesiana en Excel
20/42
i ultiaColuna As Integer
nuCols = rango%Coluns%Count
nuTriosCopletos = nuCols Q * restoTrio = nuCols 4o. * ultiaColuna = nuCols
#elect Case restoTrio Case 5 rango%#ort _ ey5=rango%Cells(, ultiaColuna) Case '5 rango%#ort _ ey5=rango%Cells(, ultiaColuna : ), _ ey'5=rango%Cells(, ultiaColuna) 1n. #elect ultiaColuna = ultiaColuna : restoTrio
For trio = To nuTriosCopletos
rango%#ort _
ey5=rango%Cells(, ultiaColuna : '), _ ey'5=rango%Cells(, ultiaColuna : ), _ ey*5=rango%Cells(, ultiaColuna) ultiaColuna = ultiaColuna : * -e2t
1n. Function
Pri"ate Function 1liinarFilasuplica.asConsecuti"as(rango As Range) AsInteger3Borra las 8ilas consecuti"os cuyos conteni.os sean los isos%33 A :: A
3 A :3 A :3 B B3 B :33'//0:IV:*
i 8ilaOrigen As Range i 8ilaestino As Range i nuFilas As Integer, 8ila As Integer i nuFilasBorra.as As Integer
nuFilas = rango%RoNs%Count
I8 nuFilas T$en #et 8ilaOrigen = rango%Resi9e() #et 8ilaestino = 8ilaOrigen%O88set() For 8ila = ' To nuFilas I8 RangosIguales(8ilaOrigen, 8ilaestino) T$en Call Borrar(8ilaestino) nuFilasBorra.as = nuFilasBorra.as 1lse #et 8ilaOrigen = 8ilaestino 1n. I8
8/18/2019 Tabla Cartesiana en Excel
21/42
#et 8ilaestino = 8ilaestino%O88set() -e2t 1n. I8 1liinarFilasuplica.asConsecuti"as = nuFilasBorra.as
1n. Function
Pri"ate Function CopactarFilas(rango As Range) As Boolean3#ube las 8ilas in8eriores apro"ec$an.o los $uecos .e 8ilas "ac�as33 A :: A3 : B3 :3 B3 :33'//0:IV:*On 1rror Resue -e2t 3'//0:IV:D pasa a la linea siguiente sin irar elerror rango%#pecialCells(2lCellTypeBlans)%elete #$i8t5=2l6p
1n. Function
Pri"ate Function uplicarFilas(rango As Range, "eces As Integer) AsBoolean
3uplica ca.a 8ila el n�ero .e "eces in.ica.o33 A :': A A :*: A3 B A B A3 C B A3 B B3 C B3 C B3
3'//0:IV:@
i cuenta As Integer i nuFilas As Integer i origen As Range i .estino As Range
nuFilas = rango%RoNs%Count
#et origen = rango%Resi9e()%O88set(nuFilas) #et .estino = rango%Resi9e("eces)%O88set(nuFilas "eces)
For cuenta = To nuFilas
#et origen = origen%O88set(:) #et .estino = .estino%O88set(:"eces) Call Copiar(origen, .estino) -e2t
1n. Function
Pri"ate Function CobinarGrupos( _ rango As Range, _ Optional ByVal tipo As #tring = &CO764-A&, _ Optional ByVal in.iceColorPar As Integer = CO7OR_B7A-CO, _
8/18/2019 Tabla Cartesiana en Excel
22/42
Optional ByVal cobinar As Boolean = True _) As Boolean3Cobina las cel.as consecuti"as con el iso "alor ?ue se encuentren
3 .entro .e la isa coluna o bien .entro .e la isa 8ila seg�n est�3 in.ica.o en el par�etro tipo33 A A B B B :: A B3 a b c . e a b c . e33'//0:IV:*
3'//0:V:' par�etro cobinar
i nuIteraciones As Integer, cuentaIteracion As Integer
i nuCel.as As Integer, cuentaCel.a As Integer i a"anceColuna As Integer, a"anceFila As Integer i cel.aInicio As Range, cel.aOrigen As Range, cel.aestino As Range i grupo As Range i esPar As Boolean
I8 tipo ; &CO764-A& An. tipo ; &FI7A& T$en 12it Function
I8 tipo = &CO764-A& T$en
nuIteraciones = rango%Coluns%Count nuCel.as = rango%RoNs%Count a"anceFila = a"anceColuna = / 1lseI8 tipo = &FI7A& T$en nuIteraciones = rango%RoNs%Count nuCel.as = rango%Coluns%Count a"anceFila = / a"anceColuna = 1n. I8
#et cel.aInicio = rango%Cells() For cuentaIteracion = To nuIteraciones #et cel.aOrigen = cel.aInicio #et cel.aestino = cel.aOrigen%O88set(a"anceFila, a"anceColuna) esPar = False For cuentaCel.a = To nuCel.as I8 cuentaCel.a = nuCel.as Or cel.aOrigen%Value ;cel.aestino%Value T$en #et grupo = Range(cel.aOrigen, cel.aestino%O88set(:a"anceFila, :a"anceColuna)) I8 esPar T$en grupo%Interior%ColorIn.e2 = in.iceColorPar I8 cobinar T$en Eit$ grupo
i "alor As Variant "alor = %Cells()%Value %ClearContents %4erge %Cells()%Value = "alor 3%Bor.erAroun. 2lContinuous, 2lT$in, CO7OR_P7O4O %Hori9ontalAlignent = 2lCenter 32l7e8t32lGeneral %VerticalAlignent = 2lTop 1n. Eit$
8/18/2019 Tabla Cartesiana en Excel
23/42
1lse 3#in cobinar '//0:V:' i cel.a As Range, cel.aPriera As Range i 8orula As #tring #et cel.aPriera = -ot$ing For 1ac$ cel.a In grupo%Cells I8 cel.aPriera Is -ot$ing T$en #et cel.aPriera = cel.a
8orula = &=R& cel.aPriera%RoN &C& cel.aPriera%Colun 1lse cel.a%Font%ColorIn.e2 =cel.a%Interior%ColorIn.e2 338orula = &=RJ;roNKCJ;colunK& 338orula = Replace(8orula, &;roN&,cel.aPriera%RoN : cel.a%RoN) 338orula = Replace(8orula, &;colun&,cel.aPriera%Colun : cel.a%Colun) cel.a%ForulaRC = 8orula 1n. I8 -e2t
1n. I8 esPar = -ot esPar #et cel.aOrigen = cel.aestino 1n. I8 #et cel.aestino = cel.aestino%O88set(a"anceFila,a"anceColuna) -e2t #et cel.aInicio = cel.aInicio%O88set(a"anceColuna, a"anceFila) -e2t
1n. Function
Pri"ate Function Bor.earGruposCobina.os( _ rango As Range, _ Optional ByVal tipo As #tring = &CO764-A& _) As Boolean3Bor.ea los colunas .e arriba a aba!o o las 8ilas .e i9?uier.a a .erec$a
3 seg�n los .atos .e la priera 8ila o priera coluna%3e esta 8ora ?ue.a rearca.o .e 8ora �s patente los gruposprincipales%33 A B :: A B 3 a a b b b a ab b b33'//0:IV:@
i cuenta As Integer, a2Cuenta As Integer
i aplitu. As Integer i grupo As Range
I8 tipo ; &CO764-A& An. tipo ; &FI7A& T$en 12it Function
I8 tipo = &FI7A& T$en a2Cuenta = rango%RoNs%Count #et grupo = rango%Resi9e() rango%Resi9e(rango%RoNs%Count, )%Font%Bol. = True 1lse
8/18/2019 Tabla Cartesiana en Excel
24/42
a2Cuenta = rango%Coluns%Count #et grupo = rango%Resi9e(, ) rango%Resi9e(, rango%Coluns%Count)%Font%Bol. = True 1n. I8
cuenta =
o 6ntil cuenta a2Cuenta I8 tipo = &FI7A& T$en aplitu. = grupo%Cells()%4ergeArea%RoNs%Count #et grupo = grupo%Resi9e(aplitu.) 1lse aplitu. = grupo%Cells()%4ergeArea%Coluns%Count #et grupo = grupo%Resi9e(, aplitu.) 1n. I8
Eit$ grupo
%Bor.erAroun. 2lContinuous, 2l4e.iu, CO7OR_-1GRO 1n. Eit$
cuenta = cuenta aplitu.
I8 tipo = &FI7A& T$en
#et grupo = grupo%O88set(aplitu.) 1lse #et grupo = grupo%O88set(, aplitu.) 1n. I8 7oop
1n. Function
Pri"ate Function Bor.earGrupos( _ rango As Range, _ Optional ByVal tipo As #tring = &CO764-A& _
) As Boolean3Bor.ea los colunas .e arriba a aba!o o las 8ilas .e i9?uier.a a .erec$a
3 seg�n los .atos .e la priera 8ila o priera coluna%3e esta 8ora ?ue.a rearca.o .e 8ora �s patente los gruposprincipales%33 A A B B B :: A AB B B3 a a b b b a ab b b33'//0:IV:'
i nuCel.as As Integer, cuentaCel.a As Integer i a"anceColuna As Integer, a"anceFila As Integer
i cel.aOrigen As Range, cel.aestino As Range i grupo As Range i aplitu. As Integer
I8 tipo ; &CO764-A& An. tipo ; &FI7A& T$en 12it Function
I8 tipo = &FI7A& T$en
nuCel.as = rango%RoNs%Count a"anceFila = 5 a"anceColuna = / aplitu. = rango%Coluns%Count
8/18/2019 Tabla Cartesiana en Excel
25/42
8/18/2019 Tabla Cartesiana en Excel
26/42
Transponer = False 1lse For 8ila = To nuFilas For coluna = To nuColunas .estino%Cells(coluna, 8ila)%Value = origen%Cells(8ila,coluna)%Value -e2t
-e2t Transponer = True 1n. I8
1n. Function
Pri"ate Function Borrar(rango As Range) As Boolean31liina el conteni.o .e las cel.as%3'//0:IV:* rango%Clear1n. Function
Pri"ate Function Rellenar(origen As Range, .estino As Range) As Boolean
3Copia - "eces el rango origen en el rango .estino%33 A B :: A B A B A B %%%33'//0:IV:*On 1rror Resue -e2t 3'//0:IV:' origen%AutoFill estination5=.estino, Type5=2lFille8ault1n. Function
Pri"ate Function RellenarForato(origen As Range, .estino As Range) AsBoolean3Copia el 8orato .e origen en .estino3'//0:IV:@
i in.est As Integer, nuest As Integer i in.Orig As Integer, nuOrig As Integer
nuOrig = origen%Cells%Count
nuest = .estino%Cells%Count
in.Orig =
For in.est = To nuest 333.estino%Cells(in.est)%Value = / .estino%Cells(in.est)%-uberForat =origen%Cells(in.Orig)%-uberForat in.Orig = in.Orig I8 in.Orig nuOrig T$en
in.Orig = 1n. I8 -e2t
1n. Function
Pri"ate Function Totali9ar(origen As Range, .estino As Range,listaForulas As Variant) As Boolean3Crea una 8ila con el total .e ca.a coluna3
8/18/2019 Tabla Cartesiana en Excel
27/42
3Par�etro listaForulas53 1!%5 DDAD& signi8ica la �coluna suar, la '� na.a, la *� proe.io y la � na.a3 1!5 :A:&3 1!5 &=#64(;)DD=AV1RAG1(;)D=RCJ:KLRCJ:'K&3 Abre"iaturas5 #=sua, A=proe.io, :=na.a
33'//0:IV:@
i in.iceColuna As Integer, nuColunas As Integer
i in.iceForula As Integer i coluna As Range i cel.aForula As Range i inicio As Range, 8in As Range i rango As #tring i 8orula As #tring
nuColunas = origen%Coluns%Count
#et coluna = origen%Resi9e(, ) #et inicio = coluna%Cells() #et 8in = coluna%Cells(origen%RoNs%Count) #et cel.aForula = .estino%Resi9e(, )
rango = &RJ;inicioKCJ;colunaK5RJ;8inKCJ;colunaK&
rango = Replace(rango, &;coluna&, inicio%Colun :cel.aForula%Colun) rango = Replace(rango, &;inicio&, inicio%RoN : cel.aForula%RoN) rango = Replace(rango, &;8in&, 8in%RoN : cel.aForula%RoN)
in.iceForula = 7Boun.(listaForulas)
For in.iceColuna = To nuColunas 8orula = listaForulas(in.iceForula)
#elect Case 8orula 3Alias para las 8�rulas Case &5 8orula = &=#64(;)& Case &A&5 8orula = &=AV1RAG1(;)& 1n. #elect
I8 8orula ; && T$en
8orula = Replace(8orula, &;&, rango) cel.aForula%-uberForat = coluna%Cells()%-uberForat I8 7e8t(8orula, ) = &=& T$en cel.aForula%ForulaRC = 8orula 1lse cel.aForula%Value = 8orula 1n. I8
1n. I8
I8 in.iceForula = 6Boun.(listaForulas) T$en in.iceForula = 7Boun.(listaForulas) 1lse in.iceForula = in.iceForula 1n. I8
#et coluna = coluna%O88set(, )
8/18/2019 Tabla Cartesiana en Excel
28/42
#et cel.aForula = cel.aForula%O88set(, ) -e2t
1n. Function
Pri"ate Function CrearGra8icos( _ rangoatos As Range, _ nuColsTitulo As Integer, nuFilasTitulo As Integer, nuatos AsInteger, _ ByVal tiposGra8icos As Variant _) As Boolean
3Crea un gr�8ico por ca.a t�tulo .e .atos33 ::::::::::::::::::::
3 n�8ilasTitulo 3:::::::::::::::::::::::::::::::::
3 n�atos %%% 3:::::::::::::::::::::::::::::::::
3 n�colsTitulo rangoatos 3
3::::::::::::::::::::::::::::::::::3
31l par�etro &tipos .e gr�8icos& co.i8ica un tipo .e gr�8ico .i8erentepara ca.a .ato53 1!5 &C:#:&3 1!5 &CDD#D&3 Abre"iaturas5 C=colunas,#=colunas
apila.as,A=�rea,7=l�nea,B=barras,P=tarta33'//0:V:>, '//0:2:@On 1rror GoTo 1rrores i rango1ncabe9a.o As Range i rangoInicialGra8ico As Range
i rangoTitulos As Range i rangoGra8ico As Range i rangoColuna As Range i cel.a As Range i in.iceTipo As Integer i in.ice As Integer, cuenta As Integer i gra8ico As C$art i tipoGra8ico As Variant 3lC$artType i $o!aelantera As Ob!ect
#et rango1ncabe9a.o = rangoatos%O88set(:nuFilasTitulo :
)%Resi9e(nuFilasTitulo)
#et rangoInicialGra8ico = 6nion( _ rango1ncabe9a.o%Resi9e(, nuColsTitulo)%O88set(, :nuColsTitulo),_ rangoatos%Resi9e(, nuColsTitulo)%O88set(, :nuColsTitulo))
#et rangoTitulos = rangoatos%O88set(:)%Resi9e(, nuatos)
#et $o!aelantera = rangoatos%Eors$eet
in.iceTipo = 7Boun.(tiposGra8icos)
8/18/2019 Tabla Cartesiana en Excel
29/42
cuenta = For 1ac$ cel.a In rangoTitulos%Cells
tipoGra8ico = tiposGra8icos(in.iceTipo)
I8 -ot Is-ueric(tipoGra8ico) T$en
3Alias para los gr�8icos #elect Case tiposGra8icos(in.iceTipo)
Case &C&5 tipoGra8ico = 2lColunClustere. Case &5 tipoGra8ico = 2lColun#tace. Case &A&5 tipoGra8ico = 2lArea#tace. Case &7&5 tipoGra8ico = 2l7ine Case &B&5 tipoGra8ico = 2lBarClustere. Case &P&5 tipoGra8ico = 2lPie Case 1lse5 tipoGra8ico = / 1n. #elect 1n. I8
I8 tipoGra8ico ; / T$en
#et rangoGra8ico = rangoInicialGra8ico
For in.ice = cuenta To rangoatos%Coluns%Count #tep nuatos #et rangoGra8ico = 6nion(rangoGra8ico, _ rango1ncabe9a.o%Coluns(in.ice),rangoatos%Coluns(in.ice)) -e2t
#et gra8ico = C$arts%A..(A8ter5=$o!aelantera) 3'//0:V:'
#et $o!aelantera = gra8ico Eit$ gra8ico %C$artType = tipoGra8ico %#et#ourceata source5=rangoGra8ico, PlotBy5=2lRoNs %7ocation E$ere5=2l7ocationAs-eN#$eet %-ae = -ue"o-obreHo!a(&gra8ico & cel.a%Value)
%HasTitle = True
%C$artTitle%C$aracters%Te2t = cel.a%Value %A2es(2lCategory, 2lPriary)%HasTitle = False 333%A2es(2lCategory, 2lPriary)%A2isTitle%C$aracters%Te2t= &e?uis& %A2es(2lValue, 2lPriary)%HasTitle = False 333%A2es(2lValue, 2lPriary)%A2isTitle%C$aracters%Te2t =&ygriega& 1n. Eit$ 1n. I8
I8 in.iceTipo = 6Boun.(tiposGra8icos) T$en
in.iceTipo = 7Boun.(tiposGra8icos) 1lse in.iceTipo = in.iceTipo 1n. I8 cuenta = cuenta -e2t CrearGra8icos = True#ali.a5 3es eti?ueta, no "ariable 12it Function1rrores5
8/18/2019 Tabla Cartesiana en Excel
30/42
#elect Case 1rr%-uber
Case //5 4sgBo2 &1l gr�8ico tiene .easia.os .atos aanali9ar&, "bIn8oration
Case 1lse5 4sgBo2 1rr%escription, "bCritical, &1rror n�& 1rr%-uber 1n. #elect Resue #ali.a1n. Function
Pri"ate Function Autoa!ustarColunas(rango As Range) As Boolean3'//0:V:'
31ste �to.o no con"iene por?ue uestra las colunas ocultas, las?ue tienen anc$o / 333rango%1ntireColun%AutoFit
i coluna As Range
For 1ac$ coluna In rango%Coluns I8 -ot coluna%Hi..en T$en coluna%1ntireColun%AutoFit
1n. I8 -e2t
1n. Function
3::::::::::::::::::::::::::::::::::::::::::::::::3 OTRA# A6I7IAR1#3::::::::::::::::::::::::::::::::::::::::::::::::
Pri"ate Function RangosIguales(origen As Range, .estino As Range) AsBoolean3In.ica si los conteni.os .e los .os rangos coinci.en
3'//0:IV:*
i cel.aOrigen As Range i cel.aestino As Range i in.iceestino As Integer
I8 origen%Cells%Count = .estino%Cells%Count T$en
in.iceestino = #et cel.aestino = .estino%Cells(in.iceestino) For 1ac$ cel.aOrigen In origen%Cells I8 C#tr(cel.aOrigen%Value) ; C#tr(cel.aestino%Value) T$en3'//0:IV: RangosIguales = False
12it Function 1n. I8 in.iceestino = in.iceestino #et cel.aestino = .estino%Cells(in.iceestino) -e2t RangosIguales = True 1lse RangosIguales = False 1n. I8
8/18/2019 Tabla Cartesiana en Excel
31/42
1n. Function
Pri"ate Function Patron1nArray(ByVal patron As Variant, ByVal colsatosAs Integer) As Variant3'//0:V:' I8 -ot IsArray(patron) T$en I8 patron = && T$en patron = &:&
I8 In#tr(patron, #1PARAOR_7I#TA) T$en patron = #plit(patron, #1PARAOR_7I#TA) 1lse patron = Caracteres1nArray(6Case(7e8t(patron #tring(colsatos, 7e8t(patron, )), colsatos))) 1n. I8 1n. I8 Patron1nArray = patron1n. Function
Attribute VB_-ae = &o.uloGenerico_'//0_/@_'&Option 12plicit
34�.ulo gen�rico3'//0:V:' ;8co
8/18/2019 Tabla Cartesiana en Excel
32/42
For in.ice = To 7en(te2to) caracter = 4i.(te2to, in.ice, ) I8 In#tr(caracteresVali.os, caracter) T$en lista(in.ice : ) = caracter 1n. I8 -e2t .e!arAlgunosCaracteres = Uoin(lista, &&)
1n. Function
Public Function Caracteres1nArray(ByVal te2to As #tring) As Variant3Con"ierte los caracteres .e un te2to en un array31!5 !oin(Caracteres1nArray(&$ola&),&D&) :: &$DoDlDa&3'//0:V:' i lista As Variant i in.ice As Integer Rei lista(7en(te2to) : ) For in.ice = To 7en(te2to) lista(in.ice : ) = 4i.(te2to, in.ice, ) -e2t
Caracteres1nArray = lista1n. Function
Attribute VB_-ae = &o.uloColor_'//_/_/*&Option 12plicit
3Gesti�n .el color3'//0:III:'@ ;8co
8/18/2019 Tabla Cartesiana en Excel
33/42
Public Const CO7OR_GRI# = @Public Const CO7OR_P7O4O =
Public Const CO7OR_C171#T1 = *Public Const CO7OR_41-TA = *@Public Const CO7OR_VAI-I77A = *
Public Const CO7OR_CI17O = *>Public Const CO7OR_RO#A = *Public Const CO7OR_7AVA-A = *0Public Const CO7OR_CA-17A = /
Public Const CO7OR_AG6A4ARI-A = '
Public Const CO7OR_A-ARA-UAO = @Public Const CO7OR_-ARA-UA =
Public Const CO7OR_C1-ISA = @
3::::::::::::::::::::::::::::::::::::::::::::::::
3 F6-CIO-1# PR61BA3::::::::::::::::::::::::::::::::::::::::::::::::
Public #ub Prueba4o.uloColor() Call ColorearTresGrupos(Range(&.atos&), ', ', ')1n. #ub
3::::::::::::::::::::::::::::::::::::::::::::::::3 F6-CIO-1#3::::::::::::::::::::::::::::::::::::::::::::::::
Public Function ColorearFilas( _ cel.aentroRango As Range, _ in.iceColorIpar As Integer, _ in.iceColorPar As Integer, _ colunaInicio As Integer, _ colunaFin As Integer _)3Colorea cebran.o las 8ilas .es.e y $asta las colunas in.ica.as
3Ignora la priera 8ila por?ue se consi.era ?ue es una 8ila .e t�tulos3'//0:III:'@ ;8co
8/18/2019 Tabla Cartesiana en Excel
34/42
-e2t 1n. Function
Public Function Colorear(ParaArray paras())3Colorea el 8on.o .e los rangos in.ica.os con los colores in.ica.os31!eplo5 Call Colorear (CO7OR_ROUO, Range(&A5A&), Range(&B*&),
CO7OR_AS67, Range(&C'&))3'//0:IV: ;8co
8/18/2019 Tabla Cartesiana en Excel
35/42
3'//0:IV:@
Eit$ rango%Bor.ers %7ine#tyle = 2lContinuous %Eeig$t = 2lT$in %ColorIn.e2 = CO7OR_P7O4O 1n. Eit$
1n. Function
Public Function ColorearColunas( _ rango As Range, _ nu1leentos As Integer, _ in.icesColor As Variant _) As Boolean3Colorea .e - en - colunas con la lista .e colores in.ica.os%3'//0:IV:@ i coluna As Range i in.iceColuna As Integer, nuColunas As Integer
i in.ice1leento As Integer i in.iceColor As Integer, nuColores As Integer
nuColunas = rango%Coluns%Count nuColores = 3 6Boun.(in.icesColor) 3'//:VI:*
#et coluna = rango%Resi9e(, ) For in.iceColuna = To nuColunas
Eit$ coluna%Interior %ColorIn.e2 = in.icesColor(in.iceColor) 1n. Eit$
in.ice1leento = in.ice1leento I8 in.ice1leento = nu1leentos T$en in.ice1leento = / 1n. I8
in.iceColor = in.iceColor 3in.ice1leento 3'//:VI:* I8 in.iceColor = nuColores T$en in.iceColor = / 1n. I8
#et coluna = coluna%O88set(, ) -e2t
1n. Function
Public Function ColorearTresGrupos( _ inicioRango As Range, _ nuColunas As Integer, _ nuColunas' As Integer, _ nuColunas* As Integer _)3Colorea cebran.o las 8ilas .e tres grupos .e colunas consecuti"os3'//0:III:'@ ;8co
8/18/2019 Tabla Cartesiana en Excel
36/42
i colunaInicio As Integer i colunaFin As Integer
colunaInicio = colunaFin colunaFin = colunaInicio nuColunas : Call ColorearFilas(inicioRango, CO7OR_CI17O, CO7OR_B7A-CO,
colunaInicio, colunaFin)
colunaInicio = colunaFin colunaFin = colunaInicio nuColunas' : Call ColorearFilas(inicioRango, CO7OR_CA-17A, CO7OR_B7A-CO,colunaInicio, colunaFin)
colunaInicio = colunaFin colunaFin = colunaInicio nuColunas* : Call ColorearFilas(inicioRango, CO7OR_41-TA, CO7OR_B7A-CO,colunaInicio, colunaFin)1n. Function
3::::::::::::::::::::::::::::::::::::::::::::::::3Color .e8ini.o para las 8ilas ipares y pares .e la tabla .estino%
Public Function ColorColunas(Optional nuColor As Integer) As Integer #elect Case nuColor 4o. ' Case CO7OR_PAR5 ColorColunas = CO7OR_C171#T1 3CO7OR_A-ARA-UAO Case CO7OR_I4PAR5 ColorColunas = CO7OR_CI17O 3CO7OR_-ARA-UA 1n. #elect1n. FunctionPublic Function ColorFilas(Optional nuColor As Integer) As Integer #elect Case nuColor 4o. ' Case CO7OR_PAR5 ColorFilas = CO7OR_C171#T1 3CO7OR_T6RW61#A Case CO7OR_I4PAR5 ColorFilas = CO7OR_CI17O 3CO7OR_AG6A4ARI-A 1n. #elect1n. FunctionPublic Function Coloratos(Optional nuColor As Integer) As Integer #elect Case nuColor 4o. ' Case CO7OR_PAR5 Coloratos = CO7OR_B7A-CO Case CO7OR_I4PAR5 Coloratos = CO7OR_41-TA 1n. #elect1n. FunctionPublic Function colorTitulos(Optional nuColor As Integer) As Integer colorTitulos = CO7OR_P7O4O1n. FunctionPublic Function colorForula(Optional nuColor As Integer) As Integer colorForula = CO7OR_GRI#1n. Function
3::::::::::::::::::::::::::::::::::::::::::::::::Attribute VB_-ae = &o.uloForulas_'//_/>_@&Option 12plicit
3Funciones para 8�rulas .e las cel.as3'//:VII:@ ;8co
8/18/2019 Tabla Cartesiana en Excel
37/42
Optional ByVal "alorOision As Variant = -ull _) As Variant
31"ita el error .e .i"isi�n por cero en las 8�rulas .e c�lculo .eprecios3'//:VII:@ ;8co
8/18/2019 Tabla Cartesiana en Excel
38/42
Call CrearTablaCartesiana( _
Eors$eets(&e!eplo'&)%Range(&B'&), _ Eors$eets(&e!eplo'&)%Range(&+'&), _ ', ', , _ opcionFi!ar5=False, _ opcionA!ustar5=False)
1n. #ub
Public #ub 4acro1!eplo*_() Eors$eets(&.estino&)%Range(&A5IV&)%1ntireColun%elete
Call CrearTablaCartesiana( _ Eors$eets(&origen&)%Range(&B'&), _ Eors$eets(&.estino&)%Range(&B'&), _ , *, )1n. #ub
Public #ub 4acro1!eplo*_'() Eors$eets(&.estino&)%Range(&A5IV&)%1ntireColun%elete
Call CrearTablaCartesiana( _
Eors$eets(&origen&)%Range(&B'&), _ Eors$eets(&.estino&)%Range(&B'&), _ ', ', )1n. #ub
Public #ub 4acroVerCo.igoFuente() #en.+eys &XYFZ&1n. #ub
Attribute VB_-ae = &o.ulo4acros_'//0_/@_'&Option 12plicit
Pri"ate nuCols As IntegerPri"ate nuFils As IntegerPri"ate nuatos As Integer
8/18/2019 Tabla Cartesiana en Excel
39/42
Public #ub 4acroCrearTablaCartesiana( _ ByVal colsColunas As Integer, _ ByVal colsFilas As Integer, _ ByVal colsatos As Integer, _ Optional ByVal patronGra8icos As Variant = &&, _ Optional ByVal patronTotales As Variant = &&, _ Optional ByVal patronForatos As Variant = && _
)3'//0:V:'
i opcionGra8icos As Boolean i opcionTotales As Boolean
opcionGra8icos = patronGra8icos ; && opcionTotales = patronTotales ; &&
Call CrearTablaCartesiana( _ Eors$eets(&.atos&)%Range(&.atos&), _ Eors$eets(&reporte&)%Range(&reporte&), _ colsColunas, colsFilas, colsatos, _
opcionFi!ar5=False, _ opcionGra8icos5=opcionGra8icos, patronGra8icos5=patronGra8icos, _ opcionTotales5=opcionTotales, patronTotales5=patronTotales, _ patronForatos5=patronForatos _ )
Eors$eets(&reporte&)%Acti"ate Eors$eets(&.atos&)%Visible = False
3Recor.ar nuCols = colsColunas nuFils = colsFilas nuatos = colsatos1n. #ub
Public #ub 4acroCrearTablainaica() Call CrearTablainaica( _ Eors$eets(&.atos&)%Range(&.atos&)%CurrentRegion, _ nuCols, nuFils, nuatos)1n. #ub
3Public #ub 4acroTest()3 Call CrearTablaCartesiana( _3 Eors$eets(&.atos&)%Range(&.atos&), _3 Eors$eets(&reporte&)%Range(&a@&), _3 ', ', , _3 opcionFi!ar5=False)
31n. #ub
Attribute VB_-ae = &o.uloHo!as_'//0_/@_'&Option 12plicit
8/18/2019 Tabla Cartesiana en Excel
40/42
34�.ulo Ho!as3'//0:V:> "ersi�n %/ ;8co i nue"o-obre As #tring i conta.or As Integer
nobre = -orali9ar-obreHo!a(nobre) I8 nobre = && T$en nobre = &$o!a& 1n. I8
nue"o-obre = nobre conta.or = o 6ntil -ot 12iste-obreHo!a(nue"o-obre) conta.or = conta.or
nue"o-obre = nobre conta.or 7oop
-ue"o-obreHo!a = nue"o-obre
1n. Function
Public Function BorraratosHo!a(ByVal nobre As #tring) As Boolean3'//0:V:> Eors$eets(nobre)%Range(&A5IV&)%1ntireColun%elete1n. Function
Public Function BorrarHo!as(ByVal patron As #tring) As Boolean
3Borra to.as las $o!as cuyo nobre casen con el patr�n in.ica.o31!eplo5 BorrarHo!as(&gra8ico&) borra to.as las $o!as ?ue se llaengra8ico3'//0:V:>
i lista As Variant i nobre As Variant
lista = 7istaHo!as(patron) Application%isplayAlerts = False
8/18/2019 Tabla Cartesiana en Excel
41/42
For 1ac$ nobre In lista #$eets(nobre)%elete -e2t Application%isplayAlerts = True
1n. Function
3::::::::::::::::::::::::::::::::::::::::::::::::3 F6-CIO-1# A6I7IAR1#3::::::::::::::::::::::::::::::::::::::::::::::::
Pri"ate Function 7istaHo!as(ByVal patron As #tring) As Variant
31l patron pue.e tener asterisco .elante, .etr�s o .elante y .etr�s%3Por e!eplo5 &$o!a& retorna to.as los nobre .e $o!a ?ue incluya lapalabra $o!a3 Uoin(7istaHo!as(&e!eplo&),&,&)3'//0:V:> Const 17141-TO_#1PARAOR = &L&
i $o!a As Ob!ect 3-i #$eet ni Eors$eet "an bien
i tipo As #tring i lista As #tring i nobre As #tring i o As Boolean
I8 7e8t(patron, ) = && An. Rig$t(patron, ) = && T$en tipo = &CO-TI1-1& 1lseI8 7e8t(patron, ) = && T$en tipo = &ACABA& 1lseI8 Rig$t(patron, ) = && T$en tipo = &14PI1SA& 1lse tipo = &1#& 1n. I8 patron = Replace(patron, &&, &&)
For 1ac$ $o!a In #$eets nobre = $o!a%-ae o = False #elect Case tipo Case &1#&5 o = patron = nobre Case &14PI1SA&5 o = patron = 7e8t(nobre, 7en(patron)) Case &ACABA&5 o = patron = Rig$t(nobre, 7en(patron)) Case &CO-TI1-1&5 o = / ; In#tr(nobre, patron) 1n. #elect I8 o T$en I8 lista ; && T$en lista = lista 17141-TO_#1PARAOR
lista = lista nobre 1n. I8 -e2t 7istaHo!as = #plit(lista, 17141-TO_#1PARAOR)1n. Function
Pri"ate Function 12iste-obreHo!a(ByVal nobre As #tring) As Boolean3Coprueba si e2iste el nobre .e $o!a in.ica.o en el libro actual3'//0:V:>
8/18/2019 Tabla Cartesiana en Excel
42/42
i $o!a As Ob!ect 3-i #$eet ni Eors$eet "an bien
For 1ac$ $o!a In #$eets I8 7Case($o!a%-ae) = 7Case(nobre) T$en 12iste-obreHo!a = True 12it Function
1n. I8 -e2t 12iste-obreHo!a = False
1n. Function
Pri"ate Function -orali9ar-obreHo!a(ByVal nobre As #tring) As #tring
3e!a s�los caracteres al8anu�ricos, el gui�n, el gui�n ba!o y elespacio31liina el resto .e caracteres entre ellos los acentos y signos .e
puntuaci�n3'//0:V:>
Const CARACT1R1#_VA7IO# =&abc.e8g$i!ln�op?rstu"N2y9ABC1FGHIU+74-�OPWR#T6VE[S/'*@>0:_ &
-orali9ar-obreHo!a = Tri(.e!arAlgunosCaracteres(nobre,CARACT1R1#_VA7IO#))1n. Function
Top Related