创建范围并将其另存为工作表中的命名范围

时间:2019-07-30 10:28:26

标签: excel vba

我想定义一个范围,该范围的名称可以在电子表格的公式中引用。此范围是动态的,因此需要使用宏进行定义。

我有一些根据测试结果手动添加的数据。随时间(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

1 个答案:

答案 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