excel - Excel 将循环结果输出到带有循环的每一行的新单元格
问题描述
我是 Excel 宏的新手,我正在尝试使用 Countif 函数来确定“字符串”在数组 (c1:I100) 中出现的次数。然后将此结果作为整数输出到单独工作表上的单元格中。我想在一个循环中计算 7 个不同的“字符串”,并输出到与每个新“字符串”的第一个输出相同的列中的一个新单元格。这就是我所拥有的,它在用第一个计数的字符串值填充所有输出单元格后导致 excel 冻结。
Sub LayerIssue_CountIf()
Dim SubRange As Range
Dim Output1, Output2, Output3, Output4, Output5, Output6, Output7, Output8 As Range
Dim Lookupname As String
Set SubRange = Range("C1:I100")
Set Output1 = Sheet4.Range("C2")
Set Output2 = Sheet4.Range("C3")
Set Output3 = Sheet4.Range("C4")
Set Output4 = Sheet4.Range("C5")
Set Output5 = Sheet4.Range("C6")
Set Output6 = Sheet4.Range("C7")
Set Output7 = Sheet4.Range("C8")
Set Output8 = Sheet4.Range("C9")
y = 2
Do While y = 2
If Cells(y, 3) = "" Then
Lookupname = "Jans .5"
Output1 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 3 Then
Lookupname = "Jans .4"
Output2 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 4 Then
Lookupname = "Jans .3"
Output3 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 5 Then
Lookupname = "Jans .2"
Output4 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 6 Then
Lookupname = "Jans .1"
Output5 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 7 Then
Lookupname = "Jans .05"
Output6 = WorksheetFunction.CountIf(SubRange, Lookupname)
ElseIf y = 8 Then
Lookupname = "Jans .01"
Output7 = WorksheetFunction.CountIf(SubRange, Lookupname)
End If
Loop
End Sub
解决方案
在 VBA 编程中使用的 IF 并不多。Select Case将是首选武器。但是如果可以在没有条件的情况下确定结果,效率会更高。此外,请考虑使用数组而不是多个变量。
您的代码并不完全清楚您要对输出做什么。但是,下面的过程确实显示了您应该采取的方法。
Option Explicit
Sub LayerIssue_CountIf()
Dim SubRange As Range
Dim Output(1 To 7) As Long
Dim LookupName() As Variant
Dim i As Long ' loop counter: Output index
' The array will be 0-based. To match Output() 0 is added and left unused.
LookupName = Array(0, 0.5, 0.4, 0.3, 0.2, 0.1, 0.05, 0.01)
Set SubRange = Range("C2:I100")
' count from 1 to 7
For i = LBound(Output) To UBound(Output)
Output(i) = WorksheetFunction.CountIf(SubRange, "Jans " & Format(LookupName(i), ".0#"))
Next i
' cell C3 is included in SubRange. Not sure you want to write there.
With Cells(2, "B")
If .Value = "" Then
.Resize(UBound(Output), 1).Value = Application.Transpose(Output)
End If
End With
End Sub
推荐阅读
- java - BroadCastReceiver 未从 ActivityRecognitionService 接收
- python-3.x - 检查字符串中的第一个字符是否等于最后一个字符
- spring-boot - JaVers 为自定义列表差异提供了不正确的结果
- python - 如何比较基于特征选择回归的算法和基于树的算法?
- android - Android Studio 矢量资源失真
- java - 如何在后台使用 powershell 运行 java 类?
- c# - 为什么我的游戏对象没有被拖动和捕捉?
- sql-server - T-SQL OPENXML 查询中缺少元素
- dictionary - 如何安全地允许当前访问嵌套地图?
- python - 安装 python 模块,以便我可以在任何地方使用它