Sub 计算()
Dim intreturn As Integer
intreturn = MsgBox("操作了吗", vbYesNo + vbQuestion, "提示")
If intreturn <> vbYes Then
Exit Sub
Else
End If
For Each sh In Sheets
sh.Select
For x = 1 To Range("a65536").End(xlUp).Row
If Range("R" & x).MergeArea.Rows.Count > 1 Then
s = Range("R" & x).MergeArea.Rows.Count
Range("R" & x) = "=SUMPRODUCT(" & Range("G" & x).Resize(s).Address(0) & "*" & Range("H" & x).Resize(s).Address(0) & ")/SUM(" & Range("G" & x).Resize(s).Address(0) & ")"
x = x + s - 1
End If
If Range("R" & x).MergeArea.Rows.Count = 1 And Range("R" & x).Interior.ColorIndex > 0 Then
Range("R" & x) = Range("H" & x)
End If
For x = 1 To Range("a65536").End(xlUp).Row
改成
For x = 1 To Range("d65536").End(xlUp).Row
就可以了,原因是A列数据只到259行为止,
所以x变量循环到259就结束了,下面的行都不会被处理。
其他代码除了乱一点,都没什么问题。