excel vba基础循环问题

excel vba基础循环问题,第1张

首先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 5

    If 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/,获取里面汇率的表)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9526958.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存