【发布时间】:2017-02-18 11:22:56
【问题描述】:
Please look at my sample data and code to understand what I'm trying to do.
我需要使用 Cells(, 3) 的值来定义填充 Trialnumber(18) 数组的范围。我需要该数组遍历 For 循环,计算每个试验的 H 列中的填充单元格,并将计数打印到每个试验的最后一行中的 T 列。将来我还需要该数组进行进一步的数据分析(除非有人能提出更好的解决方案)。
目前我正在试验 3 个代码模块,试图获得所需的解决方案。
模块 2 是唯一没有错误的模块,它在右侧单元格中打印值,但它正在打印填充的单元格总数 (562),而不是每次试验(预期值 = 1 或 2)。
模块一如下:
Sub dotcountanalysis()
Dim startpoint As Long
startpoint = 1
Dim lastrow As Long
lastrow = Cells(Rows.Count, 3).End(xlUp).Row
Dim i As Long
With Worksheets("full test")
For i = 1 To 18
For n = startpoint To lastrow + 1
If Cells(n, 3).Value <> "Trial, " & CStr(i) Then
Dim nMinusOne As Long
nMinusOne = n - 1
Dim trialCount As Long
'Set Trialnumber(i-1) = Range(cells(startpoint, 3), cells(n-1, 3))
trialCount = Application.WorksheetFunction.CountA(Range("H" & CStr(startpoint) & ":" & "H" & CStr(nMinusOne)))
Range("T" & CStr(startpoint) & ":" & "T" & CStr(nMinusOne)).Value = trialCount
startpoint = n
Exit For
End If
Next n
Next i
End With
End Sub
返回“方法_range of object _global falied”在线错误:trialCount = Application.WorksheetFunction.CountA(Range("H" & CStr(startpoint) & ":" & "H" & CStr(nMinusOne)))
模块3如下:
Sub dotcountanalysis3()
Dim pressedCount As Long
Dim myCell As Range
Dim pressedRange As Range
'create trials array
Dim t(18) As Range
'set range for trialnumber (t)
Dim startpoint As Long
startpoint = 1
Dim lastrow As Long
lastrow = Cells(Rows.Count, 3).End(xlUp).Row
For i = 1 To 18
For n = startpoint To lastrow
startpoint = 7
If Cells(n, 3).Value <> "Trial, " & CStr(i) Then
Set t(i - 1) = Range(Cells(startpoint, 3), Cells(n, 3))
n = n + 1
startpoint = n
Exit For
End If
Next n
Next i
'count presses in each trial
With Worksheets("full test")
For i = 0 To 17
pressedCount = Application.WorksheetFunction.CountA _
(.Range(.Cells(t(), "H"), .Cells(.Rows.Count, "H")))
If pressedCount = 0 Then Exit Sub
'make sure there are cells or else the next line will fail
Set pressedRange = .Columns("H").SpecialCells(xlCellTypeConstants)
For Each myCell In pressedRange.Cells
'only loop through the cells containing something
.Cells(myCell.Row, "T").Value = pressedCount
Next myCell
Next i
End With
End Sub
它在线返回一个运行时“类型不匹配”错误:pressedCount = Application.WorksheetFunction.CountA _
(.Range(.Cells(t(), "H"), .Cells(.Rows.Count, "H")))
编辑:我已经更新了 mod 3 中的代码并更新了错误。
【问题讨论】:
-
第一个错误:n =1 第一次通过,所以
nMinusOne为零,并且没有第 0 行 -
第二个错误是同样的问题。
-
@TimWilliams 设置 startpoint = 7 (数据开始的行)还是只为我的数组使用基数 1 会更好吗?
-
似乎每个试验都有多个块 - 是否要单独总结?按块细分?
-
“块”是指 ColB“块名称”