Crear función cursiva(texto) en excel

Quería saber si es posible crear una función en excel, similar a las existentes MAYUSC() y MINUSC(), que permita modificar el formato de una parte del texto de una celda. La celda en cuestión no es un texto escrito, del que se puede seleccionar una parte y modificar su formato, sino una fórmula concatenada. Ejemplo:
Celda A1: Texto en
Celda A2: cursiva
Celda A3: =A1 & " " & Cursiva(cursiva)
La función en plan cutre sería más o menos así:
Public Function Cursiva(texto)
Cursiva = texto.Font.FontStyle = "Cursiva"
End Function
Obviamente, así no funciona y por eso estoy aquí.
Muchísimas gracias a quien me pueda ayudar, ya que llevo semanas probando cosas y no he conseguido nada.
Respuesta
1
Las funciones de usuario no pueden modificar el entorno de Excel, y en concreto no pueden cambiar el estilo de un trozo de texto de una celda.
Lo que necesitas se podría hacer usando el evento Worksheet_Change de la hoja (click derecho sobre su solapa -> Ver código), usando algo como:
Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveSheet
        If Not Application.Intersect(Target, .[A1:B1]) Is Nothing Then
            .[C1].Value = .[A1].Value & " " & .[B1]
            .[C1].Characters(Len(.[A1]) + 2).Font.FontStyle = "cursiva"
        End If
    End With
End Sub
Muchas gracias por tu respuesta, la verdad es que has llegado mucho más lejos de lo que yo había conseguido en semanas probando cosas. Si me permites, te haré otra pregunta relacionada con lo mismo. Te pongo este ejemplo:
A1 = area
A2 = 4
A3 = m2
A4 = A1 & " " & A2  & " " & A3
Si quiero que me quede "bonito", con el cuadrado como superíndice, según tu respuesta anterior, debería repartir la casilla A3 en dos, la B3 con la "m" y la C3 con el "2", de manera que podría aplicarle el superscript a la celda C3, de manera que la concatenación sería:
A4 = A1 & " " & A2 & " " & B3 & C3
Como ves, si tal y como pregunté esta mañana, existiese la función (en este caso) Superindice(texto), esto lo podría hacer muy fácil. ¿Crees qué hay otra manera de hacerlo?
El objetivo final de esta pregunta es que hago a menudo hojas de cálculo, que pretendo que tengan un aspecto presentable para imprimir como, digamos, informe o memoria, sin tener que hacer (prácticamente) nada más. Como ves, sólo me faltan las mariconaditas (que si subíndicies, superíndices, letras griegas, negritas...) que le darían más empaque.
Lo dicho, muchas gracias por tu rápida respuesta y saludos.
Insisto en que las funciones de usuario NO PUEDEN modificar el entorno de Excel, y que esto incluye, entre otras muchas cosas, la fuente, su tamaño, su color, si es negrita, tachada, subíndice, superíndice... Esto es una característica de diseño de Excel y no hay nada que se pueda hacer al respecto.
Pero usando procedimientos sub VBA sí es posible. Por ejemplo, para que ne la celda A4 se concatenen las celdas A1:A3 y se muestre el 2 de "m2" como superíndice el código para el evento change de la hoja sería:
Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveSheet
        If Not Application.Intersect(Target, .[A1:A3]) Is Nothing Then
            .[A4].Value = .[A1].Value & " " & .[A2].Value & " " & .[A3].Value
            .[A4].Characters(InStr(.[A4].Value, "m2") + 1).Font.Superscript = True
        End If
    End With
End Sub
Muchísimas gracias por tu ayuda y por tu tiempo. Me ha sido de gran ayuda, seguiré trabajando las hojas de cálculo con las indicaciones que me has dado.
Saludos.

1 respuesta más de otro experto

Respuesta

No es muy elegante, pero necesitaba poner en cursivas algunas palabras en una lista larga como la que sigue

4. Mama Mechona (telenovela)
5. Secretos En El Jardín (telenovela)
6. Soltera Otra Vez 2 (telenovela)
7. Valió La Pena (telenovela)

En las columnas 6 y 7 puse
=HALLAR(".",E7,1)+2   y
=HALLAR("(",E7,1)-F7+1
para ubicar las posiciones del . y (

Y finalmente escribí esta macro para recorrer la lista.

Sub CURSIVAS()

For i = 4 To 150
Inicio = Cells(i, 6).Value
Largo = Cells(i, 7).Value

Cells(i, 5).Select
With ActiveCell.Characters(Start:=Inicio, Length:=Largo).Font
.FontStyle = "Cursiva"
End With
Next

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas