Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用LinEst函数并在可变长度的列中返回值_Excel_Vba_Worksheet Function - Fatal编程技术网

Excel 使用LinEst函数并在可变长度的列中返回值

Excel 使用LinEst函数并在可变长度的列中返回值,excel,vba,worksheet-function,Excel,Vba,Worksheet Function,我试图使用LinEst函数从一系列数据行中获取值,并将它们输入到一些标题下的新工作表中。我只想对特定数量的行(最多行数定义为“c”)执行此操作。我的VBA技能非常基本 Sub Button7_Click() Sheets.Add.Name = "Down Sweep Power Law" Dim xrng As Range, yrng As Range Dim i As Long Dim Rng As Range Dim l As Long Dim k As

我试图使用LinEst函数从一系列数据行中获取值,并将它们输入到一些标题下的新工作表中。我只想对特定数量的行(最多行数定义为“c”)执行此操作。我的VBA技能非常基本

Sub Button7_Click()

Sheets.Add.Name = "Down Sweep Power Law"

 Dim xrng As Range, yrng As Range
    Dim i As Long
    Dim Rng As Range
    Dim l As Long
    Dim k As Long
    Dim i2 As Long
    Dim c As Long
    Dim j As Long
    Dim drop As Range
    Dim drop2 As Range
    Dim DownSweep As Chart, UpSweep As Chart, cht As Chart
    Dim ws As Worksheet, smallest
    Dim dsws As Worksheet

    Set ws = Worksheets("Template") '<< use variables for worksheets!

    Set dsws = Worksheets("Down Sweep Power Law")

    Set Rng = ws.Range(ws.Range("B11"), ws.Range("B11").End(xlDown))

    smallest = WorksheetFunction.Small(Rng, 1)
    l = Rng.Find(what:=smallest, LookIn:=xlValues, lookat:=xlWhole).Row
    k = Rng.Rows.Count

    c = l - 10

    Set xrng = ws.Range("C11:CP11")
    Set yrng = ws.Range("C201:CP201")
    Set drop = dsws.Range("A2")
    Set x2rng = xrng.Offset(1, 0)
    Set y2rng = yrng.Offset(1, 0)
    Set drop2 = drop.Offset(1, 0)

dsws.Range("A1").Value = "(n-1) Value"
dsws.Range("B1").Value = "log(k) Value"
dsws.Range("C1").Value = "(n-1) Value"
dsws.Range("D1").Value = "n Value"
dsws.Range("E1").Value = "R Value"

If i < c Then

Set drop = Application.LinEst(Log10(yrng), Log10(xrng), True, False)

i = i + 1

End If

ITERATE:

If i < c Then

Set drop2 = Application.LinEst(Log10(y2rng), Log10(x2rng), True, False)

x2rng = x2rng.Offset(1, 0)
y2rng = y2rng.Offset(1, 0)
drop2 = drop2.Offset(1, 0)
i = i + 1
GoTo ITERATE

End If


End Sub


子按钮7\u单击()
Sheets.Add.Name=“下扫幂律”
Dim xrng As系列,yrng As系列
我想我会坚持多久
变暗Rng As范围
我和你一样长
暗k一样长
尺寸i2与长度相同
尺寸c与长度相同
Dim j尽可能长
暗降为射程
变暗下降2 As范围
变暗下行为图表,上行为图表,红隧为图表
将ws设置为工作表,最小
将DSW设置为工作表

Set ws=Worksheets(“Template”)”我认为您忽略了计划中的一个步骤。LinEst返回一个数组,您希望将该数组中的值分配给范围下拉列表。您不能将该数组直接分配给范围。请尝试此代码

Option Explicit

Sub Button7_Click()

    Dim xrng As Range, yrng As Range
    Dim Drop As Range
    Dim Arr As Variant                          ' LinEst result array
    Dim Rng As Range
    Dim R As Long
    Dim l As Long
    Dim k As Long
    Dim i2 As Long
    Dim c As Long
    Dim j As Long
    Dim DownSweep As Chart, UpSweep As Chart, cht As Chart
    Dim ws As Worksheet, Smallest As Variant
    Dim dsws As Worksheet

    Set ws = Worksheets("Template") '<< use variables for worksheets!
    Sheets.Add.Name = "Down Sweep Power Law"
    Set dsws = Worksheets("Down Sweep Power Law")
    Set Rng = ws.Range(ws.Range("B11"), ws.Range("B11").End(xlDown))

    Smallest = WorksheetFunction.Small(Rng, 1)
    l = Rng.Find(what:=Smallest, LookIn:=xlValues, LookAt:=xlWhole).Row
    k = Rng.Rows.Count
    c = l - 10

    Set xrng = ws.Range("C11:CP11")
    Set yrng = ws.Range("C201:CP201")
    Set Drop = dsws.Range("C2:CP2").Offset(0, -2)

    dsws.Range("A1").Value = "(n-1) Value"
    dsws.Range("B1").Value = "log(k) Value"
    dsws.Range("C1").Value = "(n-1) Value"
    dsws.Range("D1").Value = "n Value"
    dsws.Range("E1").Value = "R Value"

    Do While R < c
        Arr = Application.LinEst(Log10(yrng), Log10(xrng), True, False)
        Drop.Value = Arr    ' or perhaps: = Application.Transpose(Arr)
        Set xrng = xrng.Offset(1, 0)
        Set yrng = yrng.Offset(1, 0)
        Set Drop = Drop.Offset(1, 0)
        R = R + 1
    Loop
End Sub
选项显式
子按钮7_单击()
Dim xrng As系列,yrng As系列
暗降为射程
Dim Arr作为变量“LinEst结果数组”
变暗Rng As范围
变暗,变长
我和你一样长
暗k一样长
尺寸i2与长度相同
尺寸c与长度相同
Dim j尽可能长
变暗下行为图表,上行为图表,红隧为图表
将ws作为工作表,最小作为变量
将DSW设置为工作表

设置ws=Worksheets(“Template”)'尝试
drop=Application.LinEst(yrng,xrng,True,False)
谢谢!我有第一个值,但它没有循环并生成列表?我编辑了一段代码这很好!非常感谢。我正在努力在一个范围内执行LOG10函数,你有什么建议吗?LOG10()返回数字的以10为底的对数,而不是数组,当然也不是范围。
Log10(yrng)
-因为它显然不返回错误-应该使用
yrng.Cells(1).Value
并忽略所有其他值。如果您希望将
yrng
中的所有值转换为LOG10,我希望需要先进行转换,然后使用
Arr=Application.LinEst(yrng,xrng,True,False)
。我以前从未这样做过。我的智慧来自这里:。尝试一下这个公式,看看区别。