Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4105|回复: 11

[已解决]VBA 中,我想让一个FOR循环从下标循环到上标,请问有什么好的办法?

[复制链接]
发表于 2015-8-9 22:28 | 显示全部楼层 |阅读模式
本帖最后由 chulia_wong 于 2015-8-9 22:40 编辑

For i = UBound(arr) To 1 Step -1
这个办法是把步长减1,但是这样一来就格式对不上了.就会少算一格.
For i = UBound(arr) To  lBOUND  ,这样写又不运行,请高手帮忙指点下,谢谢!
最佳答案
2015-8-10 09:13
Sub cc()
    Dim i%, j%, t%, arr, rng()
    arr = Sheets("sheet1").Range("b1:j25")                    '这里的数组区域来是是B2:B25区域.!'
    ReDim brr(1 To UBound(arr, 1), 1 To 9)   '创建数组'

     Sheet1.[n1:v25] = ""
    Sheet1.[n1:v25].Interior.ColorIndex = 0
    Sheet1.[n1:v25].Font.ColorIndex = 15
    Sheet1.[n1:v25].Font.Bold = False
    'arr = Range("b2:b" & [b65536].End(3).Row)
    j = 1
    For t = 1 To UBound(brr, 2)
        For i = UBound(arr) To 2 Step -1   '--' 就是这一句,如何让循环从25单元格循环到2单元格!
            If arr(i, t) = "" Then
                brr(i, t) = j
                j = j + 1
            Else
                brr(i, t) = Right(j - 1, 1)
                Cells(i, arr(i, t) + 13).Interior.ColorIndex = 3
                Cells(i, arr(i, t) + 13).Font.ColorIndex = 2         ''颜色
                Cells(i, arr(i, t) + 13).Font.Bold = True
                j = 1
                'Exit For
                ' MsgBox arr(i, t)
            End If
        Next
        j = 1
    Next
    Sheets("sheet1").[n1].Resize(UBound(brr, 1), UBound(brr, 2)) = brr         '这里的N1本来我是想改成N2的!'
End Sub

循环上标和下标问题2.rar (10.39 KB, 下载次数: 3)

循环上标和下标问题.rar

11.99 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-8-9 22:58 | 显示全部楼层
回复

使用道具 举报

发表于 2015-8-9 22:59 | 显示全部楼层
没看明白,建议用文字说明题意。
黄色这句直接改为2,是这意思吗?

Sub cc()
    Dim i%, j%, t%, arr, rng()
    arr = Sheets("sheet1").Range("b1:j25")                    '这里的数组区域来是是B2:B25区域.!'
    ReDim brr(1 To UBound(arr, 1), 1 To 9)   '创建数组'
    Sheet1.[n1:v25].Interior.ColorIndex = 0
    Sheet1.[n1:v25].Font.ColorIndex = 15
    Sheet1.[n1:v25].Font.Bold = False
    'arr = Range("b2:b" & [b65536].End(3).Row)
    j = 1
    For t = 1 To UBound(brr, 2)
        For i = UBound(arr) To 2 Step -1   '--' 就是这一句,如何让循环从25单元格循环到2单元格!
            If arr(i, t) = "" Then
                brr(i, t) = j
                j = j + 1
            Else
                brr(i, t) = Right(j - 1, 1)
                Cells(i, arr(i, t) + 13).Interior.ColorIndex = 3
                Cells(i, arr(i, t) + 13).Font.ColorIndex = 2         ''颜色
                Cells(i, arr(i, t) + 13).Font.Bold = True
                j = 1
                'Exit For
                ' MsgBox arr(i, t)
            End If
        Next
        j = 1
    Next
    Sheets("sheet1").[n1].Resize(UBound(brr, 1), UBound(brr, 2)) = brr         '这里的N1本来我是想改成N2的!'
End Sub



回复

使用道具 举报

 楼主| 发表于 2015-8-9 23:14 | 显示全部楼层
爱疯 发表于 2015-8-9 22:59
没看明白,建议用文字说明题意。
黄色这句直接改为2,是这意思吗?

是说ARR数组循环的每个维度是从B25到B2为止,就是从下往上反过来对单元格执行!
回复

使用道具 举报

发表于 2015-8-9 23:16 | 显示全部楼层
是要这样?
For i = UBound(arr) To LBound(arr)

还是这样?
For i = UBound(arr) To LBound(arr) + 1


回复

使用道具 举报

 楼主| 发表于 2015-8-9 23:20 | 显示全部楼层
爱疯 发表于 2015-8-9 23:16
是要这样?
For i = UBound(arr) To LBound(arr)

For i = UBound(arr) To LBound(arr)
就是这句的意思.但是这句加上去以后不运行,也不提示错误.不知道怎么回事!
回复

使用道具 举报

发表于 2015-8-9 23:34 | 显示全部楼层
QQ截图20150809232448.jpg

建议用文字说明一下目的,以便理解题意。
回复

使用道具 举报

 楼主| 发表于 2015-8-9 23:46 | 显示全部楼层
爱疯 发表于 2015-8-9 23:34
建议用文字说明一下目的,以便理解题意。

Sub cc()
    Dim i%, j%, t%, arr, rng()
  arr = Sheets("sheet1").Range("b2:j25")                    '这里的数组区域来是是B2:B25区域.!'
    ReDim brr(1 To UBound(arr, 1), 1 To 9)   '创建数组'
    Sheet1.[n1:v25].Interior.ColorIndex = 0
    Sheet1.[n1:v25].Font.ColorIndex = 15
    Sheet1.[n1:v25].Font.Bold = False
    'arr = Range("b2:b" & [b65536].End(3).Row)
  j = 1
  For t = 1 To UBound(brr, 2)
   For i = UBound(arr) To 1 Step -1    '--'
''假设这句是: FOR I = 1 TO UBound(arr),(这句是代表从B2开始算起到B25,也就是从顶上算起),我现在想反过来算起,从B25到B2算起,从最下面的那个单元格开始算!
而上面所用到的,STEP-1,就从B24开始算起了,错位了.   

    If arr(i, t) = "" Then
       brr(i, t) = j
        j = j + 1
        Else
        brr(i, t) = Right(j - 1, 1)
         Cells(i, arr(i, t) + 13).Interior.ColorIndex = 3
         Cells(i, arr(i, t) + 13).Font.ColorIndex = 2         ''颜色
         Cells(i, arr(i, t) + 13).Font.Bold = True
       j = 1
        'Exit For
   MsgBox i
        End If
    Next
    j = 1
    Next
  Sheets("sheet1").[n2].Resize(UBound(brr, 1), UBound(brr, 2)) = brr         '这里的N1本来我是想改成N2的!'

  End Sub

回复

使用道具 举报

发表于 2015-8-10 09:13 | 显示全部楼层    本楼为最佳答案   
Sub cc()
    Dim i%, j%, t%, arr, rng()
    arr = Sheets("sheet1").Range("b1:j25")                    '这里的数组区域来是是B2:B25区域.!'
    ReDim brr(1 To UBound(arr, 1), 1 To 9)   '创建数组'

     Sheet1.[n1:v25] = ""
    Sheet1.[n1:v25].Interior.ColorIndex = 0
    Sheet1.[n1:v25].Font.ColorIndex = 15
    Sheet1.[n1:v25].Font.Bold = False
    'arr = Range("b2:b" & [b65536].End(3).Row)
    j = 1
    For t = 1 To UBound(brr, 2)
        For i = UBound(arr) To 2 Step -1   '--' 就是这一句,如何让循环从25单元格循环到2单元格!
            If arr(i, t) = "" Then
                brr(i, t) = j
                j = j + 1
            Else
                brr(i, t) = Right(j - 1, 1)
                Cells(i, arr(i, t) + 13).Interior.ColorIndex = 3
                Cells(i, arr(i, t) + 13).Font.ColorIndex = 2         ''颜色
                Cells(i, arr(i, t) + 13).Font.Bold = True
                j = 1
                'Exit For
                ' MsgBox arr(i, t)
            End If
        Next
        j = 1
    Next
    Sheets("sheet1").[n1].Resize(UBound(brr, 1), UBound(brr, 2)) = brr         '这里的N1本来我是想改成N2的!'
End Sub

循环上标和下标问题2.rar (10.39 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2015-8-10 13:15 | 显示全部楼层
爱疯 发表于 2015-8-10 09:13
Sub cc()
    Dim i%, j%, t%, arr, rng()
    arr = Sheets("sheet1").Range("b1:j25")                 ...

原因是因为:
Cells(i, arr(i要等于I+1, arr(i, t)+ 13).Interior.ColorIndex = 3
                Cells(i要等于I+1,arr(i, t) + 13).Font.ColorIndex = 2         ''颜色
                Cells(i要等于I+1, arr(i, t) + 13).Font.Bold = True
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 06:30 , Processed in 0.377765 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表