我正在使用VBA函数,该函数读取另一个工作表的第11行并在该行中找到最小值。
但是,最小值的绝对值必须小于100。(该行同时显示百分比和常规值,我只需要最小值。)
这是我到目前为止的内容:(它只返回了零值)
public function up()
{
Schema::table('users', function($table) {
$table->foreign('department')
->references('name')
->on('teams')
->onUpdate('cascade')
// ->onDelete('set null');
});
}
答案 0 :(得分:0)
以下各项的组合:
min = 0
和:
If (ActiveSheet.Cells(11, Colcount) > min) And Abs(ActiveSheet.Cells(11, Colcount) <= 100) Then
看起来它将发现数据的 maximum 值在0到100之间。如果最大数据值小于0,则看起来将返回0。
在比较的右侧部分存在一个更细微的错误:
Abs(ActiveSheet.Cells(11, Colcount) <= 100)
从问题叙述中我们知道,您希望此子句对于-100至100(含)之间的单元格值返回True,否则返回False。对于小于或等于100的单元格值,它实际上返回True,否则返回False-因此,例如,-198的单元格值会使此子句返回True。
此子句应该说的是:
Abs(ActiveSheet.Cells(11, Colcount)) <= 100
我们需要获取单元格的绝对值,然后将其与100进行比较。之前,我们将单元格的原始值与100(这将导致True或False)进行比较,然后获取True的绝对值或False(不做任何更改-True保持True,False保持False)。
要找到数据的最小值,则min
必须从100开始,比较值必须为.Cells(11, Colcount) < min
。
将所有这些内容与bobajob和我的评论中的建议一起提供给我们:
Option Explicit
Function Loss(worksheet1 As Worksheet) As Double
Dim min As Double
Dim i As Integer
Dim myRight As Long, Colcount As Long
min = 100
With worksheet1
myRight = .Cells(1, .Columns.Count).End(xlToLeft).Column
On Error GoTo err_handler
For Colcount = 1 To myRight
If (.Cells(11, Colcount).Value < min) And (Abs(.Cells(11, Colcount).Value) <= 100) Then
min = .Cells(11, Colcount).Value
End If
Next Colcount
On Error GoTo 0
End With
Loss = min
Exit Function
err_handler:
Select Case Err.Number
' Type mismatch
Case 13:
With worksheet1.Cells(11, Colcount)
MsgBox "Error in column " & Colcount & "; with value " & .Value & "; of type " & TypeName(.Value)
End With
' Stop running the macro
Stop
' For all other errors, just stop
Case Else:
' Stop running the macro
Stop
End Select
End Function
其他说明:
Value
属性。
尽管Value
是Range对象的默认属性,但我更喜欢
指定要显式访问的属性myRight
,但随后读取了数据
从第11行起Long
更改为Double
匹配min
的数据类型