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