繁体   English   中英

坡度功能无效的预选赛错误

[英]Invalid Qualifier error with Slope function

VBA的新手,对于一个应该计算两个数组的斜率并将其放置在具有给定地址的列中的代码,出现了此限定符错误。

到目前为止打败我,有一些帮助会很高兴! 数组的大小是匹配的。

编译错误在TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value内的TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value处给出。 .Slope TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value

Dim n As Long
Dim MyRange As Range
Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

For n = 3 To MyRange.Rows.Count

    TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value

Next n

End With
End Sub

在此之前的一个版本(直到该点之前都无法撤消:/)一直工作到停止并给出限定符错误为止。 我在数据集上使用了Excel的SLOPE函数,并进行了比较:它在#DIV / 0结果下给出了此错误(但VBA没有显示出来)。

如上所述,从斜率调用中删除.Value使其可以通过编译器。

否则,它似乎起作用。

此输入...

在此处输入图片说明

提供此输出...

在此处输入图片说明

使用此代码(稍作修改以获取正确的列)...

Sub main()
Dim n As Long
Dim MyRange As Range

Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

For n = 2 To MyRange.Rows.Count

    TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = _
        Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 1), TargetSheet.Cells(n, MyRange.Columns.Count)), _
        TargetSheet.Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(1, MyRange.Columns.Count)))

Next n

End Sub

下面是修改后的代码,以捕获仅存在1个Y值以避免被零除的情况。 假设工作表中的第1行在标题的右边没有任何内容。

Option Explicit

Sub main()
Dim n As Long
Dim MyRange As Range
Dim nRows As Long, nCols As Long, ColCount As Long

Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

nRows = MyRange.Rows.Count
nCols = MyRange.Rows(1).End(xlToRight)

For n = 2 To nRows

    ColCount = Application.CountIf(TargetSheet.Range(TargetSheet.Cells(n, 1), Sheet1.Cells(n, nCols)), """<>""""""")
    If ColCount > 1 Then
        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = _
            Application.Slope(TargetSheet.Range(TargetSheet.Cells(n, 1), TargetSheet.Cells(n, MyRange.Columns.Count)), _
            TargetSheet.Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(1, MyRange.Columns.Count)))
    End If
Next n

End Sub

谢谢@OldUgly! 设法修复错误。 使用VBA的原因:自动化多个相同格式的数据表,但编号不同。 列和行。

当只有一个数据点而一个数组的其余部分为空时,WorksheetFunction.Slope不喜欢它。

我创建了另一个循环,用于计算For循环中每一行的非空单元格。 如果没有。 对于特定行,非空单元格的<2小于2,则输出将为“数据不足”。

如果不是,则将计算斜率值。

解决此问题的另一种较为省力的方法是针对此特定情况简单地使用On Error Resume Next

Dim n As Long, o As Range, CurrentRow As Range, NonEmptyCellCountRow As Integer


For n = 3 To MyRange.Rows.Count `Within each row, counting non-empty cells

    Set CurrentRow = TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count))

    NonEmptyCellCountRow = 0

    For Each o In CurrentRow

        If o.Value <> "" Then NonEmptyCellCountRow = NonEmptyCellCountRow + 1

    Next o

    If NonEmptyCellCountRow < 2 Then _

        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1) = "Insufficient Data"

    Else

        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1) = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count)))

    End If

Next n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM