Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

lunes, 22 de octubre de 2018

Macro para crear saltos de pagina en celdas en Excel

Hola. Veamos hoy una macro enviada por un colaborador.

Crearemos una User Defined Function, o una función definida por el usuario, utilizando el código VBA. Ésta realizará una operación tal cual:

- en una celda tenemos un texto mayor de 24 carácteres (podrías poner el número deseado), incluyendo los espacios. Por ejemplo, Nombres de proveedores o clientes, cómo por ejemplo: Esperanza Castellana Martorell.

De tal manera que al utilizar la función el resultado sería:

Esperanza Castellana
Martorell

Esto puede ser muy útil dependiendo del ejercicio que quieras desarrollar.



Veamos cómo crear esa macro.




Bueno, pues la macro en sí será así:

Crear una Función, asi que utilizaremos el método Function.

Option Explicit

Function Designaciones_reducidas(designacion As String) As String

'Las designaciones de PROVEEDORES y/o CLIENTES se pueden
'editar para que sean de un ancho maximo de 24 caracteres
'intercaladas con chr(10), salto de linea dentro de la misma celda:
'la función funcionará cuando se proporcione el argumento designacion

Dim D As Variant, largo As Integer, cadena As String, j As Integer

     D = Split(Replace(WorksheetFunction.Trim(designacion), Chr(10), " "))
     
     For j = 0 To UBound(D)
       largo = largo + Len(D(j)) + 1

       If largo < 25 Then
         cadena = cadena & " " & D(j)

       Else
         cadena = cadena & Chr(10) & D(j)
         largo = Len(D(j))
       End If

     Next

     Designaciones_reducidas = Trim(cadena)
End Function

Dejame explicar un poco cómo está construida.

La variable D se crea a partir de una combinación de funciones. En primer lugar (de dentro a fuera), tenemos la función WorksheetFunction.Trim(designacion), es decir, la función ESPACIOS en Excel (Quita todos los espacios de una cadena de texto excepto los espacios individuales entre palabras.)

Enlace relacionado: las funciones de texto en Excel

Seguimos con la función Replace.

La función Replace devuelve una cadena en la que la subcadena especificada se reemplaza  por otra subcadena.

Su sintaxis es:

Replace ( string1, find, replacement, [start, [count, [compare]]] )

Donde:

  • string1 es la cadena  que se desea modificar
  • find es la subcadena que se buscara en la string1, y que será remplazada por otro contenido.
  • replacement el nuevo contenido que remplazará a find en la string1.
  • start es opcional.  Esta es la posición de string1 para comenzar la búsqueda. Si se omite este parámetro, la función REPLACE comenzará la búsqueda en la posición 1.
  • count es opcional.  Este es el número de ocurrencias de reemplazar. Si se omite este parámetro, la función REPLACE reemplazará todas las ocurrencias de encontrar con replacement
  • compare es opcional. Puede ser cualquiera de lo siguieentes valores
  1. vbBinaryCompare : Comparación Binaria
  2. vbTextCompare : Comparación Textual
  3. vbDatabaseCompare : Realiza una comparación basada en la información de sus database
Ejemplo: Replace(“Excel”,”el”,”al”) te devolverá “Excal”

Asi que en nuestro caso, Replace buscará el Char(10) (caracter 10 en ASCII - el salto de linea) y si lo encuentra lo reemplazara con un espacio.

Por último tenemos la función SPLIT en VBA.

La función Split, como su nombre dice en inglés, consiste en separar/dividir un conjunto de datos (texto, números o ambos).  Su forma está compuesta por:

Split(“cadena sobre la que se efectúa la división”, “signo separador”, “el número máximo de subdivisiones de la cadena” (opcional), “tipo de comparación para analizar la cadena” (opcional))

Las dos primeras son obligatorias, pero si no se colocará el signo separadorse interpretaría como un espacio en blanco. Del mismo modo, el número máximo de subdivisiones de la cadena será por defecto -1.

Es decir, que en nuestro ejemplo, Split("Esperanza Castellana Martorell") dará como resultado un argumento con 3 elementos, {"Esperanza", "Castellana", "Martorell")

Por lo que el UBound (límite superior) de D en nuestro ejemplo será 2, (D(0), D(1), D(2), siendo D(0)= "Esperanza").

Entonces el bucle For...next irá con el primer elemento de D, es decir D(0).

Calculará el largo y si es menor de 25 caracteres, insertará un espacio.entre argumentos pero si es superior a 24 insertará un salto de línea.


 For j = 0 To UBound(D) (de 0 a 2 en nuestro caso)

       largo = largo + Len(D(j)) + 1  
(calculamos el largo (LEN!), la variable largo al inicializar es 0 y sumamos 1)

       If largo < 25 Then

         cadena = cadena & " " & D(j)
(si el largo es menor de 25, entonces introducimos un espacio entre medias de los argumentos, como cadena es blanco al inicializar, para j=0 esto daría " Esperanza", y para j=1 " Esperanza Castellana"

       Else

         cadena = cadena & Chr(10) & D(j)

(Si supero los 24 caracteres, entonces se insertaría el salto de línea, en nuestro ejemplo, sólo pasaría para j=2)

         largo = Len(D(j))

       End If

     Next

     Designaciones_reducidas = Trim(cadena)

(Al finalizar eliminará el espacio introducido al principio mediante Trim)

Bueno pues la función ya esta definida.

Veamos ahora cómo usarla.



1. Ve al menú Fórmulas
2. Insertar Función
3. Selecciona "Definida por el usuario"
4. Selecciona la que hemos creado
5. Haz clic en Aceptar

Una vez ahí, pues selecciona la celda a evaluar.

Y evalúa el resultado.

Tambien se puede escribir directamente, como por ejemplo,

=Designaciones_reducidas("Jose Manuel Peras Del Olmo")

obteniendo el mismo resultado.


Bueno, pues ya está, espero no haber liarlos con esto, y espero que a alguien le pueda ser útil,

Macro proporcionada por:

************************************************************************
Fernando Castaño


************************************************************************


Quieres más trucos?






Te ha gustado el artículo?

No te olvides de mostrar tu gratitud hacia el autor (yo) mediante una de las 2 siguientes acciones:

1. Puedes dejar una donación pinchando en la siguiente imagen.

PayPal. La forma rápida y segura de pagar en Internet


2. Puedes recomendar el artículo en Google haciendo clic en g+1 (justo después del artículo), también puedes compartirlo en Facebook, y/o dejar comentarios.

Quieres aprender más en Excel o tienes algún problema que necesita solución?

Puedo ofrecer servicios de consultoría así como cursos personalizados online. Mírate el siguiente enlace si estás interesado/a.



El Sabio de Excel busca colaborades del blog

Si te interesa compartir tu conocimiento sobre Excel de tal manera que puedas ayudar a otras personas, por favor mándame un email a elsabiodeexcel@gmail.com


Subscríbete y recibe todos las entradas por email


Para ello regístrate suministrando tu email en el sitio "Recibe los trucos en tu email" del menú de la derecha.

O sígueme por las redes sociales


No hay comentarios:

Publicar un comentario