Función Personalizada en Excel 2010

Experto.
Me ha parecido muy interesante el tema de crear sus propias funciones en Excel
pero manejo muy poco el tema de macros he intentado hacer funciones que
me resuma las siguientes fórmulas que te presento a continuación, pero
no he podido tener éxito.
=(SI(E19>=10;(SI(ESERROR(HALLAR(",";E19;1)-1);(REDONDEAR(EXTRAE(DECIMAL(E19;1);1;HALLAR(",";DECIMAL(E19;1);1)-1);(2-LARGO(EXTRAE(DECIMAL(E19;1);1;HALLAR(",";DECIMAL(E19;1);1)-1))
)));(REDONDEAR(EXTRAE(E19;1;HALLAR(",";E19;1)-1);(2-LARGO(EXTRAE(E19;1;HALLAR(",";E19;1)-1)))))));SI(Y(E19>=1;E19<10);DECIMAL(E19;1);SI(E19<1;(DECIMAL(E19;(MIN(ENCONTRAR({1;2;3;4;5;6;7;8;9};(SUSTITUIR(E19;"0";"POR"))&1234567890)))-(SI(DERECHA(DECIMAL(E19;(MIN(ENCONTRAR({1;2;3;4;5;6;7;8;9};(SUSTITUIR(E19;"0";"POR"))&1234567890)))-1);2)="00";2;1))));""))))*1
=REDONDEAR(D19;LARGO(I19)-SI(ESERROR(ENCONTRAR(",";I19));LARGO(I19);ENCONTRAR(",";I19)))
La primera es para realizar redondeo a dos cifras significativas.
La segunda es para reportar un dato dependiendo de las cifras significativas obtenidas en el resultado anterior.

He investigado un poco mas y llevo la macro para dar solución a la primera formula así:
public Function CIFRAS2(rCell As Variant, vAnswer As Variant) As String
Dim dDigits As Double
Dim iRoundDigits As Integer
Dim sFormatstring As String
If TypeName(vAnswer) = "Boolean" Then Exit Function
If vAnswer = "" Then Exit Function
iRoundDigits = CInt(Application.Max(1, vAnswer))
If IsNumeric(rCell) And rCell <> "" Then
sFormatstring = "0"
If rCell = 0 Then
dDigits = 3
Else
dDigits = Log(Abs(rCell)) / Log(10)
dDigits = -Int(dDigits) + iRoundDigits - 1
dDigits = Application.Min(Len(Abs(rCell)), dDigits)
End If
If dDigits >= 1 Then
If Int(rCell) = 0 Then
sFormatstring = sFormatstring & "." & String(dDigits, "0")
Else
sFormatstring = sFormatstring & "." & String(dDigits, "0")
End If
ElseIf dDigits < 0 Then
sFormatstring = sFormatstring & "." _
& String(iRoundDigits - 1, "0") & "E+00"
End If
CIFRAS2 = "±" & " " & Format(rCell, sFormatstring) & " " & "%"
End If
End Function

Pero por mas que lo intentado, cambiando la declaración de las variables de
texto a numero no he podido entregar al final de la macro un dato que se
pueda trabajar como numero para hacer operaciones con el.
Por favor me colaboran con esto.

Y en darme una guía para la segunda función

=REDONDEAR(D19;LARGO(I19)-SI(ESERROR(ENCONTRAR(",";I19));LARGO(I19);ENCONTRAR(",";I19)))

1 respuesta

Respuesta
1

Disculpa no entiendo bien a que te refieres con redondear a dos cifras significativas, me pregunto: ¿Si la cantidad es 10727 redondeado a dos cifras es 10? ¿Y si el valor es 1.77 dos cifras significativas es 1.7?.

La segunda pregunta la interpreto tan mal que me digo a mi mismo que esta no es necesaria ya que si la función anterior me convierte a 2 cifras significativas la respuesta de la segunda siempre va a ser 2, desde luego no creo que ese sea tu problema, lo que pasa es que no he entendido bien.

Muchas gracias por el interés
mostrado con el tema , te lo agradezco, las reglas son las siguientes ( en el
archivo adjunto se encuentran ejemplos):
MANEJO DE CIFRAS SIGNIFICATIVAS
Muchos resultados se obtienen por cálculo a partir de uno o varios valores experimentales
La veracidad del resultado no debe ser mayor ni menor que la veracidad de los valores
experimentales de los que proviene Los resultados y Los datos deben expresarse con el adecuado número de cifras significativas
Cifras significativas son los dígitos necesarios para expresar la incertidumbre de la
medida. Incluyen todas las cifras ciertas y la primera incierta
Si un valor experimental se expresa sin intervalo de confianza, se supone implícitamente
que sólo la última cifra es incierta en ± 1 unidad
Los números que proceden de conteo, o los factores de conversión entre sistemas de unidades, no tienen incertidumbre, o tienen certeza infinita
No son significativos: los ceros a la izquierda, los exponentes de los números exponenciales, ni la característica de los logaritmos. Los ceros en medio de un número, o los que están a la derecha sí que son significativos.
Las reglas básicas de manejo de cifras significativas en cálculos son:
1) El resultado solo debería tener una cifra incierta
2) Las cifras sobrantes se eliminan por redondeo a cinco:
2.1) Si la siguiente a la última a conservar es menor de cinco, la última no se altera
2.2) Si la siguiente a la última a conservar es mayor de cinco, la última se aumenta una unidad
2.3) Si la siguiente a la última a conservar es cinco, y después no hay nada o solo hay ceros, la última se aumenta en una unidad cuando es impar, y se deja como está cuando es par
3) En sumas y restas se conserva en el resultado, el número de decimales del término que menos decimales tenga
4) En multiplicaciones y divisiones se conserva en el resultado, el número de cifras necesario de manera que la precisión relativa del resultado sea igual (del orden) que la del término que menor precisión relativa tenga
5) En otras operaciones se siguen las reglas de propagación de errores (de las que las dos anteriores son casos concretos)
LA NORMA GENERAL
A SEGUIR ES: LA CERTEZA DEL RESULTADO FINAL DE UN CÁLCULO DEBE SER IGUAL (O DEL MISMO ORDEN) QUE LA DEL TÉRMINO PARTICIPANTE DE MENOR CERTEZA

Muchas gracias por la colaboración que
me puedas prestar

Como te puedo enviar el archivo donde tengo lo que he realizado.

De nuevo muchas gracias por tu interes.

Victor Manuel.

No llego ningún archivo adjunto. Te envío mi correo.

Saludo Cordial

Experto.

Muchas gracias por el interés mostrado por colaborarme, por otro lado ya te envíe los archivos con los que he estado trabajando a el correo que me indicaste.

Quedo atento a cualquier solicitud o comentario.

Att.

Víctor Manuel.

Me da pena no haberte ayudado pero por mas que he echo no entiendo tu definición de cifras significativas, sin embargo al leer con detenimiento tu problema dices:

... Pero por mas que lo intentado, cambiando la declaración de las variables de texto a numero no he podido entregar al final de la macro un dato que se pueda trabajar como numero para hacer operaciones con el...

Y me pregunto. ¿Ya intentaste cambiar el tipo de la función?

En lugar de :

public Function CIFRAS2(rCell As Variant, vAnswer As Variant) As String

usar:

public Function CIFRAS2(rCell As Variant, vAnswer As Variant) As Double

o

public Function CIFRAS2(rCell As Variant, vAnswer As Variant) As Variant

Disculpa por no contestarte antes, he estado por fuera y había ingresado a la pagina.

por otro lado, escribo para agradecerte por ese gran aporte y por tu disposición para dar solución a mi pregunta.

Aunque con lo ultimo aporte no logre todo lo esperado, me sirvió mucho para al menos tener el numero en un formato que me permitió realizar cálculos con el resultado de esta función personalizada.

Vmsanchez.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas