EXCEL VBA测量平差程序编写9—角度平差
1、已将观测角度、起始边、终边方位角,边长输入到计算表格中,具体看查看我的其他几篇经验。

2、编写以下程序,计算角度闭合差并进行角度平差。
Sub jisuan5f()
Dim cfwj As Double
Dim fb As Double
Dim n As Integer
n = ThisWorkbook.Worksheets("sheet1").Range("v8").Value
Dim sf As String, rf As Range
sf = ThisWorkbook.Worksheets("sheet1").Cells(5, 8).Value
sf = Angle(sf)
Dim ef As String
ef = ThisWorkbook.Worksheets("sheet1").Cells(5 + n * 2, 8).Value
ef = Angle(ef)
Dim cjsum As String
cjsum = ThisWorkbook.Worksheets("sheet1").Range("v10").Value
cjsum = Angle(cjsum)
cfwj = Val(sf) + Val(cjsum) - n * 180
If cfwj < 0 Then
cfwj = cfwj + 360
End If
ThisWorkbook.Worksheets("sheet1").Range("v12").Value = dfm2(cfwj)
fb = cfwj - Val(ef)
ThisWorkbook.Worksheets("sheet1").Range("v14").Value = fb '角度闭合差
Dim a, b, c As Integer
Dim pfb As Double
pfb = Round(fb * 3600) '角度闭合差
a = pfb \ n '平分给各站
b = pfb - a * n '余数
If b Mod 2 = 0 Then
c = b / 2
Else
c = (b - 1) / 2
End If
Dim d As Integer
d = ThisWorkbook.Worksheets("sheet1").Range("v18").Value
Dim i As Integer
Dim nRow As Integer
nRow = 6
For i = 1 To n
ThisWorkbook.Worksheets("sheet1").Cells(nRow, 4).Value = -a
nRow = nRow + 2
Next
Dim e As Integer
e = pfb - a * n
Dim f As Integer
nRow = 6
For i = 1 To Abs(e)
f = ThisWorkbook.Worksheets("sheet1").Cells(nRow, 4).Value
ThisWorkbook.Worksheets("sheet1").Cells(nRow, 4).Value = f - e / Abs(e)
nRow = nRow + 2
Next
End Sub
3、计算角度闭合差,具体程序如下:

4、将角度闭合差分配给各个测站,如果不能平均分,计算出余数。

5、选出外业测量时边长最短的边,短边的测量误差较大,把余数分配给短边。

6、运行程序,程序计算出角度闭合差,并分配到各观测站进行平差,如图所示。

7、如果认为分配的不合适,可手动进行调整。