Excel - Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

 
Vista:
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 05/02/2018 18:58:22
Buenas tardes,
Estoy realizando una Tabla de elementos químicos,
Yo tengo en una celda con esta función: =BUSCARV($A$1;Datos!A2:L106;11)
La columna 11 (como ejemplo) contiene:
[Xe] 4f14 5d10 6s2 6p4
Mi problema es cómo capturar esa celda en otra con un vba de tal manera que los números DESPUÉS del f, d, s, p se conviertan en superindices?? Pues los números ANTES de ellos NO tienen sentido.
En la tabla los valores que deben aparecen son:
s = desde 1 a 2
p = desde 1 a 6
d = desde 1 a 10
f = desde 1 a 14
Conozco programación básica de Pascal y C por ello intentaré entender el VBA (lenguaje que no conozco) que me sugieran por favor
Pensaba en un Algoritmo:
-Leer la cadena de la Celda y guardar sus posiciones
-luego buscarlas con un IF, si es "s" or "p" buscar en esa posición+1 ESNUMERO? si verdadero entonces (Macro) CONVERTIR a SUPERINDICE
-ELSE IF, si es "d" or "f" buscar en esa posición+1 y posición+2 ESNUMERO? si verdadero entonces (Macro) CONVERTIR a SUPERINDICE
Mi función cambiaría a: =BUSCARV($A$1;Datos!A2:L106;MACROSUPERINDICEdeMICOLUMNA)
Algo así como ejemplo.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por JuanC (1237 intervenciones) el 05/02/2018 20:12:05
fijate si te sirve... (demasiado por los 10' min que le dediqué!)

https://www.sendspace.com/file/hg5moe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 05/02/2018 22:01:05
Gracias por la respuesta,
En realidad buscaba una MACRO, ya que revisando tu ejemplo, está realizado a "mano"? es decir cada celda manualmente fue llevada los Nros de s, p, d, f ..... a superíndice?
Tengo 120 celdas cada una de ellas promedio debe contener al menos 5 números que deben llevarse a superíndice, lo que entiendo 600 veces debo cambiar manualmente cada superíndice?
Porque no se trata solo de copiar formato, verdad?
Además estoy trabajando con la función:
=BUSCARV($A$1;Datos!A2:L121;11) y en esa columna 11 están los 120 elementos justamente, si pudieran ayudarme con una macro que relacione a esa mi función, por favor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por JuanC (1237 intervenciones) el 05/02/2018 22:16:16
hay un error de concepto o no entendí nada! lo que hice fue una MACRO, no sé que entendés vos por macro?
sólo tenés que seleccionar el rango a convertir y ejecutar la macro...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 06/02/2018 10:30:20
Hola Juan,
Si, realmente no observé esa Macro, perdón, está ahí, y funciona para las celdas seleccionadas, trabaja perfectamente. Gracias.
Adjunto un Archivo incompleto aún, de lo que voy trabajando. Este documento XLS tiene 2 hojas: "Datos" e "Individual"
En el de "Datos" estoy llenado mi Base de datos, que si observas en mi columna 11 = "K" está "Configuración"
En el de "Individual" captura solo un Elemento Químico con los detalles de esa base de datos, explico mejor: en A1 tecleas del 1 al 105, y automáticamente trabaja la función =BUSCARV($A$1;Datos!A2:L121;11) en las diferentes Celdas para capturar los datos de la Hoja "Datos"
Mi problema reside en esta Hoja "Individual" en A16 que captura la columna 11, ahí es donde requiero que funcione tu Macro por favor, Podrías realizar una modificación?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Antoni Masana (2477 intervenciones) el 06/02/2018 10:43:32
Buenas David,

habe si esto te sirve.

Escribe un texto en la celda A1 y convierte a superindice los números que hay detrás de las letras.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Sub Macro1()
    Dim a As String
 
    Range("A1").Select: a = " ----+----1----+----2--"
    ActiveCell.FormulaR1C1 = "[Xe] 4f14 5d10 6s2 6p4"
 
    ' ---&--- Superindice del 14
 
    With ActiveCell.Characters(Start:=8, Length:=2).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 12
        .Strikethrough = False
        .Superscript = True
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
 
    ' ---&--- Superindice del 10
 
    With ActiveCell.Characters(Start:=13, Length:=2).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 12
        .Strikethrough = False
        .Superscript = True
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
 
    ' ---&--- Superindice del 2
 
    With ActiveCell.Characters(Start:=18, Length:=1).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 12
        .Strikethrough = False
        .Superscript = True
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
 
    ' ---&--- Superindice del 4
 
    With ActiveCell.Characters(Start:=22, Length:=1).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 12
        .Strikethrough = False
        .Superscript = True
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
 
    Range("A2").Select
End Sub

En excel hay un truco que funciona bastante bien y es GRABAR MACRO hacer una acción, en este caso lo que necesitas y mirar que hace Excel y adaptarlo a tu macro.

La variable A es es para poner un regleta y ver las posiciones.

Estas cuatro lineas definen los caracteres que deseamos convertir el formato. El Start indica la posición y Length el número de caracteres. y se puede reemplazar por variables.

1
2
3
4
With ActiveCell.Characters(Start:=8, Length:=2).Font
With ActiveCell.Characters(Start:=13, Length:=2).Font
With ActiveCell.Characters(Start:=18, Length:=1).Font
With ActiveCell.Characters(Start:=22, Length:=1).Font

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 06/02/2018 14:39:22
FUNCIONA !!!!
Agradecer al Foro y Juan C. y Antoni Masana, por haberse dado el tiempo para mi pregunta, les quedo muy agradecidos.
Juan C. muchas gracias por devolver el documento funcionando.
No me queda más que compenetrarme con el lenguaje de visual basic para entender a su cabalidad.
Saludos, será hasta en otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Andres Leonardo (1583 intervenciones) el 06/02/2018 18:14:06
Yo hice est ayer .. solo me quedaba la duda si cambia el valor de 1 a dos digitos ... el tema era que pasa si ...
por lo demas eesa es la respuesta.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 07/02/2018 10:24:40
Un par de consultas más por favor:
en la sección FONT del código que enviaste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
v = Array("f", "d", "s", "p")
    n = 0
    '=BUSCARV($A$1;Datos!A2:L106;11)
    s = Application.WorksheetFunction.VLookup(Range("A1").Value, Range("datos!A2:L106"), 11)
    For i = 1 To col.Count
        col.Remove 1
    Next
    For i = 0 To 100
        t = VBA.vbNullString
        t = VBA.Split(s, " ")(i)
        If VBA.Trim(t) = VBA.vbNullString Then Exit For
 
        For j = 0 To 3
            p = VBA.InStr(1, t, v(j))
            If p > 0 Then
               Set se = New clsSE
               se.ii = p + 1 + n
               se.ll = VBA.Len(t) - p
               col.Add se
               Exit For
            End If
        Next
        n = n + VBA.Len(t) + 1
    Next
 
    Range("A16").Value = s
    Set cell = Range("a16")
    For i = 1 To col.Count
        Set se = col.Item(i)
 
        With cell.Characters(Start:=se.ii, Length:=se.ll).Font
         .Name = "Calibri" 'CAMBIANDO A OTRA FUENTE NO FUNCIONA POR ALGUNA RAZÓN??
         .FontStyle = "Normal"
         .Size = 11
         .Strikethrough = False
         .Superscript = True
         .Subscript = False
         .OutlineFont = False
         .Shadow = False
         .Underline = xlUnderlineStyleNone
         .ThemeColor = xlThemeColorLight1
         .TintAndShade = 0
         .ThemeFont = xlThemeFontMinor
        End With
   Next
With Application
     .ScreenUpdating = True
     .Calculation = xlCalculationAutomatic
     .EnableEvents = True
End With
End Sub
En esta parte.......
1
2
With cell.Characters(Start:=se.ii, Length:=se.ll).Font
         .Name = "Calibri"
- Por alguna razón no obedece el cambio de fuente?

Otro
El programa funciona bien para todas las celdas de mi Base de Datos:
[Xe] 4f14 5d7 6s2
[Xe] 4f14 5d10 6s1
[Xe] 4f14 5d10 6s2 6p1 etc, etc, etc
- Pero al escribir sin espacios NO funciona, hay que cambiar código?
[Xe] 4f145d76s2
[Xe] 4f145d106s1
[Xe] 4f145d106s26p1 etc, etc, etc
Lo que pasa es que quería ver la manera de ahorrar ancho de celda (columna)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Antoni Masana (2477 intervenciones) el 07/02/2018 20:28:38
Si el texto esta con espacios se buscan los caracteres que hay detrás de la letra hasta el espacio menos este último.
Pueden haber uno, dos o más en principio es indiferente.
Si no hay espacios primera pregunta ¿Cuantas cifras puede haber antes de la letra ?
Pongo un ejemplo (independientemente de lo que signifique esta codificación):

1
2
3
[Xe] 4f14 5d7
[Xe] 4f1 45d7
[Xe[ 4f145d7

La macro podría resolver el primero y el segundo, para resolver el tercero hace falta una nueva regla porque no sabemos si corresponde a la primera o a la segunda.
Esta regla podría decir "Antes de la letra solo puede haber un dígito" con lo que el segundo estaría mal y resolvería el tercero.
Esta regla me la invento, pero hace falta definir el número de dígitos que pueden haber antes y después de la letra.
O Escribirla con espacios y la macro que los quite según va codificando. Un poquito más complicado pero se puede hacer.

Saludos.
\\//
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 08/02/2018 14:12:08
Gracias Antoni,
Aclaro:
Los valores (superíndices) que pueden tomar... s, p, d, f ... son:
s= del 0 al 2 (un dígito) (un carácter)
p= del 0 al 6 (un dígito) (un carácter)
d= del 0 al 10 (dos dígitos) (dos caracteres)
f= del 0 al 14 (dos dígitos) (dos caracteres)
ANTES de estos valores... s, p, d, f ... solo va un dígito (del 1 al 7)
En el caso de los corchetes:
[Ne] [Ar] [Kr] [Xe] [Rn] .... (no hay mas valores)
hay un espacio después del cierre de corchete:
[Xe] 4f145d106s26p4
pero no importaría (en el peor de los casos) si fuera sin espacios, así:
[Xe]4f145d106s26p4
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Andres Leonardo (1583 intervenciones) el 08/02/2018 15:27:30
pero siempre vienen todas las letrz s... lo que habria que hacer es recorrer toda la cadena o encotnrar las 4 posiciones de las letras y solo hacer superindice lo que trienes entre estas ... pues asi lo veo

que tal lo ves Antony

el tema esta eu si no tiene espacios ... hau que comenzar a evaluar .. de oitra manera puesto qeu sin especios podria tomar por error un valor

ejemplo

[Xe]4f145d106s26p4 cuando solo seria [Xe]4f145d106s26p4
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 08/02/2018 18:39:03
Andrés,
tienes razón, habría una confusión algorítmica.......
A ver y qué tal si lo dejamos con espacios, así como inicialmente estaba?
[Rn] 4f12 5d10 6s2 6p3
Pensaba en un Algoritmo:
- Leer la cadena de la Celda guardando sus posiciones
- y preguntar con un IF, si es "s" or "p" buscar en esa posición+1 ESNUMERO? si verdadero entonces guardar en una nueva cadena las posiciones del +1 "si es vacío" obviarlas.
- ELSE IF, si es "d" or "f" buscar en esa posición+1 y posición+2 ESNUMERO? si verdadero entonces guardar en la misma nueva cadena las posiciones del +1 y +2 "si es vacío" obviarlas.
En cada IF se saldría cuando "es espacio" o "es vacío"? y terminando el Array
Al final RELEER la nueva cadena unida y solo los caracteres guardado se llevaría a la Macro de Superíndice?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Antoni Masana (2477 intervenciones) el 09/02/2018 08:51:53
Esta es la Macro para todos los casos.

Actúa sobre las celda activa, espera encontrar un corchete cerrado y las letras s p d f.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Sub SuperIndice()
    Dim Texto As String, Corchete As Byte, Tipo As Byte, Siguiente As Byte, _
        Posic As Byte, Ini As Byte, a As Byte, _
        Longi As Byte, Fin As Byte
 
    Texto = ActiveCell.Value + " " : ActiveCell.FormulaR1C1 = Texto
 
    ' -- Busca si hay Corchete cerrado
 
    Corchete = InStr(Texto, "]"):If Corchete = 0 Then Exit Sub '- Sin Corchete
 
    For Ini = Corchete + 1 To Len(Texto)
        Tipo = InStr("spdf", LCase(Mid$(Texto, Ini, 1)))
 
        If Tipo > 0 Then
           Posic = Ini + 1
           For a = Ini + 2 To Len(Texto)
               Siguiente = InStr("spdf ", LCase(Mid$(Texto, a, 1))):
               If Siguiente > 0 Then Fin = a: Exit For
           Next
 
           If Siguiente = 5 Then      ' --- Es un espacio
              Longi = Fin - Posic
           Else                       ' --- Es una letra
              Longi = Fin - Posic - 1
           End If
 
           With ActiveCell.Characters(Start:=Posic, Length:=Longi).Font
               .Superscript = True
           End With
       End If
    Next
End Sub

Adjunto ejemplo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Antoni Masana (2477 intervenciones) el 09/02/2018 11:05:52
Para pasar la macro por todas las celdas se puede hacer otra macro que recorra las celdas y llame a esta y así no es tiene que tocar por aquello de si funciona no lo toques.

Otra cosa a hacer es poner en el codigo de la hoja

1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Activate
    Call SuperIndice
End Sub

Y así cuando entre en texto que cumpla las características determinadas podrá los Superíndices sin necesidad de hacer nada especial.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 10/02/2018 11:14:14
Excelente Antoni,
Tengo una duda:
1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Activate
    Call SuperIndice
End Sub
Donde coloco esa sección? Porque sin ella funciona igual el código de la primera Macro que escribiste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por Antoni Masana (2477 intervenciones) el 10/02/2018 15:12:11
Debes ir a: Macros - Modificar

En la parte superior derecha de la pantalla hay un recuadro en el que se ven todas las hojas en un esquema en forma de árbol.
Debes seleccionar la hoja donde pones los textos Hoja2 (Datos) y pegar el codigo.

Ver imagen adjunta.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David

Macro para Capturar el contenido de una Celda y Convertir a SuperIndice solo los caracteres deseados

Publicado por David (9 intervenciones) el 14/02/2018 17:36:34
Un favor Antoni:
Como mencioné tu Macro funciona perfectamente sin ese sector del código
1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Activate
    Call SuperIndice
End Sub

Probé lo que dijiste en un Libro nuevo de Excel, y dos cosas me ocurren:
1.- Sin ese trozo del código, funciona a la perfección en cualquier celda que me ubico, pero en la Celda que me interesa donde está mi función:
=BUSCARV($B$1;Datos!A2:N119;11) donde $B$1 es mi rango de búsqueda y 11 es la columna donde tengo los valores a convertir en Superíndices, evidentemente la Macro hace bien su trabajo, pero YA NO EXISTE FUNCIÓN es decir todo lo convierte a VALORES.
Me hubiera gustado (como ejemplo) que funcionará de esta manera:
=SuperIndice(BUSCARV($B$1;Datos!A2:N119;11))
o algo así:
=BUSCARV($B$1;Datos!A2:N119;SuperIndice(11))
2.- Colocando el código en la Hoja2 que mencionas (imagen), me lanza error de depuración la Macro, no entiendo el porqué.
1
Texto = ActiveCell.Value + " " : ActiveCell.FormulaR1C1 = Texto
Si revisas el primer ejemplo que envié:
Mi-Tabla-Periodica-Corregir.rar
Ahí únicamenter tecleo el número principal de mi Base de Datos (Rango $B$1) y automáticamente administra mostrando todos los valores que corresponden a un determinando Elemento.
Para el caso del Superíndice, de repente tenga que enfocar el mi trabajo final de otra manera con Excel? es decir crear 2 Hojas, una donde trabaje la función "BUSCARV" y en la otra Hoja copiar sus valores, y finalmente convertir a Superíndices aquellos que se deseen?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar