MACRO con opcion de escoger celda de origen y destino para "convertir texto a numero"

A la MACRO anterior podria añadirle las siguientes opciones

1.- Para convertir una columna

Si quisiera pasar los datos de una columna, que la MACRO te preguste: ¿Indique la posicion inicial de los datos a convertir?, yo mediante el cursor del mouse selecciones la celda incial que contiene los datos.

A continuacion la MACRO pregunte: ¿Cuál es la celda inicial donde van a ir los datos convertidos?, yo mediante el cursor del mouse seleccionare la celda incial en la que van a ir los datos convertidos

2. Para convertir un bloque de datos

En este caso, la MACRO preguntaria: ¿Indique ud el bloque a convertir?. Yo por ejemplo señalaria con el cursor el bloque de datos a convertir.

¿Luego preguntaria que digites el nombre del libro donde se desea esten los datos convertidos? Yo responderia "HOJA2".

Le estoy muy agradecido.

1 respuesta

Respuesta
2

Para seleccionar celdas o rangos la macro es la misma:

Sub seleccionaOrigen_Destino()
'x Elsamatilde
Set rango = Application.InputBox("Seleccione 1 celda o el rango que desee volcar a hoja y luego presione ACEPTAR.", Type:=8)
rgo1 = rango.Address
Set rango = Application.InputBox("Seleccione la primer celda de destino y luego presione ACEPTAR.", Type:=8)
rgo2 = rango.Address
'copia celda o rango en destino
Range(rgo1).Copy Destination:=Sheets("Hoja2").Range(rgo2)
End Sub

Recordá de valorar esta respuesta para continuar con la otra que aún está pendiente de que me envíes algunas aclaraciones.

Una consulta final, para que esta ultima macro funcione con lo que hace la primera macro, osea convertir texto a numero como seria la macro

Sub pasandoVal_otraHoja()   'con selección de rangos
'x Elsamatilde
'hoja destino
Set ho2 = Sheets("Hoja2")
'solicitar inicio del rango de datos de la hoja activa
'controla posible error al cancelar ventana
On Error Resume Next
Set rango = Application.InputBox("Seleccione 1 celda o el rango que desee volcar a hoja y luego presione ACEPTAR.", Type:=8)
rgo1 = rango.Address
Set rango = Nothing
Set rango = Application.InputBox("Seleccione la PRIMER celda de destino y luego presione ACEPTAR.", Type:=8)
rgo2 = rango.Address
On Error GoTo 0
If rgo1 = "" Or rgo2 = "" Then
    MsgBox "Error en el ingreso de celdas origen-destino."
    Exit Sub
End If
'se recorre la col a partir de la celda origen hasta encontrar 1 celda vacía
Range(rgo1).Select
While ActiveCell <> ""
    'si Val devuelve 0 es porque se trata de celdas con texto, en ese caso se los pasa sin convertir
    If Val(ActiveCell) <> 0 Then
        ho2.Range(rgo2) = ActiveCell.Value * 1
    Else
        'pasa el dato sin convertir
        ho2.Range(rgo2) = ActiveCell.Value
    End If
    'pasa a la fila siguiente en rango destino
    rgo2 = Range(rgo2).Offset(1, 0). Address(False, False)
    'pasa a fila sgte en rango origen
    ActiveCell.Offset(1, 0).Select
Wend
End Sub

Estimada Elsa he copiado la Macro y la puse en este archivo

https://drive.google.com/file/d/0B4OmkP08K7UZdUJPejh5SGRDaE0/view?usp=sharing 

Al ejecutar la macro

PASO 1.- SELECCIONAR BLOQUE, el bloque seleccionado fue A2:S9 de la pestaña "AÑADIR" cree la HOJA2 para poder hacer el pase de TEXTO a NUMERO.

Paso 2. seleccionar donde inicia el bloque destino. Escogí A2 de la pestaña HOJA2.

Pero la MACRO solo copio la 1ra columna osea de A2 hasta A9.

Por favor ayúdeme con la corrección, saludos, JOHNMMOR41

Por favor revise el link donde esta el archivo que contiene su macro, no esta funcionando, gracias, JOHNMOR41

Tomo nota, pero tendrás que tenerme algo de paciencia porque estoy de viaje y no puedo acceder a Excel por el momento.

Sdos!

OK, muy esperare y gracias por tu ayuda, saludos, JOHNMOR41

Adjunto macro ajustada. No comprendí porqué la ejecutas 2 veces... así que retiré esa parte del código.

Como tu hoja de origen tiene una macro en el evento Selection, la inhabilito para que no se ejecute mientras seleccionás el rango. Por lo tanto no se modifican los colores.

Si tu idea es asignar un formato diferente, podés hacer uso de la variable rgo1 ... pero no me quedó claro en qué hojas vas a asignar formatos.

Sub pasandoVal_otraHoja_SELEC()   'con selección de rangos
'x Elsamatilde
'hoja destino
Set ho2 = Sheets("Hoja2")
'solicitar inicio del rango de datos de la hoja activa
'controla posible error al cancelar ventana
On Error Resume Next
'evitar que se ejecute el evento Selection_Change
Application.EnableEvents = False
Set rango = Application.InputBox("Seleccione 1 celda o el rango que desee volcar a hoja y luego presione ACEPTAR.", Type:=8)
rgo1 = rango.Address
Set rango = Nothing
Set rango = Application.InputBox("Seleccione la PRIMER celda de destino y luego presione ACEPTAR.", Type:=8)
rgo2 = rango.Address
On Error GoTo 0
If rgo1 = "" Or rgo2 = "" Then
    MsgBox "Error en el ingreso de celdas origen-destino."
    Exit Sub
End If
'se recorre la col a partir de la celda origen hasta encontrar 1 celda vacía
Range(rgo1).Select
'cantidad de columnas a convertir
colx = Range(rgo1).Columns.Count
While ActiveCell <> ""
For i = 0 To colx - 1
    'si se trata de celdas con texto se pasa sin convertir
    If IsNumeric(ActiveCell.Offset(0, i)) Then
        If Val(ActiveCell.Offset(0, i)) <> 0 Then
        ho2.Range(rgo2).Offset(0, i) = ActiveCell.Offset(0, i).Value * 1
        End If
    Else
        'pasa el dato sin convertir
        ho2.Range(rgo2).Offset(0, i) = ActiveCell.Offset(0, i).Value
    End If
Next i
    'pasa a la fila siguiente en rango destino
    rgo2 = Range(rgo2).Offset(1, 0). Address(False, False)
    'pasa a fila sgte en rango origen
    ActiveCell.Offset(1, 0).Select
Wend
Application.EnableEvents = True
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas