我想定义一个范围,该范围的名称可以在电子表格的公式中引用。此范围是动态的,因此需要使用宏进行定义。
我有一些根据测试结果手动添加的数据。随时间(x轴)的深度(y轴)。这意味着某些行不会填充深度。 然后,我想自动计算最适合数据的指数曲线。我使用以下公式来执行此操作以获取图函数的组件:
=EXP(INDEX(LINEST(LN(Yvalues),"Xvalues"),1,2))
=INDEX(LINEST(LN(Yvalues, "Xvalues"), 1)
如果数据包含任何0值,则此公式无效。
我有一些动态代码,可以创建数据副本,而没有没有y值的行。这将使用手动输入的数据进行更新,这意味着行数也会更改。
我不知何故需要定义一个动态范围,该范围始终与可以在上述公式中引用的汇总数据相同。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("B2:C23").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("B26:C27"), _
CopyToRange:=Range("E2:F23"), _
Unique:=False
End Sub`
编辑:
这是我开始编写以完成上述操作的代码,但我知道要使它真正起作用将花费我很长时间。
Sub Sorting_x()
Dim Xlong As Range
Dim Xshort As Range
Set Xlong = Range("E3:E23")
Dim i As Integer
i = 1
Dim myRangeNamex As String
myRangeNamex = "Xshort"
For i = 1 To 23
If Xlong.Range.Cells(i, 1) > 0 Then
Set Xshort.Range.Cells(i, 1) = Union(Xshort, Xlong.Range.Cells(i, 1))
End If
Next i
ThisWorkbook.Names.Add Name:=mRangeNamex, RefersTo:=Xshort
End Sub
答案 0 :(得分:0)
也许是这样。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, rX As Range, rY As Range
Range("B2:C23").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("B26:C27"), _
CopyToRange:=Range("E2"), _
Unique:=False
Set r = Range("E3", Range("F" & Rows.Count).End(xlUp)) 'omit header
Set rX = r.Columns(1)
Set rY = r.Columns(2)
Range("A1").Formula = "=EXP(INDEX(LINEST(LN(" & rY.address & ")," & rX.address & "),1,2))"
Range("A2").Formula = "=INDEX(LINEST(LN(" & rY.address & ", " & rX.address & "), 1)"
End Sub