受累帮我解释一下这段excel的vba代码吧,谢谢您了,越详细越好,用//在每行后面写吧,再次谢谢,

Dim i&, Myr&, r%, Arr, Arr1(), ks, js, j&
Application.ScreenUpdating = False
Sheet1.Activate
Myr = [f65536].End(xlUp).Row
Arr = Range("a1:q" & Myr)
For i = 2 To UBound(Arr)
If Arr(i, 2) <> "" Then
r = r + 1
ReDim Preserve Arr1(1 To r)
Arr1(r) = i
End If
Next
For i = r To 1 Step -1
If i <> r Then
js = Arr1(i + 1) - 1
Else
js = UBound(Arr)
End If
ks = Arr1(i)
If Arr(js, 4) = "小计" Then
Cells(ks + 1, 1).Resize(js - ks, 3).Delete shift:=xlUp
Cells(ks, 4).Resize(js - ks, 8).Delete shift:=xlUp
End If
Next
Application.ScreenUpdating = True

Dim i&, Myr&, r%, Arr, Arr1(), ks, js, j& '声明变量
Application.ScreenUpdating = False '关闭屏幕更新
Sheet1.Activate '激活sheet1表为活动表
Myr = [f65536].End(xlUp).Row '记录当前表里数据区域最末行的行号至Myr
Arr = Range("a1:q" & Myr) '将数据区A1:Q(Myr)赋给变量Arr,Q的行号有Myr确定
For i = 2 To UBound(Arr) '循环 UBound(Arr)去arr数组最大下标,因为省略参数,默认是第一维,可以理解为区域的行数, 循环条件是i 从2步进到这个最大小标数
If Arr(i, 2) <> "" Then '判断B列的当前行的单元格是否为空
r = r + 1 '非空则r计数加1
ReDim Preserve Arr1(1 To r) '重定义Arr1数组维数,并保护之前的数组信息
Arr1(r) = i '将该行行号至数组arr1
End If
Next '这个循环也就是说会记录B列有非空单元格的行号至数组arr1中
For i = r To 1 Step -1 '循环,条件是i= r到1,按1递减
If i <> r Then
js = Arr1(i + 1) - 1 '非初始循环时,i都是小于r的,都会执行这条语句将,其目的是记录上一个B列非空单元格的行号
Else
js = UBound(Arr) '初始循环时i=r,会执行这条语句,将arr第一维下标最大值 赋给js,其实就是记录arr这个range区域的行数
End If
ks = Arr1(i) '将arr1第i数组数赋给ks,目的是在循环中将B列的每个非空单元格的行号赋给ks
If Arr(js, 4) = "小计" Then '如果B列空单元所对应行与E列交叉单元格是“小计”
Cells(ks + 1, 1).Resize(js - ks, 3).Delete shift:=xlUp '判断条件成立则删除对应的区域,(此代码可能有问题哦),目的应该是清除小计之前的明细区域
Cells(ks, 4).Resize(js - ks, 8).Delete shift:=xlUp '此行也是删除区域的代码,(可能有问题分析下来)
End If
Next
Application.ScreenUpdating = True 开启屏幕更新
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-15
Dim i&, Myr&, r%, Arr, Arr1(), ks, js, j&
'停止屏幕更新,用来加快执行速度
Application.ScreenUpdating = False
'激活SHEET1工作表
Sheet1.Activate
'找到当前工作表的最后一行
Myr = [f65536].End(xlUp).Row
从A1开始到Q列最后一行整个范围
Arr = Range("a1:q" & Myr)
'从第二行开始遍历上面范围
For i = 2 To UBound(Arr)
'如果第二列不是空字符串的话则将单元格中的值放入到数组中
If Arr(i, 2) <> "" Then
'用来计数
r = r + 1
'动态扩大数组元素个数
ReDim Preserve Arr1(1 To r)
'数组元素将行数存储起来
Arr1(r) = i
End If
Next
'从后往前遍历数组
For i = r To 1 Step -1
'判断是否是最后一个元素,是的话则用最后下标,否则取当前上一个元素的行号
If i <> r Then
js = Arr1(i + 1) - 1
Else
js = UBound(Arr)
End If
ks = Arr1(i)
'如果是小计,则将小计计算的上面范围清除掉,同时清除空值
If Arr(js, 4) = "小计" Then
Cells(ks + 1, 1).Resize(js - ks, 3).Delete shift:=xlUp
Cells(ks, 4).Resize(js - ks, 8).Delete shift:=xlUp
End If
Next
'重新显示屏幕更新,之前作的操作开始显示
Application.ScreenUpdating = True
第2个回答  2012-05-15
Dim i&, Myr&, r%, Arr, Arr1(), ks, js, j& '//定义变量
Application.ScreenUpdating = False '//关闭屏幕更新,这个可以提高程序的运行速度。。。程序中间过程不显示,直到最后出结果
Sheet1.Activate '//让sheet1处于当前工作表
Myr = [f65536].End(xlUp).Row '//将F列最后一个非空单元格的行数值赋值给myr
Arr = Range("a1:q" & Myr) '//将单元格区间a1到f列最后一行这个区间的值赋值给数组arr,这个也是相应的提高程序的运行速度。如果这个区间非常大。速度提高的越明显、。
For i = 2 To UBound(Arr) '//循环i从2到UBound(Arr),ubound(arr)就等于myr的值,相当于从第二排循环到最后一排。。(不知道说明白没有),你有基础应该很容易看懂。
If Arr(i, 2) <> "" Then '//相当于第i排,第二列的值如果不为空。则执行下面的代码。
r = r + 1 '//这个是计数。计算第i排,第二列有多少个空值。
ReDim Preserve Arr1(1 To r) '//重新定义数组arr1,数组里面的下标为从1到r,以前的数组值不变
Arr1(r) = i '//赋值给多出来的那个数组为i,其实就是记录第二列哪些排的值为空,把记录的值放在arr1里面
End If
Next
For i = r To 1 Step -1 '//循环,从r到1,依次递减1这样循环
If i <> r Then '//判断是不是第一个,不是第一个则执行下面一句,是第一个跳到else
js = Arr1(i + 1) - 1 '//js里面放的值为上面往到的排数的上一排
Else
js = UBound(Arr) '//第1个值为arr有多少排
End If
ks = Arr1(i) '//ks等于arr(i)
If Arr(js, 4) = "小计" Then '//arr(js,4)相当于第4列第js排里面的值(js为第二列为空的排数的上一排)等于小计的话就往下执行
Cells(ks + 1, 1).Resize(js - ks, 3).Delete shift:=xlUp '//相当于如果第二列的值为空,则第一列相应的排数向右扩展为3列向下扩展js-ks排,然后删掉这些单元格,下面的单元格往上移动。
Cells(ks, 4).Resize(js - ks, 8).Delete shift:=xlUp '//相当于相应的排数的第4列值向右扩展为8列,向下扩展js-ks排,同样删掉
End If
Next
Application.ScreenUpdating = True '//打开屏幕更新

受累帮我解释一下这段excel的vba代码吧,谢谢您了,越详细越好,用\/\/在...
Arr = Range("a1:q" & Myr) '将数据区A1:Q(Myr)赋给变量Arr,Q的行号有Myr确定 For i = 2 To UBound(Arr) '循环 UBound(Arr)去arr数组最大下标,因为省略参数,默认是第一维,可以理解为区域的行数, 循环条件是i 从2步进到这个最大小标数 If Arr(i, 2) <> "" Then ...

请帮我翻译一下这段Excel的VBA代码,谢谢!
‘ 定义数组下限,可以从我以前百度知道上查到具体用法。可以删掉这行代码 Sub Sample();定义名称为 Sample,可改为你自己的 Dim FileName As String, Path As String, Arr(1 To 3)’定义变量,Filename用于储存文件名称,Path用于储存文件路径,Arr(1 to 3)3维数组,用于储存C4 J4 C5的数据...

帮忙逐句翻译这段Excel VBA代码的详细意思
Sub CombineFiles() \/\/建立方法 Dim path As String \/\/定义String(字符串)型变量path Dim FileName As String \/\/定义String型变量path Dim LastCell As Range \/\/定义Range (单元格)型变量path Dim Wkb As Workbook \/\/定义Workbook(excle) String型变量path Dim WS As Worksheet ...

excel中的VBA代码解释
一,Range("b2:f5").Interior.ColorIndex = xlNone Range是区域对象,Range("b2:f5")就是指左上角为“B2”单元格,右下角为“F5”单元格这样一个连续的区域,应该是4行5列的一个区域。Interior.ColorIndex 是指填充颜色(这里是采用ColorIndex严格说是颜色常数)xlNone 表示清除原来的填充色。所以...

帮我解释下下面一段EXCEL的vba代码的意思,还有运行时是怎样的一个过程...
这个代码是把C列空单元格所在行删除的代码 Dim rg As Range, i As Integer ‘定义rg和i的变量类型 For i = 2 To Range("c65536").End(xlUp).Row '设定Range("c65536").End(xlUp).Row是指从单元格C65535往上查询到的第一个非空单元格所在行的行号,在EXCEL2003里面C65535是C列最后一个...

请求大神帮忙写个excel VBA代码,谢谢!
一、开发工具 二、双击sheet 三、建立事件 选择Change事件 四、编写代码 Private Sub Worksheet_Change(ByVal Target As Range)Dim FRG As Range If Target.Column = 2 Then Set FRG = Sheet2.Range("B:B").Find(Target)If Not FRG Is Nothing Then Sheet1.Range("B" & Target.Row) = ...

请EXCEL VBA高手 ,帮忙解释一下 下面这段代码,具体是什么意思?
Sub save() '定义过程名;Dim ar, ix As Integer '定义变量ar和ix为整型变量;If [B2] = "甲" Then ix = 2: X = Sheets(ix).Range("A65536").End(xlUp).Row'Range("A65536").End(xlUp).Row意为当活动单元格为A65536(即A列最下面一个单元格)时,按一次Ctrl+向上键后,新...

请教一个有关excel vba代码的问题,以下为代码,希望哪位大哥能帮忙详解一...
在vba编辑器中 帮助—ms basic帮助,自己输入关键字解释的很清楚的 Range("H7").Select 当前表的H7单元格被选中 Sheets("基础表").Range("A3:L19").AdvancedFilter 基础表的“A3:L19”单元格区域进行高级筛选,后面有三个参数 Action:=xlFilterCopy,筛选模式参数,具体参数意义查看帮助 CriteriaRange:...

请高手为下面的excel VBA代码编写注释 请将注释写的尽量详细些,谢谢
Sheet1.Activate '使sheet1为当前活动的sheet [c5:z32].ClearContents '清除C5到Z32单元格内的数据 Myr = Sheet2.[a65536].End(xlUp).row '将Sheet2中A列有数据的区域的行数,赋值给Myr变量 Arr = Sheet2.Range("a7:t" & Myr) '将A7到T列Myr行的区域命名为Arr For i = 1 ...

求高手帮忙注释下excel中vba宏代码各是什么意思,满意的加满分,谢谢!
<x:Selected\/> <x:ProtectContents>False<\/x:ProtectContents>'内容保护为否 <x:ProtectObjects>False<\/x:ProtectObjects>'目标保护为否 <x:ProtectScenarios>False<\/x:ProtectScenarios>'scenario 为否 这三个都是workbook 的保护设定 <\/x:WorksheetOptions> <\/xml><![endif]--> ...

相似回答