Tabla Cartesiana en Excel
Tabla Cartesiana en Excel
Tabla Cartesiana en Excel
Francisco 06-04-09
Programacin : Ofimtica
Formato de entrada
La entrada es una tabla colocada en una hoja de clculo cuyas columnas estn
dispuestas en las siguientes posiciones:
Anlisis visual
1. Tabla de origen Los datos de partida
2. Filas de la tabla destino Proceso paso a paso sobre las filas
3. Columnas de la tabla destino Proceso paso a paso sobre las columnas
4. Tabla destino Proceso para colocar los datos
Parmetros de la funcin
Parmetro
Descripcin
origen
destino
colsColumnas
colsFilas
colsDatos
opcionCombinar
opcionTotal
opcionFormatea
r
opcionAjustar
Parmetro
opcionFijar
Descripcin
Fija los titulos de la hoja de clculo
Ejemplos de uso
Cdigo
Ejemplo
Call CrearTablaCartesiana( _
ActiveSheet.Range("B2"), _
ActiveSheet.Range("B26"), _
2, 2, 2)
Pantallazo 1-1
Call CrearTablaCartesiana( _
ActiveSheet.Range("B2"), _
ActiveSheet.Range("B26"), _
1, 3, 2)
Pantallazo 1-2
Call CrearTablaCartesiana( _
ActiveSheet.Range("B2"), _
ActiveSheet.Range("K2"), _
1, 3, 4)
Pantallazo 2-1
Call CrearTablaCartesiana( _
ActiveSheet.Range("B2"), _
ActiveSheet.Range("K2"), _
2, 2, 4)
Pantallazo 2-2
Frmulas
Se pueden agregar algunas frmulas escritas de una forma simplificada que luego
se traducen a frmulas autnticas de la hoja de clculo. Ejemplos:
'=Precio*Cantidad
'=Importe/
$Importe
Cdigo fuente
moduloColor
Funciones:
o ColorearFilas Colorea cebrando (una fila s y otra
no) las filas desde y hasta las columnas indicadas.
Ignora la primera fila porque se la considera de
ttulos.
o Colorear Colorea el fondo de los rangos indicados
con los colores indicados.
o CebrarFilas Colorea las filas pares del rango
indicado.
o Cuadricular Bordea las celdas del rango indicado.
o ColorearColumnas Colorea de N en N columnas con la lista de
colores indicados.
o ColorColumnas, ColorFilas, ColorDatos, ColorTitulos,
ColorFormula Color definido para las filas impares y pares de la
tabla destino.
moduloCartesiano
Pblico
o CrearTablaCartesiana Funcin principal
TC
TF
TD
c1
f1
c1
f2
TC
c1
c2
d1
TF
TD
TD
d2
f1
d1
d3
c2
f1
d3
c2
f2
d4
f2
d2
Privado
o CopiarDatosCartesianos Copia en las posiciones correctas los
datos de la tabla origen en la tabla destino
o Formular Calcula las frmulas pendientes. Convierte en frmulas
reales las frmulas simplificadas.
o Copiar Copia el rango origen en el destino.
o OrdenarFilas Ordena las filas tomando como criterio de
ordenacin las columnas de la primera hasta la ltima.
C1
B3
A2
B1
A2
B1
B3
C1
A
B
-
A
B
d4
A
B
C
A
A
B
B
C
C
A
B
---A--- --B-VWXYZ
| A | B |
|V W X | Y Z |
ABC
A B A B A B A B ...
A
A
A
B
B
B
Descarga
Todo el cdigo y ejemplos de uso
tabla_cartesiana_2010-06-03.xls.7z
2, 2, 4)
End Sub
'-----------------------------------------------' FUNCION PRINCIPAL
'-----------------------------------------------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 opcionTotales As Boolean = True, _
Optional ByVal opcionGraficos As Boolean = False, _
Optional ByVal opcionCombinar 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, _
Optional ByVal opcionTitulos As Boolean = True, _
Optional ByVal patronTotales As Variant = "S", _
Optional ByVal patronGraficos As Variant = "C", _
Optional ByVal patronFormatos As Variant = "" _
) As Boolean
'Funcin principal
'
'
Origen
Destino
'
'
TC TF TD
TC c1 c2
'
c1 f1 d1
TF TD TD
'
c1 f2 d2
-->
f1 d1 d3
'
c2 f1 d3
f2 d2 d4
'
c4 f2 d4
'
'
' Patrn totales:
'
Ej: "S-A-"
'
Ej: "=SUM(<>);;=AVERAGE(<>);=RC[-1]/RC[-2]"
'
Abreviaturas: S=suma, A=promedio, -=nada
'
' Patrn grficos:
'
Ej: "C-S-"
'
Ej: "C;;S;"
'
Abreviaturas: C=columnas,S=columnas
apiladas,A=rea,L=lnea,B=barras,P=tarta
'
' Patrn formatos:
'
Ej: "-H-"
oculta la segunda columna de datos
'
Ej: ";#.##0" formatea la segunda columna
'
'2009-IV-1 <fco@proinf.net>
'2009-IV-5
'2009-IV-23 Opcin ttulos y opcin grficos
'2009-V-12 Patrn de totales y grficos
'Comprobacin inicial
Exit Function
End If
'Inicializacin
Application.ScreenUpdating = False 'TRUE=para depurar, FALSE=versin
final
'Declaracin de variables
Dim origenTitulosColumnas As Range, destinoTitulosColumnas As Range
Dim origenTitulosFilas As Range, destinoTitulosFilas As Range
Dim origenTitulosDatos As Range, destinoTitulosDatos As Range
Dim origenColumnas As Range, destinoColumnas As Range
Dim origenFilas As Range, destinoFilas As Range
Dim origenDatos As Range, destinoDatos As Range
Dim destinoTitulosTotal As Range, destinoTotal As Range
Dim rangoTrabajo As Range
Dim filasOrigen As Integer
Dim filas As Integer, columnas As Integer, rango As Range
'Corregir parmetros
Set origen = origen.CurrentRegion
Set destino = destino.Range("A1")
'Averiguar rangos
filasOrigen = origen.Rows.Count
Set origenColumnas = origen.Offset(1, 0).Resize(filasOrigen - 1,
colsColumnas)
Set origenFilas = origen.Offset(1, colsColumnas).Resize(filasOrigen 1, colsFilas)
Set origenDatos = origen.Offset(1, colsColumnas +
colsFilas).Resize(filasOrigen - 1, colsDatos)
'''
Set origenTitulosColumnas = origenColumnas.Offset(-1, 0).Resize(1)
Set origenTitulosFilas = origenFilas.Offset(-1, 0).Resize(1)
Set origenTitulosDatos = origenDatos.Offset(-1, 0).Resize(1)
Set
Set
Set
'''
Set
Set
Set
'Comprobacin visual
If opcionFormatear Then
'Ttulos de fila
Call Copiar(origenTitulosFilas, destinoTitulosFilas)
Set destinoTitulosFilas = destinoTitulosFilas.Resize(, colsFilas)
If opcionFormatear Then
Colorear colorTitulos, destinoTitulosFilas
End If
'Ttulos de Totales
Set destinoTitulosTotal = destinoTotal.Offset(, -1).Resize(, 1)
destinoTitulosTotal.Value = "Total"
If opcionFormatear Then
Colorear colorTitulos, destinoTitulosTotal
destinoTotal.Font.Size = 8
destinoTitulosTotal.Font.Size = 8:
destinoTitulosTotal.HorizontalAlignment = xlRight
End If
End If
'Acabar de formatear
If opcionFormatear Then
If opcionTitulos Then
destinoTitulosColumnas.Font.Size = 8:
destinoTitulosColumnas.HorizontalAlignment = xlRight
destinoTitulosFilas.Font.Size = 8:
destinoTitulosFilas.HorizontalAlignment = xlCenter
End If
destinoTitulosDatos.Font.Size = 8:
destinoTitulosDatos.HorizontalAlignment = xlCenter
Call CebrarFilas(origenColumnas, ColorColumnas)
Call CebrarFilas(origenFilas, ColorFilas)
Call CebrarFilas(origenDatos, ColorDatos)
Call CombinarGrupos(destinoColumnas, "FILA", ColorColumnas,
opcionCombinar)
Call CombinarGrupos(destinoFilas, "COLUMNA", ColorFilas,
opcionCombinar)
filas = destinoColumnas.Rows.Count + 1
columnas = destinoFilas.Columns.Count + 0
If opcionCombinar Then
If colsColumnas > 1 Or colsDatos > 1 Then
Call BordearGruposCombinados(destinoDatos.Offset(filas).Resize(destinoDatos.Rows.Count + filas), "COLUMNA")
End If
If colsFilas > 1 Then
Call BordearGruposCombinados(destinoDatos.Offset(,
-columnas).Resize(, destinoDatos.Columns.Count + columnas), "FILA")
End If
Else
If colsColumnas > 1 Or colsDatos > 1 Then
Call BordearGrupos(destinoDatos.Offset(filas).Resize(destinoDatos.Rows.Count + filas), "COLUMNA")
End If
If colsFilas > 1 Then
Call BordearGrupos(destinoDatos.Offset(,
-columnas).Resize(, destinoDatos.Columns.Count + columnas), "FILA")
End If
End If
With destinoTitulosDatos.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = COLOR_GRIS
End With
End If
If opcionAjustar Then
Call AutoajustarColumnas(Union(destinoFilas, destinoDatos))
End If
'Fijar ttulos
If opcionFijar Then
destinoDatos.Worksheet.Activate
destinoDatos.Cells(1).Activate
ActiveWindow.FreezePanes = False
ActiveWindow.FreezePanes = True
End If
'Crear nombres de rango 2009-V-21
'destinoDatos.Name = "datos"
'destinoTotal.Name = "total"
'''etc.
'Finalizacin
Application.ScreenUpdating = True
CrearTablaCartesiana = True
End Function
Public Function CrearTablaDinamica( _
source As Range, _
colsColumnas As Integer, colsFilas As Integer, colsDatos As Integer,
_
Optional ByVal nombreTabla As String = "tabla_dinamica", _
Optional ByVal nombreGrafica As String = "grafica_dinamica" _
) As String
'Crea una tabla dinmica y un grfico dinmico
'Entrada:
'
Una tabla de agrupacin. Las columnas indican niveles de agrupacin
en detalle
'
creciente. Las ltimas columnas son los datos
'
'2009-V-14 <fco@proinf.net>
'Cdigo
Dim cache As PivotCache
Dim pivot As PivotTable
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Chart As Chart
etiquetas As Range
celda As Range
contador As Integer
nombre As String
etiqueta As String
orientacion As Integer
nombreTabla = NuevoNombreHoja(nombreTabla)
With source.Worksheet
.Visible = xlSheetVisible
.Select
End With
Set cache = ActiveWorkbook.PivotCaches.Add( _
SourceType:=xlDatabase, _
SourceData:=source)
Set pivot = cache.CreatePivotTable( _
TableDestination:="", _
TableName:=nombreTabla, _
DefaultVersion:=xlPivotTableVersion10)
ActiveSheet.Name = nombreTabla
contador = 0
Set etiquetas = source.Resize(1)
orientacion = xlColumnField
For Each celda In etiquetas.Cells
nombre = celda.Value
etiqueta = nombre & " "
contador = contador + 1
Select Case orientacion
Case xlColumnField
pivot.PivotFields(nombre).Orientation = orientacion
If contador >= colsColumnas Then
contador = 0
orientacion = xlRowField
End If
Case xlRowField
pivot.PivotFields(nombre).Orientation = orientacion
If contador >= colsFilas Then
contador = 0
orientacion = xlDataField
End If
Case xlDataField
pivot.AddDataField pivot.PivotFields(nombre), etiqueta,
xlSum
pivot.PivotFields(etiqueta).NumberFormat =
celda.Offset(1).NumberFormat '"#,##0.00"
If contador >= colsDatos Then
Exit For
End If
End Select
Next
numDatos = origenDatos.Columns.Count
Set origCol = origenColumnas.Resize(1)
Set origFil = origenFilas.Resize(1)
Set origDat = origenDatos.Resize(1)
Set destCol = destinoColumnas.Resize(, 1)
Set destFil = destinoFilas.Resize(1)
Set destDat = destinoDatos.Resize(1, numDatos)
indCol = 1: numCols = destinoColumnas.Columns.Count \ numDatos
indFil = 1: numFils = destinoFilas.Rows.Count
maxCuenta = origenDatos.Rows.Count
For cuenta = 1 To maxCuenta
'Buscar la columna desde dnde nos quedamos la vez anterior...
' El bucle for sirve para controlar que no entremos en un bucle
infinito
Exit For
End If
If indCol >= numCols Then
indCol = 1
Set destCol = destinoColumnas.Resize(, 1)
Else
indCol = indCol + 1
Set destCol = destCol.Offset(, numDatos)
End If
Next
'Buscar la fila desde dnde nos quedamos la vez anterior...
' El bucle for sirve para controlar que no entremos en un bucle
infinito
Next
End Function
Private Function Formular( _
datos As Range, _
titulos As Range _
) As Boolean
'Calcula las frmulas pendientes
'Convierte en frmulas reales las frmulas simplificadas.
'Ej: '=Precio/$Precio
significa el precio dividido por el total de
precio
'
'=Precio*Cantidad significa el precio por la cantidad
'2009-IV-5 <fco@proinf.net>
Dim
Dim
Dim
Dim
Dim
Dim
DatosConTotales As Range
columna As Range
indice As Integer
cuenta As Integer
fila As Integer
formato As String
numCols As Integer
numTriosCompletos As Integer
trio As Integer
restoTrio As Integer
ultimaColumna)
ultimaColumna - 1), _
ultimaColumna)
restoTrio
filaOrigen As Range
filaDestino As Range
numFilas As Integer, fila As Integer
numFilasBorradas As Integer
numFilas = rango.Rows.Count
If numFilas > 1 Then
Set filaOrigen = rango.Resize(1)
Set filaDestino = filaOrigen.Offset(1)
For fila = 2 To numFilas
If RangosIguales(filaOrigen, filaDestino) Then
Call Borrar(filaDestino)
numFilasBorradas = numFilasBorradas + 1
Else
Set filaOrigen = filaDestino
End If
cuenta As Integer
numFilas As Integer
origen As Range
destino As Range
numFilas = rango.Rows.Count
Set origen = rango.Resize(1).Offset(numFilas)
Set destino = rango.Resize(veces).Offset(numFilas * veces)
For cuenta = 1 To numFilas
Set origen = origen.Offset(-1)
Set destino = destino.Offset(-veces)
Call Copiar(origen, destino)
Next
End Function
Private Function CombinarGrupos( _
rango As Range, _
Optional ByVal tipo As String = "COLUMNA", _
Optional ByVal indiceColorPar As Integer = COLOR_BLANCO, _
If tipo <> "COLUMNA" And tipo <> "FILA" Then Exit Function
If tipo = "COLUMNA" Then
numIteraciones = rango.Columns.Count
numCeldas = rango.Rows.Count
avanceFila = 1
avanceColumna = 0
ElseIf tipo = "FILA" Then
numIteraciones = rango.Rows.Count
numCeldas = rango.Columns.Count
avanceFila = 0
avanceColumna = 1
End If
Set celdaInicio = rango.Cells(1)
For cuentaIteracion = 1 To numIteraciones
Set celdaOrigen = celdaInicio
Set celdaDestino = celdaOrigen.Offset(avanceFila, avanceColumna)
esPar = False
For cuentaCelda = 1 To numCeldas
If cuentaCelda = numCeldas Or celdaOrigen.Value <>
celdaDestino.Value Then
Set grupo = Range(celdaOrigen, celdaDestino.Offset(avanceFila, -avanceColumna))
If esPar Then grupo.Interior.ColorIndex = indiceColorPar
If combinar Then
With grupo
Dim valor As Variant
valor = .Cells(1).Value
.ClearContents
.Merge
.Cells(1).Value = valor
'.BorderAround xlContinuous, xlThin, COLOR_PLOMO
.HorizontalAlignment = xlCenter 'xlLeft
'xlGeneral
.VerticalAlignment = xlTop
End With
maxCuenta = rango.Columns.Count
Set grupo = rango.Resize(, 1)
rango.Resize(1, rango.Columns.Count).Font.Bold = True
End If
cuenta = 1
Do Until cuenta > maxCuenta
If tipo = "FILA" Then
amplitud = grupo.Cells(1).MergeArea.Rows.Count
Set grupo = grupo.Resize(amplitud)
Else
amplitud = grupo.Cells(1).MergeArea.Columns.Count
Set grupo = grupo.Resize(, amplitud)
End If
With grupo
.BorderAround xlContinuous, xlMedium, COLOR_NEGRO
End With
cuenta = cuenta + amplitud
If tipo = "FILA" Then
Set grupo = grupo.Offset(amplitud)
Else
Set grupo = grupo.Offset(, amplitud)
End If
Loop
End Function
Private Function BordearGrupos( _
rango As Range, _
Optional ByVal tipo As String = "COLUMNA" _
) As Boolean
'Bordea los columnas de arriba a abajo o las filas de izquierda a derecha
' segn los datos de la primera fila o primera columna.
'De esta forma queda remarcado de forma ms patente los grupos
principales.
'
' A A B B B --> |A A|B B B|
' a a b b b
|a a|b b b|
'
'2009-IV-12
Dim
Dim
Dim
Dim
Dim
If tipo <> "COLUMNA" And tipo <> "FILA" Then Exit Function
If tipo = "FILA" Then
numCeldas = rango.Rows.Count
avanceFila = 1: avanceColumna = 0
amplitud = rango.Columns.Count
Next
End Function
Transponer = False
Else
'Parmetro listaFormulas:
' Ej.: "S;;A;" significa la 1columna sumar, la 2 nada, la 3
promedio y la 4 nada
' Ej: "S-A-"
' Ej: "=SUM(<>);;=AVERAGE(<>);=RC[-1]/RC[-2]"
' Abreviaturas: S=suma, A=promedio, -=nada
'
'2009-IV-5
Dim
Dim
Dim
Dim
Dim
Dim
Dim
numColumnas = origen.Columns.Count
Set columna = origen.Resize(, 1)
Set inicio = columna.Cells(1)
Set fin = columna.Cells(origen.Rows.Count)
Set celdaFormula = destino.Resize(1, 1)
rango = "R[<inicio>]C[<columna>]:R[<fin>]C[<columna>]"
rango = Replace(rango, "<columna>", inicio.Column celdaFormula.Column)
rango = Replace(rango, "<inicio>", inicio.Row - celdaFormula.Row)
rango = Replace(rango, "<fin>", fin.Row - celdaFormula.Row)
indiceFormula = LBound(listaFormulas)
For indiceColumna = 1 To numColumnas
formula = listaFormulas(indiceFormula)
Select Case formula 'Alias para las frmulas
Case "S": formula = "=SUM(<>)"
Case "A": formula = "=AVERAGE(<>)"
End Select
If formula <> "" Then
formula = Replace(formula, "<>", rango)
celdaFormula.NumberFormat = columna.Cells(1).NumberFormat
If Left(formula, 1) = "=" Then
celdaFormula.FormulaR1C1 = formula
Else
celdaFormula.Value = formula
End If
End If
If indiceFormula = UBound(listaFormulas) Then
indiceFormula = LBound(listaFormulas)
Else
indiceFormula = indiceFormula + 1
End If
Set columna = columna.Offset(, 1)
cuenta = 1
For Each celda In rangoTitulos.Cells
tipoGrafico = tiposGraficos(indiceTipo)
If Not IsNumeric(tipoGrafico) Then
'Alias para los grficos
Select Case tiposGraficos(indiceTipo)
Case "C": tipoGrafico = xlColumnClustered
Case "S": tipoGrafico = xlColumnStacked
Case "A": tipoGrafico = xlAreaStacked
Case "L": tipoGrafico = xlLine
Case "B": tipoGrafico = xlBarClustered
Case "P": tipoGrafico = xlPie
Case Else: tipoGrafico = 0
End Select
End If
If tipoGrafico <> 0 Then
Set rangoGrafico = rangoInicialGrafico
For indice = cuenta To rangoDatos.Columns.Count Step numDatos
Set rangoGrafico = Union(rangoGrafico, _
rangoEncabezado.Columns(indice),
rangoDatos.Columns(indice))
Next
Set grafico = Charts.Add(After:=hojaDelantera) '2009-V-12
Set hojaDelantera = grafico
With grafico
.ChartType = tipoGrafico
.SetSourceData source:=rangoGrafico, PlotBy:=xlRows
.Location Where:=xlLocationAsNewSheet
.Name = NuevoNombreHoja("grafico " & celda.Value)
= "equis"
.HasTitle = True
.ChartTitle.Characters.Text = celda.Value
.Axes(xlCategory, xlPrimary).HasTitle = False
'''.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text
.Axes(xlValue, xlPrimary).HasTitle = False
'''.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text =
"ygriega"
End With
End If
If indiceTipo = UBound(tiposGraficos) Then
indiceTipo = LBound(tiposGraficos)
Else
indiceTipo = indiceTipo + 1
End If
cuenta = cuenta + 1
Next
CrearGraficos = True
Salida: 'es etiqueta, no variable
Exit Function
Errores:
End Function
Private Function PatronEnArray(ByVal patron As Variant, ByVal colsDatos
As Integer) As Variant
'2009-V-12
If Not IsArray(patron) Then
If patron = "" Then patron = "-"
If InStr(patron, SEPARADOR_LISTA) Then
patron = Split(patron, SEPARADOR_LISTA)
Else
patron = CaracteresEnArray(UCase(Left(patron &
String(colsDatos, Left(patron, 1)), colsDatos)))
End If
End If
PatronEnArray = patron
End Function
Const
Const
Const
Const
Const
Const
Const
COLOR_CELESTE = 34
COLOR_MENTA = 35
COLOR_VAINILLA = 36
COLOR_CIELO = 37
COLOR_ROSA = 38
COLOR_LAVANDA = 39
COLOR_CANELA = 40
tabla As Range
celda As Range
par As Boolean
indiceColor As Integer
Next
End Function
Public Function Colorear(ParamArray params())
'Colorea el fondo de los rangos indicados con los colores indicados
'Ejemplo: Call Colorear (COLOR_ROJO, Range("A1:A4"), Range("B3"),
COLOR_AZUL, Range("C2"))
'2009-IV-1 <fco@proinf.net>
Dim indiceColor As Integer
Dim rango As Range
Dim elemento As Variant
For Each elemento In params
If IsObject(elemento) Then
Set rango = elemento
If indiceColor <> 0 Then
rango.Interior.ColorIndex = indiceColor
If indiceColor = COLOR_NEGRO Or indiceColor = COLOR_PLOMO
Then
rango.Font.ColorIndex = COLOR_BLANCO
End If
End If
ElseIf IsNumeric(elemento) Then
indiceColor = elemento
End If
Next
End Function
Public Function CebrarFilas( _
rango As Range, _
Optional ByVal indiceColorPar = COLOR_BLANCO _
) As Boolean
'Colorea las filas pares del rango indicado.
'2009-IV-3
Dim fila As Range
Dim indiceFila As Integer, numFilas As Integer
Dim esPar As Boolean
numFilas = rango.Rows.Count
Set fila = rango.Resize(1)
For indiceFila = 1 To numFilas
If esPar Then
fila.Interior.ColorIndex = indiceColorPar
End If
esPar = Not esPar
Set fila = fila.Offset(1)
Next
End Function
Public Function Cuadricular( _
rango As Range _
) As Boolean
'Bordea las celdas del rango indicado
'2009-IV-5
With rango.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = COLOR_PLOMO
End With
End Function
Public Function ColorearColumnas( _
rango As Range, _
numElementos As Integer, _
indicesColor As Variant _
) As Boolean
'Colorea de N en N columnas con la lista de colores indicados.
'2009-IV-5
Dim columna As Range
Dim indiceColumna As Integer, numColumnas As Integer
Dim indiceElemento As Integer
Dim indiceColor As Integer, numColores As Integer
numColumnas = rango.Columns.Count
numColores = 1 ' UBound(indicesColor) + 1 '2010-VI-3
Set columna = rango.Resize(, 1)
For indiceColumna = 1 To numColumnas
With columna.Interior
.ColorIndex = indicesColor(indiceColor)
End With
indiceElemento = indiceElemento + 1
If indiceElemento >= numElementos Then
indiceElemento = 0
End If
indiceColor = indiceColor + 1 'indiceElemento '2010-VI-3
If indiceColor >= numColores Then
indiceColor = 0
End If
Set columna = columna.Offset(, 1)
Next
End Function
Public Function ColorearTresGrupos( _
inicioRango As Range, _
numColumnas1 As Integer, _
numColumnas2 As Integer, _
numColumnas3 As Integer _
)
'Colorea cebrando las filas de tres grupos de columnas consecutivos
'2009-III-25 <fco@proinf.net>
'2010-VI-3 - Nuevos colores
Call CrearTablaCartesiana( _
Worksheets("ejemplo2").Range("B2"), _
Worksheets("ejemplo2").Range("K2"), _
2, 2, 4, _
opcionFijar:=False, _
opcionAjustar:=False)
End Sub
Public Sub MacroEjemplo3_1()
Worksheets("destino").Range("A:IV").EntireColumn.Delete
Call CrearTablaCartesiana( _
Worksheets("origen").Range("B2"), _
Worksheets("destino").Range("B2"), _
1, 3, 4)
End Sub
Public Sub MacroEjemplo3_2()
Worksheets("destino").Range("A:IV").EntireColumn.Delete
Call CrearTablaCartesiana( _
Worksheets("origen").Range("B2"), _
Worksheets("destino").Range("B2"), _
2, 2, 4)
End Sub
Public Sub MacroVerCodigoFuente()
SendKeys "%{F11}"
End Sub
'Mdulo Hojas
'2009-V-7 versin 1.0 <fco@proinf.net>
'2009-V-12
'-----------------------------------------------' CONSTANTES
'-----------------------------------------------Public Const NUM_FILS_HOJA_CALCULO = 65536
Public Const NUM_COLS_HOJA_CALCULO = 256
'-----------------------------------------------' FUNCIONES PRINCIPALES
'-----------------------------------------------Public Function NuevoNombreHoja(Optional ByVal nombre As String = "") As
String
'Obtiene un nombre de hoja vlido que no est duplicado.
'No crea la hoja slo da el posible nombre que podra tener.
'2009-V-7
Dim nuevoNombre As String
Dim contador As Integer
nombre = NormalizarNombreHoja(nombre)
If nombre = "" Then
nombre = "hoja"
End If
nuevoNombre = nombre
contador = 1
Do Until Not ExisteNombreHoja(nuevoNombre)
contador = contador + 1
nuevoNombre = nombre & contador
Loop
NuevoNombreHoja = nuevoNombre
End Function
Public Function BorrarDatosHoja(ByVal nombre As String) As Boolean
'2009-V-7
Worksheets(nombre).Range("A:IV").EntireColumn.Delete
End Function
Public Function BorrarHojas(ByVal patron As String) As Boolean
'Borra todas las hojas cuyo nombre casen con el patrn indicado
'Ejemplo: BorrarHojas("grafico*") borra todas las hojas que se llamen
grafico
'2009-V-7
Dim lista As Variant
Dim nombre As Variant
lista = ListaHojas(patron)
Application.DisplayAlerts = False