Excel输出循环结果到循环的每一行的新单元格
我不熟悉Excel宏,我正在尝试使用Countif函数来确定“字符串”在数组中出现的次数(c1:I100)。然后将此结果作为整数输出到单独工作表上的单元格中。我想在一个循环中计算7个不同的“字符串”,并将其输出到同一列中的一个新单元格,作为每个已计算的新“字符串”的第一个输出。这就是我所拥有的,它会导致excel在用第一个计数的字符串值填充所有输出单元格后冻结Excel输出循环结果到循环的每一行的新单元格,excel,vba,new-operator,Excel,Vba,New Operator,我不熟悉Excel宏,我正在尝试使用Countif函数来确定“字符串”在数组中出现的次数(c1:I100)。然后将此结果作为整数输出到单独工作表上的单元格中。我想在一个循环中计算7个不同的“字符串”,并将其输出到同一列中的一个新单元格,作为每个已计算的新“字符串”的第一个输出。这就是我所拥有的,它会导致excel在用第一个计数的字符串值填充所有输出单元格后冻结 Sub LayerIssue_CountIf() Dim SubRange As Range Dim Output1, Output2,
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编程中不需要使用太多的IFs。精选案例将是首选武器。但是如果结果可以在没有条件的情况下确定,那么效率会更高。此外,考虑使用数组而不是多个变量。 您的代码并不完全清楚您要在哪个基础上处理输出。但是,下面的过程确实说明了您应该采取的方法
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
在您的代码中,y=2,此后不会更改。因此,循环将永远持续下去。还要注意,只有
Output8
被声明为范围。默认情况下,同一行中的所有其他输出都声明为变量。我是否必须将输出列表放在括号中才能将它们全部定义为一个范围?我在哪里可以将y=2更改为y=y+1?没有办法。最好是每行声明一个变量。如果必须在一行中包含多个,则可以省略后续的Dim
,但必须声明每个数组的数据类型,如Dim Output1为Range,Output2为Range
,除非您使用该名称声明一个数组,如下所示。用y=y+1
更改y,或在For。。。下一个循环如下所示。在循环中,Next i
命令使计数器前进。谢谢您的代码。我不知道有这么多不同的命令。我已经干了一个星期了。我将能够从这段代码中学到很多东西。