............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

No funciona como debería el rellenar de excel

Ver el tema anterior Ver el tema siguiente Ir abajo

No funciona como debería el rellenar de excel

Mensaje por cesar homobono el Mar Sep 06, 2011 10:46 pm

Buenas noches a todos en el foro
He observado que en excel si desean rellenar, éste se limita a 256 caracteres y el resto se lo come
¿Alguien conoce algún truco o macro que haga lo mismo, pero sin comerse el texto?
Son muchas filas y el trabajo es muy tedioso

Gracias por la atención
Saludos

cesar homobono

Masculino Cantidad de envíos : 3
Edad : 52
Ciudad - Pais : Mexico
Version de Excel : 2007
Fecha de inscripción : 06/09/2011

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por moises melgar el Miér Sep 07, 2011 12:18 pm

HOla no comprendo bien tu caso
Favor de mencionar u ejemplo que podamos repetir en Excel, ya que por el momento no he visto este dichoso limitante de relleno
Subeme un ejemplo para que el foro pueda ver lo que sucede y apartir de esto cualquiera con alguna idea o que ya le aya ocurrido y sepa que hacer podra ayudarte
Gracias
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por GalileoGali el Miér Sep 07, 2011 1:45 pm

supongo que te refieres a Rellenar >> Justificar un texto.

Es un buen desafío, vamos a ver que aportamos entre todods. Lo primero que se me ocurre es acudir a alguna API, pero todavia no se me viene cual.

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por cesar homobono el Jue Sep 08, 2011 12:04 am

Buscando en internet encontré estos dos codigos:

Function contarpalabras(celda As Range)
'si ponemos un espacio antes de los signos de
'puntuación, mejor los eliminamos del cómputo
datos = Replace(celda, ".", "")
datos = Replace(datos, ",", "")
datos = Replace(datos, ";", "")
datos = Replace(datos, ":", "")
'reemplazamos los posibles dobles espacios
datos = Replace(datos, " ", " ")
'eliminamos los espacios inicial y final
datos = Trim(datos)
'Descomponemos la cadena, en subcadenas,
'para lo cual indicamos el delimitador " ", aunque
'por defecto, podríamos haberlo omitido,
'pues es ese mismo (espacio)
palabras = Split(datos, " ")
'Buscamos el máximo de palabras que se han
'formado, y le sumamos 1, porque el array
'comienza a contar desde cero
numero_de_palabras = UBound(palabras) + 1
'asignamos ese máximo a la función
contarpalabras = numero_de_palabras
End Function

Function contarsinespacios(celda As Range)
'Reemplazamos los espacios vacíos por nada,
'es decir, los eliminamos, pero solo a efectos
'del cálculo del nº de caracteres.
mi_texto = Replace(celda, " ", "")
'Contamos los caracteres que hay, ahora que tenemos el
'texto en la variable mi_texto, el texto sin espacios vacíos
cantidad_de_texto = Len(mi_texto)
'ponemos el número de caracteres en la celda
'donde tenemos esta función (la fómula)
contarsinespacios = cantidad_de_texto
End Function

y utilizando la fórmula =LARGO()

se puede conocer cuantos espacios hay

Sabemos que con extraer o con izquierda se obtiene un texto desde el inicio
la funcion hallar también sirve de apoyo

solo sería agregar una condicional de tal manera que:

1.- largo no sea mayor a 150
2.- en hallar el texto es un espacio, en Num inicial debe ser igual a largo para que si marca error quiere decir que no hay espacio
talvez se requeriria de un contador, un Bucle o funcion anidada
Al parecer no habria problema para separar la primer cadena de texto para saber cuantos renglones se deben insertar igualmente con un bucle se puede.
Para mi el problema es agregar las demas cadenas (renglones) donde estaría el texto,digamos que seria algo como "donde termino el renglon anterior, una celda siguiente (Setoff) empieza de nuevo"

Perdonen mi falta de tacto al escribir es que entiendo algunas fórmulas y algo de macros,pero definitivamente no estoy a su nivel de conocimientos por éso expongo por donde le creo ver el modo.

Si alguien conoce algo más que aportar, por mi parte Bienvenido

¿Puedo seguir anotando mis avances u observaciones Sr. GalilleoGali?

Ya estoy empezando a hablar de macros y puse mi consulta en formatos
además gracias a todo aquel que me regaló algo de su tiempo al leer el presente, espero encontrar ayuda.

Saludos a todos

cesar homobono

Masculino Cantidad de envíos : 3
Edad : 52
Ciudad - Pais : Mexico
Version de Excel : 2007
Fecha de inscripción : 06/09/2011

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por GalileoGali el Jue Sep 08, 2011 7:36 am

Me parece muy interesante el que hayas rastreado y expuesto esta alternativa, ya veremos, porque hace falta tiempo, que en estos momentos no tengo, pero aca concurren mis mejores amigos excelianos y ya van a mostrar la hilacha.

además de alguna API, estaba pensando en VisibleRange.
César, si bien es muy honesto de tu parte declarar que el material lo encontraste, es aún más "académico" (???¿¡¡¡) insertar la cita o link.


Última edición por GalileoGali el Sáb Sep 10, 2011 6:11 pm, editado 1 vez

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por moises melgar el Vie Sep 09, 2011 12:29 pm

Claro por favor continua.
Aca en el foro conocemos la forma de Extraer las palabras de un texto pero con el Problema de Extraer palabra por palabra, podriamos adaptar esta formula para que cumpla con el proposito deseado
Adjunto el Archivo con dicha formula
Archivos
Separar palabras con formulas.xlsx No tienes los permisos para descargar los archivos.(32 KB) Descargado 6 veces
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por GalileoGali el Sáb Sep 10, 2011 8:06 pm

Hay varios factores a tener en cuenta:
los caracteres no ocupan en mismo ancho: por ejemplo una "l" minúscula ocupa menos espacio que una "A" mayuscula
La misma "A" definida con negrita ocupa mas espacio (siempre hablamos del ancho) que la misma "A" "Normal",
La letra cursiva ocupa en general más espacio que el misma font en tipografía Normal
El size de una Font no mantiene regularidad parametrizable con respecto a otros Tipo de Font.

El ancho de las celdas de una seleccion esta dado por points.

Una AutoFill.Justify, debería acomodar el margen derecho al borde: utilizando recursos automaticos en Word como son la sobreespacializacion entre palabras, para compensar, el corte silábico, nada fácil por cierto....

Sin embargo hurgando en la red encontre una Function, que puede servir para la primera parte del problema es decir, para cortar trozos de la string con el length más aproximado posible , sin tener en cuenta las características más Word, donde habria mucha tela por cortar.

Código:
' shg 25 Feb 2008
 
Dim mafChrWid(32 To 127) As Double ' widths of printing characters
Dim msFontName  As String ' font name having these widths
 
Function StrWidth(s As String, sFontName As String, fFontSize As Double) As Double
    ' Returns the approximate width in points of a text string
    ' in a specified font name and font size
   
    ' Does not account for kerning
   
    Dim i      As Long
    Dim j      As Long
   
    If Len(sFontName) = 0 Then Exit Function
    If sFontName <> msFontName Then
        If Not InitChrWidths(sFontName) Then Exit Function
    End If
   
    For i = 1 To Len(s)
        j = Asc(Mid(s, i, 1))
        If j >= 32 Then
            StrWidth = StrWidth + fFontSize * mafChrWid(j)
        End If
    Next i
End Function
 
Function InitChrWidths(sFontName As String) As Boolean
    Dim i      As Long
   
    Select Case sFontName
    Case "Arial"
        For i = 32 To 127
            Select Case i
            Case 39, 106, 108
                mafChrWid(i) = 0.1902
            Case 105, 116
                mafChrWid(i) = 0.2526
            Case 32, 33, 44, 46, 47, 58, 59, 73, 91 To 93, 102, 124
                mafChrWid(i) = 0.3144
            Case 34, 40, 41, 45, 96, 114, 123, 125
                mafChrWid(i) = 0.3768
            Case 42, 94, 118, 120
                mafChrWid(i) = 0.4392
            Case 107, 115, 122
                mafChrWid(i) = 0.501
            Case 35, 36, 48 To 57, 63, 74, 76, 84, 90, 95, 97 To 101, 103, 104, 110 To 113, 117, 121
                mafChrWid(i) = 0.5634
            Case 43, 60 To 62, 70, 126
                mafChrWid(i) = 0.6252
            Case 38, 65, 66, 69, 72, 75, 78, 80, 82, 83, 85, 86, 88, 89, 119
                mafChrWid(i) = 0.6876
            Case 67, 68, 71, 79, 81
                mafChrWid(i) = 0.7494
            Case 77, 109, 127
                mafChrWid(i) = 0.8118
            Case 37
                mafChrWid(i) = 0.936
            Case 64, 87
                mafChrWid(i) = 1.0602
            End Select
        Next i
       
    Case "Consolas"
        For i = 32 To 127
            Select Case i
            Case 32 To 127
                mafChrWid(i) = 0.5634
            End Select
        Next i
       
    Case "Calibri"
        For i = 32 To 127
            Select Case i
            Case 32, 39, 44, 46, 73, 105, 106, 108
                mafChrWid(i) = 0.2526
            Case 40, 41, 45, 58, 59, 74, 91, 93, 96, 102, 123, 125
                mafChrWid(i) = 0.3144
            Case 33, 114, 116
                mafChrWid(i) = 0.3768
            Case 34, 47, 76, 92, 99, 115, 120, 122
                mafChrWid(i) = 0.4392
            Case 35, 42, 43, 60 To 63, 69, 70, 83, 84, 89, 90, 94, 95, 97, 101, 103, 107, 118, 121, 124, 126
                mafChrWid(i) = 0.501
            Case 36, 48 To 57, 66, 67, 75, 80, 82, 88, 98, 100, 104, 110 To 113, 117, 127
                mafChrWid(i) = 0.5634
            Case 65, 68, 86
                mafChrWid(i) = 0.6252
            Case 71, 72, 78, 79, 81, 85
                mafChrWid(i) = 0.6876
            Case 37, 38, 119
                mafChrWid(i) = 0.7494
            Case 109
                mafChrWid(i) = 0.8742
            Case 64, 77, 87
                mafChrWid(i) = 0.936
            End Select
        Next i
       
    Case "Tahoma"
        For i = 32 To 127
            Select Case i
            Case 39, 105, 108
                mafChrWid(i) = 0.2526
            Case 32, 44, 46, 102, 106
                mafChrWid(i) = 0.3144
            Case 33, 45, 58, 59, 73, 114, 116
                mafChrWid(i) = 0.3768
            Case 34, 40, 41, 47, 74, 91 To 93, 124
                mafChrWid(i) = 0.4392
            Case 63, 76, 99, 107, 115, 118, 120 To 123, 125
                mafChrWid(i) = 0.501
            Case 36, 42, 48 To 57, 70, 80, 83, 95 To 98, 100, 101, 103, 104, 110 To 113, 117
                mafChrWid(i) = 0.5634
            Case 66, 67, 69, 75, 84, 86, 88, 89, 90
                mafChrWid(i) = 0.6252
            Case 38, 65, 71, 72, 78, 82, 85
                mafChrWid(i) = 0.6876
            Case 35, 43, 60 To 62, 68, 79, 81, 94, 126
                mafChrWid(i) = 0.7494
            Case 77, 119
                mafChrWid(i) = 0.8118
            Case 109
                mafChrWid(i) = 0.8742
            Case 64, 87
                mafChrWid(i) = 0.936
            Case 37, 127
                mafChrWid(i) = 1.0602
            End Select
        Next i
       
    Case "Lucida Console"
        For i = 32 To 127
            Select Case i
            Case 32 To 127
                mafChrWid(i) = 0.6252
            End Select
        Next i
       
    Case "Times New Roman"
        For i = 32 To 127
            Select Case i
            Case 39, 124
                mafChrWid(i) = 0.1902
            Case 32, 44, 46, 59
                mafChrWid(i) = 0.2526
            Case 33, 34, 47, 58, 73, 91 To 93, 105, 106, 108, 116
                mafChrWid(i) = 0.3144
            Case 40, 41, 45, 96, 102, 114
                mafChrWid(i) = 0.3768
            Case 63, 74, 97, 115, 118, 122
                mafChrWid(i) = 0.4392
            Case 94, 98 To 101, 103, 104, 107, 110, 112, 113, 117, 120, 121, 123, 125
                mafChrWid(i) = 0.501
            Case 35, 36, 42, 48 To 57, 70, 83, 84, 95, 111, 126
                mafChrWid(i) = 0.5634
            Case 43, 60 To 62, 69, 76, 80, 90
                mafChrWid(i) = 0.6252
            Case 65 To 67, 82, 86, 89, 119
                mafChrWid(i) = 0.6876
            Case 68, 71, 72, 75, 78, 79, 81, 85, 88
                mafChrWid(i) = 0.7494
            Case 38, 109, 127
                mafChrWid(i) = 0.8118
            Case 37
                mafChrWid(i) = 0.8742
            Case 64, 77
                mafChrWid(i) = 0.936
            Case 87
                mafChrWid(i) = 0.9984
            End Select
        Next i
       
    Case Else
        MsgBox "Font name """ & sFontName & """ not available!", vbCritical, "StrWidth"
        Exit Function
    End Select
    msFontName = sFontName
    InitChrWidths = True
End Function


No tiene desperdicio leer los threads completos donde se afirma que sí hay solucion precisa en Java pero no en VBA

Resta entonces hacer el resto de la macro para producir el efecto Rellenar Justificar Texto, al ancho de cualquier selecccion medido en points

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por cesar homobono el Mar Sep 13, 2011 10:11 pm

Perdon por no contestar a tiempo, muchas gracias por el código y el archivo, en un momento empiezo a buscarle y comentaré los resultados
Saludos a todos en el foro.

cesar homobono

Masculino Cantidad de envíos : 3
Edad : 52
Ciudad - Pais : Mexico
Version de Excel : 2007
Fecha de inscripción : 06/09/2011

Volver arriba Ir abajo

Re: No funciona como debería el rellenar de excel

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.