
首先n = Cells(2, i)之前必须给i赋值(其实这一步可省略),再者For i = 17 To 5 逆向循环必须指定步序(省略默认为正向1)
Sub lalala()
Dim i As Integer
For i = 17 To 5 step -1
If Cells(2, i) > Cells(2, 4) Then
Cells(5, 1) = Cells(1, i)
Exit For
End If
Next i
End Sub
经分析,汇率表的数据地址为>
程序如下图:
代码部分:
Option Explicit
Sub 宏1()
Dim arr1 '数组1:原始数据
Dim arr2 '数组2:结果数据
Dim i
'!!!特别注意,下面两行获取数组范围的语句要求数据在单独的表,或者有空白分开,如果实际情况与帖子图不同需要修改!!!
arr1 = ActiveSheetRange("a1")CurrentRegion
arr2 = ActiveSheetRange("k4")CurrentRegionResize(, 2) 'K4下面的班级要事先列出,或者另外写循环获取
For i = 1 To UBound(arr2) '班级循环
arr2(i, 2) = 评价一个班(arr1, arr2(i, 1))
Next i
'保存结果
ActiveSheetRange("k4")Resize(UBound(arr2), UBound(arr2, 2)) = arr2
End Sub
'评价一个班:arr1为原始数据,bj为班级名称
Function 评价一个班(arr1, bj) As String
Dim km(1 To 6) '单个科目的统计数据,1及格人数,2、3及格人员的最低分、最高分,4、5、6分别前三个及格人员的成绩和姓名
Dim i&, j&, k&, s$ '临时变量i、j、k,s为结果文本
For j = 3 To UBound(arr1, 2) '每个科目循环
'初始化中间变量
For k = 1 To UBound(km)
km(k) = Empty
Next k
km(2) = 999999
For i = 3 To UBound(arr1) '每个学生循环
If arr1(i, 1) = bj Or arr1(i, 1) & ":" = bj Then '只看 bj 班
If arr1(i, j) >= arr1(2, j) Then '及格
km(1) = km(1) + 1 '及格人数
If km(2) > arr1(i, j) Then km(2) = arr1(i, j) '最低分
If km(3) < arr1(i, j) Then km(3) = arr1(i, j) '最高分
If km(1) <= 3 Then '前三个
km(3 + km(1)) = arr1(i, 2) & "成绩" & arr1(i, j)
End If
End If
End If
Next i
Select Case km(1)
Case 0:
Case 1: s = s & arr1(1, j) & "有1人达标," & km(4) & ";"
Case 2: s = s & arr1(1, j) & "有2人达标," & km(4) & "、" & km(5) & ";"
Case 3: s = s & arr1(1, j) & "有3人达标," & km(4) & "、" & km(5) & "、" & km(6) & ";"
Case Else: s = s & arr1(1, j) & "有" & km(1) & "人达标,成绩在" & km(2) & "-" & km(3) & ";"
End Select
Next j
评价一个班 = s
End Function
测试数据:
执行结果:
明明只有一行数据,为什么要for i=0 to 5添加6行呢?
如果是考虑可能有最多有6行数据,那么for循环里面应该有一个if判定,判定A列i行是否为空,也就是代码为:
For i = 0 To 5If Cells(i + 5, 1)<>"" Then
Cells(x + i, 1)ReSize(1, 2) = Array([c3], [k3])
Cells(x + i, 3)ReSize(1, 10) = Cells(i + 5, 1)ReSize(1, 10)
End If
Next i
另外,你的一块赋值语句我合并为两行了,希望你能理解。
Sheets("sheet1")Activate '表示sheet1处于激活状态
Dim mytel As String
Dim i As Long
Dim rn As Range
With ActiveSheetUsedRange
mytel = TextBox1Text '把文本框1的内容给变量mytel
For i = 1 To [A65536]End(xlUp)Row '查询整张表格sheet1
Set rn = CellsFind(what:="" & "mytel" & "", LookAt:=xlPart) 'find的内容
If Not rn Is Nothing Then
firstAddress = rnAddress
Do
msgbox rnValue '显示找到的单元格值
Set rn = FindNext(rn) '找下一个
Loop While Not rn Is Nothing And rnAddress <> firstAddress '直到一个轮回
End If
代码参考
Excel VBA中for循环语句是怎样用的?下面我们来看一下。
01我们先创建一个空的函数。
02在函数体里,就可以创建一个for循环了,使用For Next的结构,其中J变量就是定义的循环次数,从1到20,则表示循环20次。
03循环做什么 *** 作呢?可以在for里写上对应的逻辑,这里就是设置单元格(Cells)的值。
04我们执行这个函数,看下效果。
05可以看到在B列里的前20个单元格,都设置值了。为什么是B列,因为Cells函数是第二个参数是2,就是第二列。
以上就是关于excel vba基础循环问题全部的内容,包括:excel vba基础循环问题、电子表格中VBA代码如何用for循环获取列区域值、如何用VBA获取网页异步数据(网址http://www.huilv.cc/,获取里面汇率的表)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)