Hacer una function de una formula en celda

11/10/2006 - 18:02 por danek | Informe spam
Una aplicación me exporta valores a excel, pero en el caso de los números, me
exporta con los siguientes patrones:
14.475,28 (o sea, número normal)
333.21 (texto, ya que el . hace que excel lo considere texto)
333.21- (texto, con el signo - en la derecha en lugar de la izda y el . en
lugar de ,)
13.321,44- (texto por el signo -)

Supongamos que cualquiera de estos datos esta en A1. Con la siguiente
formula he conseguido que me los convierta en números normales
=SI(ESERROR(ENCONTRAR("-";A3))=VERDADERO;SI(ESNUMERO(A3*1)úLSO;REEMPLAZAR(A3;ENCONTRAR(".";A3);1;",")*1;A3*1);SI(ESERROR(("-"&IZQUIERDA(A3;ENCONTRAR("-";A3)-1))*1)=VERDADERO;(IZQUIERDA("-"&REEMPLAZAR(A3;ENCONTRAR(".";A3);1;",");LARGO(A3)))*1;("-"&IZQUIERDA(A3;ENCONTRAR("-";A3)-1))*1))

La cuestión es, que estoy intentando hacer una FUNCTION para crear un
complemento y que lo utilicen otras personas con esta misma formula pero no
hay manera.

La verdad es que no tengo claro como utilizar formulas de excel dentro de
VB. Os paso el código que he utilizado:

Function ImporteTransformar(NumeroRaro)

' Condicional 1: Existe el caracter "-"?

If "find("" - ""; NumeroRaro)" = True Then

' Condicional 2: Separa los decimales con "." en vez de ","?

If "iserror("" - "" & left(NumeroRaro; find("" - ""; NumeroRaro) - 1))*1
= True" Then

ImporteTransformar = "left("" - ""&replace(NumeroRaro; find(""."";
NumeroRaro); 1; "",""); len(NumeroRaro))"

Else

ImporteTransformar = "(""-""&left(NumeroRaro; find(""-"";
NumeroRaro) - 1)) * 1"

End If

Else

' Condicional 3: Sabiendo que "-" no existe, es un numero?

If "isnumber(NumeroRaro)" = True Then

ImporteTransformar = NumeroRaro * 1

Else

ImporteTransformar = "Replace(NumeroRaro; Find("".""; NumeroRaro);
1; "","") * 1"

End If

End If

End Function


Vamos, que yo me estoy volviendo bastante loco. Seguramente sea un fallo en
la sintaxis en la utilización de las fórmulas de excel dentro de VB...

Si has tenido la paciencia de leer hasta aquí, ya tienes todos mis
agradecimientos!!!
 

Leer las respuestas

#1 Héctor Miguel
11/10/2006 - 23:58 | Informe spam
hola, ?

1) entre nuneros 'raros', por separadores distintos [miles/decimales] derivados de configuraciones regionales diferentes...
[permiteme comentarte que] tus numeros 'normales'... pasan a ser numeros 'raros' [para mi -y para VBA-] :))

2) VBA 'reconoce' -solamente- el punto para separar decimales... y la coma para separar miles ;)

3) 'depositar' formulas/funciones en celdas usando codigos por vba... 'requiere' [ademas] de la coma para separar argumentos ;)
[a menos que deposites una formula usando la propiedad '.FormulaLocal' [pero fallaria en configuraciones distintas] :(

4) si lo que necesitas es que el usuario no tenga la necesidad de 'entender/masticar/digerir/...' una formula tan... 'larga/compleja' -?-
-> haz una prueba con una formula [ligeramente] mas 'delgada' [creo que incluso no es dificil de entender] p.e.
suponiendo que el numero 'raro' se encuentra en la celda 'A3'...
=--sustituir(sustituir(a3;"-";"");".";elegir(1+eserror(hallar(",";a3));"";","))

5) la alternativa de 'definir' una funcion personalizada [creo que] no te seria de mucha ayuda -?-
ya que las funciones [aun por vba] NO pueden depositar/modificar/... NADA en las celdas de las hojas de calculo :-(
[tendria que ser un procedimiento Sub -normal- y haria falta 'suponer/conocer/...' algunos otros detalles] :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Una aplicacion me exporta valores a excel, pero en el caso de los numeros, me exporta con los siguientes patrones:
14.475,28 (o sea, numero normal)
333.21 (texto, ya que el . hace que excel lo considere texto)
333.21- (texto, con el signo - en la derecha en lugar de la izda y el . en lugar de ,)
13.321,44- (texto por el signo -)
Supongamos que cualquiera de estos datos esta en A1. Con la siguiente formula he conseguido que me los convierta en numeros normales:
=SI(ESERROR(ENCONTRAR("-";A3))=VERDADERO;SI(ESNUMERO(A3*1)úLSO;REEMPLAZAR(A3;ENCONTRAR(".";A3);1;",")*1;A3*1);SI(ESERROR(("-"&IZQUIERDA(A3;ENCONTRAR("-";A3)-1))*1)=VERDADERO;(IZQUIERDA("-"&REEMPLAZAR(A3;ENCONTRAR(".";A3);1;",");LARGO(A3)))*1;("-"&IZQUIERDA(A3;ENCONTRAR("-";A3)-1))*1))

... estoy intentando... una FUNCTION para... un complemento y que lo utilicen otras personas con esta misma formula pero ...
La verdad es que no tengo claro como utilizar formulas de excel dentro de VB. Os paso el codigo que he utilizado:
Function ImporteTransformar(NumeroRaro)
' Condicional 1: Existe el caracter "-"?
If "find("" - ""; NumeroRaro)" = True Then
' Condicional 2: Separa los decimales con "." en vez de ","?
If "iserror("" - "" & left(NumeroRaro; find("" - ""; NumeroRaro) - 1))*1 = True" Then
ImporteTransformar = "left("" - ""&replace(NumeroRaro; find("".""; NumeroRaro); 1; "",""); len(NumeroRaro))"
Else
ImporteTransformar = "(""-""&left(NumeroRaro; find(""-""; NumeroRaro) - 1)) * 1"
End If
Else
' Condicional 3: Sabiendo que "-" no existe, es un numero?
If "isnumber(NumeroRaro)" = True Then
ImporteTransformar = NumeroRaro * 1
Else
ImporteTransformar = "Replace(NumeroRaro; Find("".""; NumeroRaro); 1; "","") * 1"
End If
End If
End Function

... me estoy volviendo... loco. Seguramente sea un fallo en la sintaxis en la utilizacion de las formulas de excel dentro de VB...
Si has tenido la paciencia de leer hasta aqui, ya tienes todos mis agradecimientos!!!

Preguntas similares