Jump to content

Convertir texto a numeros (eficientemente)


Gerson Pineda

Recommended Posts

Posted

Hola

Existen varias formas de convertir numeros almacenados como texto a "numeros" (por cierto es un tema muy consultado), uno de los mas conocidos es usar un bucle en VBA, y precisamente lo que busco es evitar el famoso bucle (lo he probado con mas de 35000 celdas en la columna A y va rapido)

Sub convertiranumeros()

With Application
.ScreenUpdating = False
With Range("B1")
.Value = 1
.Copy
Range("A2:A" & _
Range("A" & Rows.Count).End(xlUp).Row).PasteSpecial _
Operation:=xlMultiply
.Value = ""
ActiveCell.Select
End With
.CutCopyMode = False
.ScreenUpdating = True
End With

End Sub[/PHP]

Espero sea de utilidad

Saludos desde Honduras

Convertir numeros a texto eficientemente.zip

Posted

Hola, esta excelente tu aporte, me permiti modificar un poco el codigo para que sirva en cualquier columna y fila, espero no tengas inconveniente.

Salu2.xlsx

Sub convertiranumeros()

On Error Resume Next

Set rn = Application.InputBox("Selecione celda...", Type:=8)

rn.Select

With Application

.ScreenUpdating = False

With Range("B1")

.Value = 1

.Copy

Range(Selection, Selection.End(xlDown)).PasteSpecial operation:=xlMultiply

.Value = ""

ActiveCell.Select

End With

.CutCopyMode = False

.ScreenUpdating = True

End With

End Sub

Posted

Hola potter

Buena opcion, tambien se podria usar algo como esto:

Sub convertiranumeros2()

With Application
.ScreenUpdating = False
With ActiveCell
With ActiveCell.Offset(0, 1)
.Value = 1
.Copy
Range(ActiveCell.Offset(1), Selection.End(xlDown)).PasteSpecial _
Operation:=xlMultiply
.Value = ""
End With
ActiveCell.Select
End With
.CutCopyMode = False
.ScreenUpdating = True
End With
End Sub
[/PHP]

Lo unico que se debe hacer es colocarce en la cabezera del rango de numeros

Saludos desde Honduras

Posted
Que tal si solo ponen.


Selection.Value = Selection.Value
[/CODE]

Saludos

Lo has comprobado tu? lo intente con with selection y no paso nada, haber si nos mandas el codigo completo, o ya mis neuronas no dan mas jeje

Saludos

Posted
Lo has comprobado tu? lo intente con with selection y no paso nada, haber si nos mandas el codigo completo, o ya mis neuronas no dan mas jeje

Saludos

Utilizando el ejemplo de tu 1er. post quedaria asi.

Sub Convertiranumeros()
Dim rSel As Range
Set rSel = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
rSel.Value = rSel.Value
Set rSel = Nothing
End Sub[/CODE]

Otra opción.

[CODE]Sub Convertiranumeros()
With Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
.Value = .Value
End With
End Sub[/CODE]

Saludos

Posted

Interesante me gusta tu opción tambien solo que le cambiaria el offset a cero

Range(ActiveCell.Offset(0), Selection.End(xlDown)).PasteSpecial _

Operation:=xlMultiply

por si no tiene encabezado la columna y empezar desde los valores.

Lo de salilepaty lo intente pero igual no me funciono, he visto ese codigo pero cuando realizar operaciones y quieres que solo te quede el valor en la celda; no la formula.

Salud.xlsx

Posted

sailepaty

Cre que te has confundido, lo que trato de hacer es que numeros "almacenados como texto" se conviertan a numeros comunes dentro de Excel, para luego poder trabajarlos bajo calculos

Saludos sr Elias sera que mereces unas buenas vacaciones jeje, al igual que Macro (antes Antoni)

Posted
Que tal Gerson, ya probaste alguna de las dos opciones con tus datos?

Saludos

Efectivamente ya probe, pero sin exito alguno, talvez si lo haces tu porfavor, sobre mi archivo

Saludos

Posted

Hola, por que no funcionan tus macros si pego los datos de la columna G en A solo, me funcionan al abrir el archivo de los contrario no, lo mismo pasa si los copio a otra hoja del mismo libro.

que le pasa, no entiendo !!!

Salu2.xlsx

Guest Cacho R
Posted

Hola! Amigos

En realidad, lo que sugiere sailepaty no es que no esté funcionando: ¡es que no se nota! (jajaja).

Para notarlo simplemente falta un cambio de formato:


[g1].CurrentRegion.Copy [a2]
With [a2].Resize(WorksheetFunction.CountA([a:a]) - 1)
.NumberFormat = "0"
.Value = .Value
End With[/PHP]

Saludos, Cacho R.[color=blue]

--- Mensaje unido automáticamente ---

[/color][size=3][font=comic sans ms]Sorry: olvidé un comentario...

El ejemplo que ha preparado sailepaty tiene una "pequeña" diferencia con lo inicial de Gerson.

En efecto: mientras que en éste, las celdas de la columna A tienen un formato "Texto", en en el ejemplo de sailepaty las celdas ya tienen un formato general.

Saludos, Cacho R.[/font][/size]

Posted

No habia ni reparado en el formato de las celdas hasta ahora que lo menciona Cacho, así que para que se vea el cambio.

Sub SailePaty_B()
With Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
.NumberFormat = "General"
.Value = .Value
End With
End Sub
[/CODE]

Saludos

Posted

Cacho, gracias por la aclaracion, sailepaty compendido y probado, !si funciona! y con la misma eficacia

Por lo que quedaria asi:

Sub Convertiranumeros()

With Application
.ScreenUpdating = False
With Range("B1")
.Value = 1
.Copy
With Range("A2:A" & _
Range("A" & Rows.Count).End(xlUp).Row)
.PasteSpecial Operation:=xlMultiply
.NumberFormat = "General"
End With
.Value = ""
ActiveCell.Select
End With
.CutCopyMode = False
.ScreenUpdating = True
End With
End Sub
[/PHP]

Eso si me gusta el metodo de sailepaty es mas sencillo, practico y con la misma eficacia, que pretendia con mi aporte

Saludos a los 3, es un placer compartir con ustedes

Posted

Chequen esta opcion (aportada en otro foro), creador Macro Antonio

Sub ConvierteNúmerosAlmacenadosComoTexto()
uf = Range("A" & Rows.Count).End(xlUp).Row
Range("Z1:Z" & uf).Value = Range("A1:A" & uf).Value
Range("A1:A" & uf).Value = Range("Z1:Z" & uf).Value
Range("Z1:Z" & uf).ClearContents
End Sub
[/PHP]

Saludos

  • 2 weeks later...
Posted

Buenas a todos:

Aún sigo aprendiendo a "leer" y programar con macros (VBA), por lo que no se mucho. Estuve tratando como el que puso Gerson, pero en esta parte .PasteSpecial Operation:=xlMultiply,lo sustitui por este .PasteSpecial Operation:=xlTransparent debido a que este último si me realiza los cambios a formato de número; creo que se debe a que los datos de donde los exporto es de uno generado en Crystal Report. No sé si tenga que ver esto, pero siempre que lo exporto a Excel pone una de las columnas como texto, y lo que quiero es trabajas con los números de esa columna en mención; por lo que encontre este tema y lo tome para trabajar pero no me relizaba los cambios hasta que indagando por ahí en Ayuda del Visual Basic, encontré esta constante (así es el termino como fué que aparecio). Solo quisiera saber que diferencia existe entre lo expuesto y el cambio que realice, porque lo que no he comprendido es el significado de estas en este lenguaje técnico y el porque no realizo los cambios expuestos primeramente.Gracias.

Posted

Hola Gaspatin

Lo que no entiendo es como VBA no nos da error al usar "Transparent" pues es usado normalmente para controles (como TextBox2.BackStyle = fmBackStyleTransparent y se pondra transparente) y que al ver la ayuda de PasteSpecial no aparece por ningun lado el dichoso "xlTransparent"

Si sigues con la duda de como poder resolverlo crea un tema al respecto}

Saludos desde Honduras

Guest Cacho R
Posted
... Lo que no entiendo es como VBA no nos da error al usar "Transparent" ...

Hola! Amigos.

Mi estimado Gerson: "xlMultiply" es un parámetro prefijado dentro de VBA cuyo valor es "4". Por lo tanto las siguientes tres líneas son equivalentes:

.PasteSpecial Operation:=xlPasteSpecialOperationMultiply

.PasteSpecial Operation:=xlMultiply

.PasteSpecial Operation:=4

En el mismo sentido, el parámetro "xlTransparent" es otro parámetro con valor prefijado: "2", en este caso.

De modo que las cuatro siguientes líneas son equivalentes:

.PasteSpecial Operation:=xlTransparent

.PasteSpecial Operation:=xlPasteSpecialOperationAdd

.PasteSpecial Operation:=xlAdd

.PasteSpecial Operation:=2

Saludos, Cacho R. :D

Posted

Que tal Buenas noches:

Creo que me exedí un poco con la pregunta, uds disculpen la ignorancia al no poder comprenderlo del todo estos terminos, mas o menos entiendo a lo que se refiere Cacho, pero con esto me doy mas que sufiente por enterado del concepto por el momento; mi intención del cuestionamiento iba mas encamidado a que el termino o parametro Transparent que es lo que hace en la ceda a diferencia del Multiply, pero si no se puede en este tema no importa, es solo de conocimiento la pregunta. Gracias y Saludos.

Posted

Hola

Aprovecho para saludar a mis buenos amigos y masters.

Para ampliar un poco el contenido y esperando ayude a comprender como funciona, lo que sucede es que existen una serie de constantes de Enumeracion predefinidas con la finalidad de hacer más fácil la programación, (es decir para ayudar al programador, ya que es mas descriptivo por ejemplo usar la constante de enumeracion xlMultiply que solamente el número 4), al menos dentro del ámbito donde se estan usando.

Para ejemplificar desde vba como funciona aqui dejo un pequeño ejemplo:

'Se define la enumeracion
Public Enum EstadoDeAnimo
Triste = 1
Contento = 2
Enojado = 3
End Enum

'usamos como parametro una variable tipo EstadoDeAnimo
Function ReflejaEstadoAnimo(Estado As EstadoDeAnimo)
Select Case Estado
Case 1
ReflejaEstadoAnimo = "o o" & vbNewLine & " l " & vbNewLine & "~~~"
Case 2
ReflejaEstadoAnimo = "o o" & vbNewLine & " l " & vbNewLine & " l__l"
Case 3
ReflejaEstadoAnimo = "^ ^" & vbNewLine & " l " & vbNewLine & "----"
Case Else
ReflejaEstadoAnimo = "***"
End Select
End Function

''Funcionamiento del ejemplo
Sub test()
a = ReflejaEstadoAnimo(Contento)
MsgBox a
End Sub[/PHP]

Por ejemplo de ahi que sea equivalente usar la variable tipo constante de enumeracion Triste que es igual al número 1 en nuestro ejemplo.

Ademas el [color=#000080]intellisense[/color] nos ayuda más al mostrarnos los posibles valores que podemos usar en la funcion (acercandolo mas al lenguaje humano).

[ATTACH]24323.vB[/ATTACH]

Saludos

post-565-145877003357_thumb.jpg

Posted

Hola master Neverdelimon, que puedo decir mas descriptivo e ilustrativo no creo! sin duda cada dia aprendemos algo, y aunque no soy programador de profesion me gusta mucho hacerlo, y tus aportes siempre nos iluminan y enseñan, como otros que ya sabemos quienes son

Gracias por compartir tu conocimiento

Saludos

Posted

Que tal a todos:

Jejejeje me agrado mucho tu ejemplo Neverdelimon1 (con peras y manzanas como decimos por acá, refiriendose a un ejemplo simple), entiendo un poco mejor esto. Tampoco soy programador de profesión pero este tipo de foros me ha sacado esa parte que no sabía que tenía, espero no desesperar o molestar cuando hago este tipo de cuestionamientos, pero creo que es parte del interes que tengo por saber más.

Estuve trabajando en un proyecto personal y con lo aqui aprendido y visto en otros temas cree este que espero me pueda explicar y sobretodo le sirva a alguien mas lo que expongo. Saludos y gracias a los que de una u otra manera me ilustraron.


Sub RangoLimpio()
Application.ScreenUpdating = False
'Seleccionamos el rango a trabajar en este caso columna "G"
Cells(Rows.Count, "G").End(xlUp).Offset(0, 1).Select
'Selecciono una columna a la derecha donde pondré los datos
Range(Selection, Cells(2, 8)).Select
With Selection
'En "C" estan rangos en multiplos de 10 hasta que puede terminar en cualquiera
'es decir en 20,30,60,70 ó 100 y vuelve a comenzar otra fila desde 10 así sucesivamente.
'Con la siguiente formula me dice donde empieza 10
.FormulaR1C1 = "=IFERROR(IF(R[-1]C[-5]+10=RC[-5],"""",IF(RC[-5]=10,""x"")),"""")"
'Copia el rango para solo dejar datos y no formulas
.Copy
.PasteSpecial (xlPasteValues)
End With

Dim C As Variant
Dim Rng As Range
'Aqui "limpio" las celdas que quedaron vacias
Set Rng = Selection
For Each C In Rng.Cells
If C = "" Then C.Select
Selection.ClearContents
Next
Range("H1").Select
Application.ScreenUpdating = True
End Sub[/CODE]

Saludos a todos y mis agradecimientos.

Archived

This topic is now archived and is closed to further replies.

  • 108 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Files

  • Download Statistics

    • Files
      184
    • Comments
      96
    • Reviews
      28

    More information about "Un juego solitario en Excel"
    Latest File
    By pegones1

    4    0

  • Crear macros Excel

  • Posts

    • Hola. Tu archivo no tiene macros. Sobre las celdas combinadas, ya que no puedes evitar su uso al no ser tus archivos, lo mejor es "des combinarlas" previo a cualquier cosa, incluso en tu misma macro (que no envías). 
    • Hola buenas tardes tengo un archivo en excel que copia varias tablas y las importa a word de manera automatica. Este selecciona las tablas en base a las filas con datos de mi columna C. pueden ser  diferentes rango de tablas. (Pero siempre mi rango es de celdas continuas y con valores continuas) Funciona muy bien. El problema que ahora tengo es que muchos archivos con tablas  tienen las celdas combinadas ya sea horizontalmento o vertical. Aqui es donde empieza mi problema ya que son formatos de origen no puedo modificarlas. Quisiera ajustar mi macro en la parte de seleccion de rango de tablas y que pueda considerar la celdas combinadas y pegarlos en word sin problema. Ya que actualmente no me pone algunas tablas o rangos, o me repite las tablas y no considera las demas. Todo esto a que en algunas no hay valores o las celdas estan combinadas.   Muchas gracias Seleccion automatica de celdas combis.xlsx
    • por si te sirve: la primera matriz (pivotarpor) al inicio los que no tienen profesor asignado (orden ascendente por omision) la segunda (2 matrices y solo unicos) en el orden de aparicion (no asignados al final) la tercera (2 matrices) omite los no asignados (tambien por orden de aparicion) unicos y suma (ayudaExcel).xlsx
    • No se si este tema va aquí, si no es así, pido disculpas. Llevo varios días dando vueltas a un fallo que me sale al exportar una tabla a xml y que no consigo resolver. El fallo que me da es que no las asignaciones no son exportables y al comprobar la asignación me dice datos no normalizados.     Libro1.xlsx
    • Buenas tardes estimado JSDJSD, muchas gracias por responder. En efecto esta parte quedo perfecta. Pero me falto indicar que la macro se ejecute dependiendo de la celda L1 ( Caliza o Mezcla). Entonces si dice Caliza aplica la macro que me enviaste, pero si dice Mezcla que haga lo siguiente: Busque el  ultimo dato de la columna K de la hoja Mezcla Adición del libro Base de datos Cementos producido 2024, con la condición de que la columna B debe ser igual a 4 y el dato lo coloque en la celda N1 de la hoja Cemento del libro Cemento. Te comento que el libro Prehomo y Base de datos Cementos producidos 2024 están en carpetas diferentes ya que estos los maneja otra área, como se enmendaría este caso por el comentarios que me enviaste de la ruta. Saludos y un fuerte abrazo   Cemento-2.xlsm
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy