Dim semieje_mayor,semieje_menor,excentricidad,segunda_excentricidad
Dim excentricidad_cuadrada, radio_polar_de_curvatura, Pi
Dim coororiX,coordoriY, Coord_sin_retranqueo_X, Coord_sin_retranqueo_Y,USO, meridiano_central, Longitud, Latitud
'GE trabaja con WGS84. En caso de usar otros elipsoides cambiar�amos los dos valores siguientes
semieje_mayor=6378137
semieje_menor=6356752.314
coordoriX=Inputbox("Introduce el valor X UTM","Conversor UTM2Geographics",435157.59)
coordoriY=Inputbox("Introduce el valor Y UTM","Conversor UTM2Geographics",4815453.64)
USO=Inputbox("Introduce el uso al que pertenece el punto","Conversor UTM2Geogr�ficas",30)
Pi=3.14159265358979323846

Call calculos_sobre_el_elipsoide(semieje_mayor,semieje_menor)
Call calculos_previos(coordoriX,coordoriY,USO)
Call UTM2Geographics(Coord_sin_retranqueo_X,Coord_sin_retranqueo_Y)

msgbox "Longitud: "&Longitud
msgbox "Latitud: "&Latitud

Function calculos_sobre_el_elipsoide(semieje_mayor,semieje_menor)
	excentricidad=sqr(semieje_mayor*semieje_mayor-semieje_menor*semieje_menor)/semieje_mayor
	segunda_excentricidad=sqr(semieje_mayor*semieje_mayor-semieje_menor*semieje_menor)/semieje_menor
	excentricidad_cuadrada=segunda_excentricidad*segunda_excentricidad
	radio_polar_de_curvatura=semieje_mayor*semieje_mayor/semieje_menor
End Function

Function calculos_previos(coordoriX,coordoriY, USO)
	'Eliminamos el retranque de las abcisas del eje X
	Coord_sin_retranqueo_X=coordoriX-500000
	Coord_sin_retranqueo_Y=coordoriY
	'De tratarse de coordenadas del hemisferio sur sustituiriamos por: Coord_sin_retranqueo_Y=coordoriY-10000000
End Function

Function UTM2Geographics(Coord_sin_retranqueo_X,Coord_sin_retranqueo_Y)
	'Aplicamos las ecuaciones de Cotichia-Surace
	meridiano_central=6*USO-183
	Dim Phi
	Phi=Coord_sin_retranqueo_Y/(6366197.724*0.9996)
	Dim v
	v=(radio_polar_de_curvatura*0.9996)/Sqr(1+excentricidad_cuadrada*cos(phi)*cos(phi))
	Dim a
	a=Coord_sin_retranqueo_X/v
	Dim A1
	A1=sin(2*Phi)
	Dim A2
	A2=A1*cos(phi)*cos(phi)
	Dim J2
	J2=Phi+(A1/2)
	Dim J4
	J4=(3*J2+A2)/4
	Dim J6
	J6=(5*J4+A2*cos(Phi)*cos(Phi))/3
	Dim Alfa
	Alfa=3*excentricidad_cuadrada/4
	Dim Beta
	Beta=5*Alfa*Alfa/3
	Dim Gamma
	Gamma=35*Alfa*Alfa*Alfa/27
	Dim Besubfi
	Besubfi=0.9996*radio_polar_de_curvatura*(phi-Alfa*J2+Beta*J4-Gamma*J6)
	Dim b
	b=(Coord_sin_retranqueo_Y-Besubfi)/v
	Dim Zeta
	Zeta=excentricidad_cuadrada*a*a*cos(phi)*cos(phi)/2
	Dim Xi
	Xi=a-a*Zeta/3
	Dim eta
	eta=b*(1-eta)+phi
	Dim variable1
	variable1=(exp(Xi)-exp(-Xi))/2
	Dim variable2
	variable2=Atn(variable1/cos(eta))
	Dim Tao
	Tao=Atn(cos(variable2)*tan(eta))
	Longitud=(variable2*180/Pi)+meridiano_central
	Latitud=(Phi+(1+excentricidad_cuadrada*cos(Phi)*cos(Phi)-((3*excentricidad_cuadrada*sin(Phi)*cos(Phi)/2)*(Tao-Phi)))*(Tao-Phi))*180/Pi
End function