Excel VBA简单使用——数据缺失处理
2015-12-15 17:31
651 查看
VBA(Visual Basic for Applications)是VB的一种宏语言。用来扩展应用程式的功能。特别是Microsoft Office软件。
转载请注明原文地址:http://blog.csdn.net/ts_dchs/article/details/50318345
之后的介绍内容以实用为准,不做详细介绍。详见网络或者相关书籍。
普通:xlsx 可加载宏:xlsm
可以自己有一个可以加载宏的文件,处理完数据后复制过去。
如果要运行宏需要在选项的信任中心打开启用宏。这样的设定很容易让机器中招,所以用完后最好关掉。
当前编辑的就是相应的sheet的代码。
快速开始:两个下拉菜单选为worksheet和BeforeDoubleClick来使得在表格中双击之前运行代码。
得到这样一个框架:
其他选项百度
获取一个单元格的值,对另一个赋值
最后没有分号。
在保存之后,在Excel文件相应Sheet中双击可以看到结果。
变量声明
声明一个整整型的i
调试相关
F5运行脚本,一般可以在一个自己定义的宏中先测试好,在放到可以和Excel操作相关的宏中。比如现在自己的宏中测试好再放入双击操作中。
打印语句,用Debug对象。在“立即窗口”查看输出。“立即窗口”可以在视图中打开。
条件语句
For Next语法
eg.获取自己定义的参数元素后填入一列serial number:
(在Sheet的(2,1)(2,2)本别定义起始值 1,终止值 20,(2,3)(2,4)分别定义数据起始行号 5,要放置结果的列号 7。)
也可以针对一个区域来做:
这样会先填充一行,再填充下一行。
* While Wend *
比如收到数据的包序是101,102,104,105,则在新的位置写入时加入103行,后面为空。(在Sheet的(2,1)(2,2)本别定义起始值,终止值,(2,3)(2,4)分别定义数据起始行号,要放置结果的列号。原始数据占用列1-5,从第5行开始放。新数据的开始放在表格定义的位置,并在第一列加入连续的serial number)程序如下:
notification
source: 资料源于网络。个人所学有限,若有错误和不足还请不吝赐教,我会及时更正。Terrence Zhou.
http://blog.csdn.net/ts_dchs
转载请注明原址
转载请注明原文地址:http://blog.csdn.net/ts_dchs/article/details/50318345
1 使用原因
在处理传感器数据文件的时候,有些节点有丢包严重的现象。这样就会产生时间的累计误差。所以需要根据包序号将之后的传感器数据填在合适的位置,也就是为丢包流出空行。这样手动对比的方式很不方便,所以想到用代码方式解决。VBA提供了这个机会。i之后的介绍内容以实用为准,不做详细介绍。详见网络或者相关书籍。
2 基本准备
需要的excel文件是可以加载宏的文件。与普通Excel文件不同。普通:xlsx 可加载宏:xlsm
可以自己有一个可以加载宏的文件,处理完数据后复制过去。
如果要运行宏需要在选项的信任中心打开启用宏。这样的设定很容易让机器中招,所以用完后最好关掉。
3 开启编程环境
右键sheet标签,“查看代码”打开BVA编辑页面。当前编辑的就是相应的sheet的代码。
快速开始:两个下拉菜单选为worksheet和BeforeDoubleClick来使得在表格中双击之前运行代码。
得到这样一个框架:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ... End Sub
其他选项百度
4 基本语法
(一般首字母大写的为关键字,全小写为参数)获取一个单元格的值,对另一个赋值
Sheet4.Cells(2, 1) = Sheet4.Cells(1, 1)
最后没有分号。
在保存之后,在Excel文件相应Sheet中双击可以看到结果。
变量声明
声明一个整整型的i
Dim i As Integer
调试相关
F5运行脚本,一般可以在一个自己定义的宏中先测试好,在放到可以和Excel操作相关的宏中。比如现在自己的宏中测试好再放入双击操作中。
打印语句,用Debug对象。在“立即窗口”查看输出。“立即窗口”可以在视图中打开。
Dim i, j As Integer i = 5 j = 10 ' 单引号作为行注释 ' 打印多个元素,多个元素用分号隔开,VBA可能会自己加上。 Debug.Print i; "x"; j; "="; i * j; " "; ' 打印空行 Debug.Print
条件语句
If x > y Then [statements] ElseIf x>z Then [statements] Else [statements] End If
For Next语法
For counter = start To end [Step step] [statements] [Exit For] ' like break [statements] Next [counter]
eg.获取自己定义的参数元素后填入一列serial number:
(在Sheet的(2,1)(2,2)本别定义起始值 1,终止值 20,(2,3)(2,4)分别定义数据起始行号 5,要放置结果的列号 7。)
Sub copyTest() Dim tsart, tend, tcol, trow As Integer tstart = Sheet4.Cells(2, 1) tend = Sheet4.Cells(2, 2) trow = Sheet4.Cells(2, 3) tcol = Sheet4.Cells(2, 4) Debug.Print Debug.Print "start index: "; tstart Debug.Print "end index: "; tend Debug.Print "result start:("; trow; ", "; tcol; ")" Dim i As Integer For i = tstart To tend Step 1 Sheet4.Cells(trow + i - 1, tcol) = i Next i End Sub
也可以针对一个区域来做:
For Each c In Range("a1:c5") i = i + 1 c.Value = i Next
这样会先填充一行,再填充下一行。
* While Wend *
While condition(s) [statements 1] [statements 2] ... [statements n] Wend
5 一个实例
利用VBA将一系列传感器数据按序填写到新的位置来自动空出丢包的行。比如收到数据的包序是101,102,104,105,则在新的位置写入时加入103行,后面为空。(在Sheet的(2,1)(2,2)本别定义起始值,终止值,(2,3)(2,4)分别定义数据起始行号,要放置结果的列号。原始数据占用列1-5,从第5行开始放。新数据的开始放在表格定义的位置,并在第一列加入连续的serial number)程序如下:
Sub copyTest() Dim tsart, tend, tcol, trow As Integer tstart = Sheet4.Cells(2, 1) tend = Sheet4.Cells(2, 2) trow = Sheet4.Cells(2, 3) tcol = Sheet4.Cells(2, 4) Debug.Print Debug.Print "start index: "; tstart Debug.Print "end index: "; tend Debug.Print "result start:("; trow; ", "; tcol; ")" Dim i, i2, j As Integer i = 0 i2 = 0 j = 0 While i < (tend - tstart + 1) Sheet4.Cells(trow + i, tcol) = i + tstart If Sheet4.Cells(trow + i2, 1) = i + tstart Then For j = 1 To 5 Step 1 Sheet4.Cells(trow + i, tcol + j) = Sheet4.Cells(trow + i2, j) Next j i2 = i2 + 1 ' Debug.Print i2 End If i = i + 1 Wend Debug.Print i2; "total Data number: "; i2 End Sub
notification
source: 资料源于网络。个人所学有限,若有错误和不足还请不吝赐教,我会及时更正。Terrence Zhou.
http://blog.csdn.net/ts_dchs
转载请注明原址
相关文章推荐
- 使用Python生成Excel格式的图片
- Outlook 批量发送邮件
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- VBA解决Windows空当接龙的617局
- excel vba 高亮显示当前行代码
- SQL 导入导出Excel数据的语句
- VBA中连接SQLSERVER数据库例子
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结
- C#实现导入CSV文件到Excel工作簿的方法
- C#基于NPOI生成具有精确列宽行高的Excel文件的方法
- 总提示[Microsoft][ODBC Excel Driver] 数值字段溢出官方解决方法
- C#将Sql数据保存到Excel文件中的方法
- VC6.0实现读取Excel数据的方法
- python pandas 处理 excel
- 利用outlook结合word与excel实现批量发送邮件