--学而时习之,不亦说乎?有朋自远方来,不亦乐乎?学习编程成就更好的自己--
微软公司Office软件在商业办公领域一直占据着主流和主导地位,其中Excel在数据处理和分析领域有着强大的影响力,大部分人在经历几年职场历练后可以熟练的使用Excel函数和透视表功能,基本可以轻松完成绝大多数工作和任务。但实际上Office的强大和独特之处还在于VBA,因为VBA能够胜任好多个性化二次开发,减少重复机械劳动从而实现办公自动化,开发效率高且开发周期短,尤其对于Excel重度使用者来说会了VBA简直就是如虎添翼啊!!!(本人外语专业毕业,机缘巧合爱上编程,自学道路曲曲折折,痛并快乐!)在这里总结一下自学VBA遇到的难点和重点,分享码过的代码和要点总结,希望能够给初学者一点启示和鼓励,同时愿意结交更多大神交流有助提升自己的水平。
今天介绍两个VBA基础知识点:Resize方法和End方法。在VBA处理数据时经常选定指定范围内的数据进行加工(删除,移动或复制),那么选定数据范围就一定要了解Resize方法-明确固定范围,而另一个是End方法-锚定数据表边缘,下面通过一个实例来讲解:
如下截图:
需求任务:
从左侧数据表提取包含“数学”学科数据到右侧形成新的数据集合
方法一-逐一判断左表数据提取到右表中,再删除空行
遍历循环判断用Resize方法指定数据范围复制到对应位置:
遍历循环判断用Resize方法指定数据范围删除空行数据:
注意:Resize方法是已明确知道数据的固定范围了。
方法二-复制全部有效数据过去,再遍历循环判断删除多余行
使用End方法选定全部有效数据范围并复制到对应位置:
遍历循环判断“学科字段”删除多余数据:
注意:End方法适用于多个连续的单元格数据集
代码汇总如下:
Sub Use_Resize_Move()
Application.ScreenUpdating = False
Sheets("Sample").Select
Dim i As Long, lr As Long
lr = ActiveSheet.UsedRange.Rows.Count
For i = 2 To lr Step 1
If Range("C" & i) = "数学" Then
Range("A" & i).Resize(1, 4).copy Range("H" & i) '使用Resize方法固定单元格范围,以某个单元格起步向下和向右行走
End If
Next i
Application.ScreenUpdating = True
End Sub
Sub Use_Resize_Delete()
Application.ScreenUpdating = False
Sheets("Sample").Select
Dim i As Long, lr As Long
lr = ActiveSheet.UsedRange.Rows.Count
For i = lr To 2 Step -1
If Range("H" & i) = "" Then
Range("H" & i).Resize(1, 4).Delete '使用Resize方法固定单元格范围,以某个单元格起步向下和向右行走
End If
Next i
Application.ScreenUpdating = True
End Sub
Sub Use_End_Move()
Application.ScreenUpdating = False
Sheets("Sample").Select
'使用End方法来选定所有有效数据,注意单元格内容必须是连续的
Range(Range("A2"), Range("A2").End(xlToRight).End(xlDown)).copy Range("H2")
Application.ScreenUpdating = True
End Sub
Sub Use_End_Delete()
Application.ScreenUpdating = False
Sheets("Sample").Select
Dim i As Long, lr As Long
lr = ActiveSheet.UsedRange.Rows.Count
'倒序判断删除不需要的数据
For i = lr To 2 Step -1
If Range("J" & i) <> "数学" Then
Range("H" & i).Resize(1, 4).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
END
我为人人,人人为我!!欢迎大家关注,点赞和转发!!!
~~人生不是赛场,梦想不容退场~~不断努力学习蜕变出一个更好的自己,不断分享学习路上的收获和感悟帮助他人成就自己!!!