Excel - Numero almacenado como texto.

 
Vista:

Numero almacenado como texto.

Publicado por Alicia (19 intervenciones) el 10/01/2008 00:26:18
Hola,

Resulta que tengo una serie de celdas con numeros con punto como separacion de decimales y quiero cambiar dichos puntos por comas con una macro:

Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False

Pero usando esa macro, en cada casilla que la macro cambia el punto por la coma, aparece un error de "Numero almacenado como texto" y me da la opcion, en el cuadrito de error que sale adyacente a la celda, de "Convertir en numero" pero claro, no es plan, yo quiero que al aplicar la macro no me salga ese error (o corregirlo con otra macro...) y que las celdas contengan numeros separando los decimales por comas.

A ver si me iluminais que estoy un poco perdida.

Gracias y feliz 2008 y sucesivos. ;-)
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

RE:Numero almacenado como texto.

Publicado por JuanC (792 intervenciones) el 10/01/2008 00:46:29
probá con Application.DisplayAlerts = False

Saludos desde Baires, JuanC
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

RE:Numero almacenado como texto.

Publicado por Alicia (19 intervenciones) el 10/01/2008 04:52:48
Sub Macro1()
'
' Macro1 Macro
'
' Acceso directo: CTRL+a
'
Application.DisplayAlerts = False
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End Sub

¿Asi? Si es asi, no va, sigue saliendome en cada celda que cambio punto por coma el dichoso error... Si al menos pudiera con otra macro "Convertir en numero" cada celda con error por estar almacenado como texto pues me serviria, pero no doy con el metodo para crear una macro que haga dicha "conversion en numero"

Lo curioso es que si hago la sustitucion de los puntos por las comas manualmente con "Reemplazar" y elegir "Reemplazar Todos" de Excel pues los cambia todos y no sale error, pero si grabo una macro de esas mismas acciones manuales luego al ejecutarla da error en todas las celdas que cambia, ¡no entiendo nada! :-(
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

RE:Numero almacenado como texto.

Publicado por JuanC (792 intervenciones) el 10/01/2008 14:06:10
prueba con este 'engendro'!!

Option Explicit

'//By JuanC - Ene. 2008

Private Declare Sub apikeybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Sub apiSleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Private Const KEYEVENTF_KEYUP = &H2

'//Para que funcione NO ejecutarlo
'//desde el Editor de VBA
Sub test()
Dim cell As Range
[A1].Activate
For Each cell In [A1:A10]
Call apikeybd_event(vbKeyF2, 0, 0, 0)
apiSleep 20
Call apikeybd_event(vbKeyF2, 0, KEYEVENTF_KEYUP, 0)
cell.FormulaR1C1 = Replace(cell.Value, ".", ",")
cell.NumberFormat = "0.00"
Call apikeybd_event(vbKeyReturn, 0, 0, 0)
apiSleep 20
Call apikeybd_event(vbKeyReturn, 0, KEYEVENTF_KEYUP, 0)
Next
Set cell = Nothing
End Sub

Saludos desde Baires, JuanC
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

RE:Numero almacenado como texto.

Publicado por JuanC (792 intervenciones) el 10/01/2008 14:44:10
le hice un pequeño cambio...

Option Explicit

'//By JuanC - Ene. 2008

Private Declare Function apiFindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function apiSetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hWnd As Long) As Long

Private Declare Sub apikeybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Sub apiSleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Private Const KEYEVENTF_KEYUP = &H2

Sub test()
Dim cell As Range, hWnd&
hWnd = apiFindWindow("XLMAIN", Application.Caption)
If hWnd <> 0 Then
Call apiSetForegroundWindow(hWnd)
End If
[A1].Activate
For Each cell In [A1:A10]
Call apikeybd_event(vbKeyF2, 0, 0, 0)
apiSleep 20
Call apikeybd_event(vbKeyF2, 0, KEYEVENTF_KEYUP, 0)
cell.FormulaR1C1 = Replace(cell.Value, ".", ",")
cell.NumberFormat = "0.00"
Call apikeybd_event(vbKeyReturn, 0, 0, 0)
apiSleep 20
Call apikeybd_event(vbKeyReturn, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Next
Set cell = Nothing
End Sub

Saludos desde Baires, JuanC
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

RE:Numero almacenado como texto.

Publicado por Alicia (19 intervenciones) el 10/01/2008 16:55:49
Ala, ¿Que es todo eso? :-)

Bueno, lo he metido y ejecutado y se fastidia al ir a ejecutar esta linea:

cell.FormulaR1C1 = Replace(cell.Value, ".", ",")

Dice que no esta definida la variable...
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

RE:Numero almacenado como texto.

Publicado por JuanC (792 intervenciones) el 10/01/2008 19:56:10
fijate si definiste cell

Dim cell As Range

Saludos desde Baires, JuanC
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

RE:Numero almacenado como texto.

Publicado por Alicia (19 intervenciones) el 10/01/2008 23:16:40
JuanC, partiendo de tu ejemplo/idea he hecho este otro mas corto que hace lo que pido, pero, es MUY MUY MUUUUUY lento. ¿Alguna idea para que haga esto mismo pero mas rapido?

Es que para que cambie una serie de unas 100 filas por 2 columnas llenas de celdas a cambiar se tira casi 1 minuto y eso que tengo un PC rapido, ni imaginar como ira en uno mas lento y asi queda fatal claro...

Option Explicit

Private Sub Remplazar()
Dim cell As Range, hWnd&
Dim NuevoValorCelda As Variant

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

[A1].Activate
For Each cell In [A1:B1000]
NuevoValorCelda = Replace(cell.Value, ",", ".")
cell.Value = NuevoValorCelda
Selection.NumberFormat = "0.00"
Next

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Set cell = Nothing
End Sub

Saludos, Alicia.
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

RE:Numero almacenado como texto.

Publicado por JuanC (792 intervenciones) el 11/01/2008 00:00:50
probá con esto... después me contás..
(son 100x2 celdas o 1000x2?)

Option Explicit
Option Base 1

Private Sub Remplazar2()
Dim rng As Range
Dim V As Variant
Dim m&, n&, i&, j&

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Set rng = [A1:B100]
With rng
m = .Rows.Count
n = .Columns.Count
V = .Value
End With
For i = 1 To m
For j = 1 To n
V(i, j) = Replace(V(i, j), ",", ".")
Next
Next
With rng
.FormulaArray = V
.NumberFormat = "0.00"
End With

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Set rng = Nothing
If IsArray(V) Then Erase V
End Sub

Saludos desde Baires, JuanC
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

RE:Numero almacenado como texto.

Publicado por Alicia (19 intervenciones) el 11/01/2008 09:23:54
Arreglado. Modificandolo un poco va mas rapido y consigo que haga lo que buscaba. Muchas Gracias JuanC. ;-)

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