Boredom drives me. Here are the macros I wrote:
Function circle_y(x1 As Double, x2 As Double, y2 As Double)
'Debug.Print "x1, x2, y2 = "; x1, x2, y2
circle_y = ((-x2 / y2) * x1 / 2) + ((y2 - ((-x2 / y2) * x2)) / 2)
'Debug.Print "circle_y = "; circle_y
End Function
Function distance(x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double
distance = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
End Function
Function radius(x0 As Double, y0 As Double, x1 As Double, y1 As Double, x2 As Double, y2 As Double)
Dim radius_pt1 As Double
Dim rotation_pt1 As Double
Dim theta_pt2 As Double
Dim radius_pt2 As Double
Dim newx2 As Double
Dim newy2 As Double
Debug.Print "********************************"
Debug.Print "dist 0-1 = "; distance(x0, y0, x1, y1)
Debug.Print "dist 1-2 = "; distance(x1, y1, x2, y2)
Debug.Print "dist 2-3 = "; distance(x2, y2, x0, y0)
x1 = x1 - x0
y1 = y1 - y0
x2 = x2 - x0
y2 = y2 - y0
rotation_pt1 = WorksheetFunction.Atan2(x1, y1)
Debug.Print "rotation = "; WorksheetFunction.Degrees(rotation_pt1)
radius_pt1 = distance(0, 0, x1, y1)
Debug.Print "radius_pt1 = "; radius_pt1
theta_pt2 = WorksheetFunction.Atan2(x2, y2)
radius_pt2 = distance(0, 0, x2, y2)
Debug.Print "theta_pt2 = "; WorksheetFunction.Degrees(theta_pt2)
newx2 = radius_pt2 * Cos(theta_pt2 - rotation_pt1)
newy2 = radius_pt2 * Sin(theta_pt2 - rotation_pt1)
Debug.Print "newx2, newy2 = "; newx2, newy2
radius = distance(0, 0, radius_pt1 / 2, circle_y(radius_pt1, newx2, newy2))
Debug.Print "circle_y = "; circle_y(radius_pt1, newx2, newy2)
Debug.Print "dist 0-1 = "; distance(0, 0, radius_pt1, 0)
Debug.Print "dist 1-2 = "; distance(radius_pt1, 0, newx2, newy2)
Debug.Print "dist 2-3 = "; distance(0, 0, newx2, newy2)
Debug.Print ""
Debug.Print "dist c-0 = "; distance(radius_pt1 / 2, circle_y(radius_pt1, newx2, newy2), 0, 0)
Debug.Print "dist c-1 = "; distance(radius_pt1 / 2, circle_y(radius_pt1, newx2, newy2), radius_pt1, 0)
Debug.Print "dist c-2 = "; distance(radius_pt1 / 2, circle_y(radius_pt1, newx2, newy2), newx2, newy2)
End Function
The main function is radius(), which takes 3 points as coordinate pairs. It translates the second and third points by the offset to the first so the first point is effectively at the origin. The second step is to take the angle and radius to the second point. It takes the distance and angle to the third point and uses the angle to the second point to rotate it to a new location.
The result is that one point is at the origin, the second point is on the x-axis, and the third point is moved to where it should be. Since the center of the circle will be on the vertical divider between the origin and the second point, one merely needs the intersection between that and the bisector of the segment from the origin to the third point. This is done with the function circle_y. As mentioned, the x coordinate is half-way to the second transformed point.
For this example I got 0.5374838499, limited to 10 places.
Obviously one can remove or comment out the debug.print statements. Thanks to C, numbering starts with 0.