Tabla Cartesiana en Excel

Embed Size (px)

Citation preview

  • 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