Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 范围上的Log10函数-类型13不匹配错误_Excel_Vba_Type Mismatch_Mismatch - Fatal编程技术网

Excel 范围上的Log10函数-类型13不匹配错误

Excel 范围上的Log10函数-类型13不匹配错误,excel,vba,type-mismatch,mismatch,Excel,Vba,Type Mismatch,Mismatch,我试图使用LinEst函数从一系列数据行中获取值,并将它们输入到一些标题下的新工作表中。我只想为特定数量的行(最多为定义为“c”的行数)执行此操作。我的VBA技能非常基本,我已经获得了生成以下代码的帮助 问题是,我想通过将log转换为数据的基数10来转换一系列数据(xrng和yrng)。但是,当我尝试使用Log10或WorksheetFunction.Log10函数时,它指定数据必须是double,如果我运行代码,就会出现类型不匹配错误 Option Explicit Sub Button7_

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

问题是,我想通过将log转换为数据的基数10来转换一系列数据(xrng和yrng)。但是,当我尝试使用Log10或WorksheetFunction.Log10函数时,它指定数据必须是double,如果我运行代码,就会出现类型不匹配错误

Option Explicit

Sub Button7_Click()

    Dim xrng As Range, yrng As Range, lxrng As Range, lyrng 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 c 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")
    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
    R = 1

    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 Value"
    dsws.Range("D1").Value = "k Value"
    dsws.Range("E1").Value = "R Value"

    Do While R < c
        Arr = Application.LogEst(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_单击()
变暗xrng为量程,长径为量程,长径为量程,短径为量程,短径为量程
暗降为射程
Dim Arr作为变量“LinEst结果数组”
变暗Rng As范围
变暗,变长
我和你一样长
暗k一样长
尺寸c与长度相同
变暗下行为图表,上行为图表,红隧为图表
将ws作为工作表,最小作为变量
将DSW设置为工作表
设置ws=工作表(“模板”)
Sheets.Add.Name=“下扫幂律”
设置dsws=工作表(“向下扫描幂律”)
设置Rng=ws.Range(ws.Range(“B11”)、ws.Range(“B11”)。结束(xlDown))
最小=工作表功能。小(Rng,1)
l=Rng.Find(what:=最小值,LookIn:=xlValues,LookAt:=xlWhole)。行
k=Rng.Rows.Count
c=l-10
R=1
设置xrng=ws.Range(“C11:CP11”)
设置yrng=ws.范围(“C201:CP201”)
设置下降=dsws.范围(“C2:CP2”).偏移量(0,-2)
dsws.Range(“A1”).Value=“(n-1)值”
dsws.Range(“B1”).Value=“log(k)Value”
dsws.Range(“C1”).Value=“n值”
dsws.Range(“D1”).Value=“k值”
dsws.Range(“E1”).Value=“R值”
R

任何帮助都将不胜感激。

未经测试

替换:

Arr = Application.LogEst(Log10(yrng), Log10(xrng), True, False)
与:


(可能需要进行其他更改。)

请尝试这段代码。由于明显的原因没有测试。我必须承认,我无法理解Drop
范围必须存在的位置。它的行必须为每个单元格迭代更新。查看
LogEst`函数定义,它接收一个类似于范围的参数。而不是Log10,它不能应用于范围…如果您需要对于每个范围单元格的对数值,必须进行初步范围处理

Sub testLog10()
 Dim ws As Worksheet, dsws As Worksheet, Arr As Variant, Drop As Range
  Set ws = ActiveSheet 'use here your sheet
  dsws = Worksheets("Your sheet") ' use here your sheet name
        Arr = Application.LogEst(ws.Range(ws.Cells(11, 3), ws.Cells(11, 94)), _
                                ws.Range(ws.Cells(201, 3), ws.Cells(201, 94)), True, False)
      Set Drop = dsws.Range("A2")
      Drop.Resize(1, UBound(Arr)).value = Arr
End Sub

您需要学习使用F1。在VBA IDE中,将光标放在Log10(属于WorksheetFunction.Log10)上,然后按F1。这将打开Log10函数的MS帮助页面(适用于任何VBA/Office关键字)。请查看描述Log10函数所采用输入的文本部分。然后,您将了解出现错误的原因。'Log10()`需要一个
Double
而不是一个范围…您希望函数使用什么?我无法推断,只有查看您的代码…您才能更好地解释(用文字)?
Arr=Application.LogEst(Log10(yrng)、Log10(xrng)、True、False)
对于这一行,我希望x和y输入是范围,但希望将log取为范围中每个值的基数10。然后,您必须在这两个范围的每个单元格之间进行迭代。我不能在这里向您展示,因为您将什么都不懂……我将仅针对这一部分尝试回答。您可能会侥幸逃脱
>Arr=ws.Evaluate(“LogEst(Log10(&yrng.address&)”,Log10(&xrng.address&“”,TRUE,FALSE)”)
谢谢你的代码。我仍然收到不匹配的错误。有没有办法获取范围内每个值的Log10?@Judoo123我刚刚注意到你没有向
Log10()传递一个值
函数。您需要某种类型的循环来处理
yrng
xrng
的每个元素。非常感谢!我现在已经在其他宏中使用了它。
Sub testLog10()
 Dim ws As Worksheet, dsws As Worksheet, Arr As Variant, Drop As Range
  Set ws = ActiveSheet 'use here your sheet
  dsws = Worksheets("Your sheet") ' use here your sheet name
        Arr = Application.LogEst(ws.Range(ws.Cells(11, 3), ws.Cells(11, 94)), _
                                ws.Range(ws.Cells(201, 3), ws.Cells(201, 94)), True, False)
      Set Drop = dsws.Range("A2")
      Drop.Resize(1, UBound(Arr)).value = Arr
End Sub