Seleccionar mediante VBA sólo las cifras de un string que tiene cifras y texto

Anónimo
2011-10-25T20:53:09+00:00

¿Cómo se puede seleccionar mediante VBA sólo las cifras de un string que tiene cifras y texto?

Por ejemplo si tengo el siguiente string:

" En el año 1997 se escribió un libro de 781 páginas que se vendía en 39 dólares"

Quiero seleccionar primero la cifra 1994, después seleccionar 781 y luego seleccionar 39.

Todo ello por código.

¿Será posible?

Saludos

Francesca

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la comunidad de soporte técnico de Microsoft. Puedes votar si te parece útil, pero no puedes agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

43 respuestas

Ordenar por: Lo más útil
  1. Héctor Miguel 71,595 Puntos de reputación
    2011-10-27T04:11:12+00:00

    ... se trata de seleccionar un texto de varias líneas en un documento hecho en Word, y buscar y reemplazar las cifras escritas en números por las misma cifras expresadas con palabras. En el ejemplo que puse en mi primer post, el texto:

    " En el año 1997 se escribió un libro de 781 páginas que se vendía en 39 dólares"

    debería quedar así:

    " En el año mil novecientos noventa y siete se escribió un libro de setecientos ochenta y un páginas que se vendía en treinta y nueve dólares" ...

    hola, Fran !

    aunque vba es vba, excel y word tienen "sus diferencias" (objetos, metodos, propiedades, etc.), entonces, solventado el tema de la funcion para convertir numeros a letras (que ya tienes en uso), prueba con la siguiente macro (copiada o escrita) =>en un modulo de codigo estandar en tu documento de ms-word<=

    OJO: la funcion que estoy usando para convertir numeros a letras se llama: "EnLetras" (marcada en negritas y subrrayado en el ejemplo), misma que deberas cambiar por el nombre de tu funcion

    === inicia codigo ===

    Sub Reemplaza_Num_x_Letras()

      Dim Pfo As Paragraph, Texto As String, Serie As Object, n As Byte, x As Byte

      Application.ScreenUpdating = False

      For Each Pfo In ActiveDocument.Paragraphs

        Texto = Pfo.Range.Text

        With CreateObject("vbscript.regexp")

          .Global = True

          .Pattern = "\d+"

          Set Serie = .Execute(Texto)

          x = Serie.Count

          If x Then

            Pfo.Range.Select

            For n = 0 To x - 1

              With Selection.Find

                .Text = CStr(Serie(n))

                .Replacement.Text = CStr(EnLetras(Serie(n)))

                .Execute Replace:=wdReplaceAll

              End With

            Next

          End If

        End With

      Next

      Set Serie = Nothing

      Selection.HomeKey Unit:=wdStory

    End Sub

    === fin de codigo ===

    si cualquier duda (o informacion adicional)... comentas ?

    saludos,

    hector.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimo
    2011-10-26T23:03:02+00:00

    Hola Héctor,

    Lamento no haber podido hacerme entender, no te preocupes, no es la primera vez que no me entienden, jajaja.

    Mira, se trata de seleccionar un texto de varias líneas en un documento hecho en Word, y buscar y reemplazar las cifras escritas en números por las misma cifras expresadas con palabras. En el ejemplo que puse en mi primer post, el texto:

    " En el año 1997 se escribió un libro de 781 páginas que se vendía en 39 dólares"

    debería quedar así:

    " En el año mil novecientos noventa y siete se escribió un libro de setecientos ochenta y un páginas que se vendía en treinta y nueve dólares"

    Eso. No necesito almacenar nada, sólo buscar y reemplazar números por letras en el mismo lugar del documento.

    Gracias por tu paciencia, y por favor tu no te disculpes por pedir las preguntas más claras, bastante haces con atender a los que necesitan ayuda y no sabemos ni preguntar.

    Saludos,

    Francesca

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  3. Héctor Miguel 71,595 Puntos de reputación
    2011-10-26T02:58:41+00:00

    hola, Fran !

    (me temo que) debo esperar a que estes un poco mas clara para poder entender el procedimiento completo (?)

    lo de menos es almacenar en variables-matriz (p.e. MatrizNumeros) las series de numeros y en otra variable-matriz (p.e. MatrizLetras) la conversion de cada elemento en la primera matriz

    el detalle es: donde, cuando y como usarias los resultados de la MatrizLetras, y como solucionar la posibilidad de series de numeros repetidas (???)

    saludos,

    hector.

    p.d. disculpa tantas (RE)preguntas, pero eso de "adivinen lo que estoy pensando..." (nunca ha sido "mi fuerte") :D

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimo
    2011-10-26T02:05:53+00:00

    Hola Héctor,

    La cantidad de cifras es absolutamente aleatoria.

    Lo que hago después es mediante una macro que ya tengo lista transformar las cifras de números a letras.

    Lo que pasa es que no quiero tener que revisar cada vez un texto de varias páginas para encontrar donde hay cifras para hacer la transformación, sino que se busquen mediante código. Y no quiero transformarlas cifra por cifra.

    El asunto es así: los textos no pueden tener números, sólo palabras.

    No sé si se entiende, estoy cansada y un poco confundida. Te pido disculpas por lo poco clara que estoy siendo.

    Saludos,

    Fran.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios
  5. Héctor Miguel 71,595 Puntos de reputación
    2011-10-25T23:19:22+00:00

    ¿Cómo se puede seleccionar mediante VBA sólo las cifras de un string que tiene cifras y texto?

    Por ejemplo si tengo el siguiente string:

    " En el año 1997 se escribió un libro de 781 páginas que se vendía en 39 dólares"

    Quiero seleccionar primero la cifra 1994, después seleccionar 781 y luego seleccionar 39.

    Todo ello por código. ¿Será posible?

    hola, Francesca !

    comenta cuantas cifras (series de numeros) podria contener el "string" (siempre 3?, 5?, 12?, ???)

    indica "que" necesitas hacer despues de "seleccionar" cada serie de numeros (almacenarlas en una variable-matriz ?, colocarlas en algunas celdas de hoja de calculo ?, ???)

    saludos,

    hector.

    ¿Le resultó útil esta respuesta?

    0 comentarios No hay comentarios