buscar en columna celda con mayor nro. de caracteres en columna

08/07/2007 - 02:12 por Ivan | Informe spam
hola a todos,

¿sabeis si existe alguna forma de buscar de una forma 'muy' rapida la celda con mayor nº de caracteres de una columna?

se trataria de algo que no ralentice apenas el proceso (tipo Application.Countif), sin bucles y, a ser posible sin
filtros, pues iria integrado en un procedimiento que ya de por si abusa un poco de estos.

aunque no se si sabre dejarlo claro, voy a tratar de explicar el motivo::

se trata de ajustar el ListWidth y el ColumnWidths de un combobox de x columnas que extrae su contenido de una/s
columna/s. Actualmente utilizo algo parecido a esto (las cantidades en nº son para dar un margen sobrante a las columnas
y por si 'apareciera' la barra de desplazamiento vertical)

with worksheets("Tal")
.columns.autofit
Combo_Destino.ListWidth = .[a1].Width + .[a2].Width + 60
Combo_Destino.ColumnWidths = .[a1].Width + 20 & ";" & .[a2].Width + 20
end with

con esto, si el tamaño del texto (y posiblemete la fuente) es igual en la lista que en el combo, +/- funciona bien.

el problema es cuando estos no coinciden, y sobre todo si puede darse la combinacion de varios tamaños de fuente en una
misma columna, pues, como se trataria de trabajar con listas ajenas al archivo, no es cuestion de ir alterando los
formatos que el usuario pudiera estar aplicando en sus archivos, ni de exponerse a tamaños de fuente 'incongruentes' en
el combo

aunque el trabajo se realiza sobre una copia, como el resultado se devolveria al original, lo ideal seria no alterar los
formatos que pudieran existir

asi puestos lo que se me ha ocurrido, a falta de cualquier otra idea que seria bien recibida, es buscar la celda con
mayor nº de caracteres, 'capturar' la fuente y el tamaño de esta en sendas variables, cambiarlos en esa celda por los
del combo, ajustar columna, tomar el ancho, y reponer todo a su estado original

como digo seria hacer la busqueda con algo tipo funcion de hoja (con bucles, pej. no creo que fuera complicado, pero no
es lo que me interesaria) que apenas suponga una demora (mas) para todo el proceso.

tampoco se trata de nada vital, como veis, pero si existe alguna forma os lo agradecere una vez mas

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Ivan
08/07/2007 - 02:28 | Informe spam
FE de erratas:

donde puse

with worksheets("Tal")
.columns.autofit
Combo_Destino.ListWidth = .[a1].Width + .[a2].Width + 60
Combo_Destino.ColumnWidths = .[a1].Width + 20 & ";" & .[a2].Width
+ 20
end with

queria poner

with worksheets("Tal")
.columns.autofit
Combo_Destino.ListWidth = .[a1].Width + .[b1].Width + 60
Combo_Destino.ColumnWidths = .[a1].Width + 20 & ";" & .[b1].Width
+ 20
end with

posiblemente se suponia, pero por si acaso

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Héctor Miguel
08/07/2007 - 05:12 | Informe spam
hola, Ivan !

... alguna forma de buscar de una forma 'muy' rapida la celda con mayor no. de caracteres de una columna?
... algo que no ralentice apenas el proceso (tipo Application.Countif), sin bucles y, a ser posible sin filtros
... iria integrado en un procedimiento que ya de por si abusa un poco de estos [...]
se trata de ajustar el ListWidth y el ColumnWidths de un combobox de x columnas [...]
el problema es cuando... puede darse la combinacion de varios tama#os de fuente en una misma columna [...]
... lo que se me ha ocurrido... es buscar la celda con mayor no. de caracteres
'capturar' la fuente y el tama#o de esta en sendas variables, cambiarlos en esa celda por los del combo
ajustar columna, tomar el ancho, y reponer todo a su estado original
... seria hacer la busqueda con algo tipo funcion de hoja... que apenas suponga una demora (mas) para todo el proceso...



1) [creo que] no seria *sano* poner al codigo a buscar la celda con mayor numero de caracteres en TODA una columna :-((
2) si puedes proporcionar un rango *especifico*, puedes usar formulas *matriciales* [tomando en cuenta que]...
3) por codigos vba, es necesario usar la funcion *evaluate* y es +/- rapidin obtener sus resultados [sobre todo *eventualmente*]

[p.e.] si suponemos que el rango de X_columna fuera: A3:A15
prueba usando las siguientes instrucciones desde la ventana de inmediato [en vba]

a) saber cuales es el mayor numero de caracteres en ese rango:
? evaluate("max(len(a3:a15))")

b) conocer la posicion de la celda [dentro de ese rango] con el mayor numero de caracteres:
? evaluate("match(max(len(a3:a15)),len(a3:a15),0)")

c) *convertir* la propuesta usando la ventana de inmediato a codigos dentro de un procedimiento vba ???

si cualquier duda... [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Ivan
08/07/2007 - 20:06 | Informe spam
hola Hector Miguel, muchas gracias una vez mas.

1) [creo que] no seria *sano* poner al codigo a buscar la celda con mayor numero de caracteres en TODA una >columna :-((
2) si puedes proporcionar un rango *especifico*,





=> gracias por el 'aviso', creo que no tendre problema en restringir
el rango


3) por codigos vba, es necesario usar la funcion *evaluate* y es +/- rapidin obtener sus resultados [sobre todo >*eventualmente*]



> ? evaluate("match(max(len(a3:a15)),len(a3:a15),0)")



=> a falta de probarlo, creo que es +/- a lo que me referia/lo que
necesito


c) *convertir* la propuesta usando la ventana de inmediato a codigos dentro de un procedimiento vba ???





=> alla voy. Y, si me surgen dudas/complicaciones te comento.

bueno, una vez mas gracias mil.

un saludo y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida