VBA(Visual Basic for Applications)是VB的一种宏语言。用来扩展应用程式的功能。特别是Microsoft Office软件。

转载请注明原文地址:http://blog.csdn.net/ts_dchs/article/details/50318345

1 使用原因

在处理传感器数据文件的时候。有些节点有丢包严重的现象。这样就会产生时间的累计误差。

所以须要依据包序号将之后的传感器数据填在合适的位置,也就是为丢包流出空行。

这样手动对照的方式非常不方便,所以想到用代码方式解决。

VBA提供了这个机会。i

之后的介绍内容以有用为准,不做具体介绍。

详见网络或者相关书籍。

2 基本准备

须要的excel文件是能够载入宏的文件。

与普通Excel文件不同。

普通:xlsx 可载入宏:xlsm

能够自己有一个能够载入宏的文件,处理完数据后复制过去。

假设要执行宏须要在选项的信任中心打开启用宏

这种设定非常easy让机器中招。所以用完后最好关掉。

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

转载请注明原址

Excel VBA简单使用——数据缺失处理的更多相关文章

  1. Excel VBA ——如何导出数据到excel表格

    sub OutPut() Dim FileTitle, MyPath, MyFullName As String Application.ScreenUpdating = false '关闭表格公式的 ...

  2. Excel向数据库插入数据(执行一次只需连接一次)-batch简单使用

    由于前端时间向数据库插入excel中的数据时,每插入一条数据,就得连接一次数据库:后来发现这种做法不好,如果excel中有很多条数据,就得连接很多次数据库,这样就很浪费资源而且不安全,有时数据库也会报 ...

  3. Excel VBA连接MySql 数据库获取数据

    编写Excel VBA工具,连接并操作Mysql 数据库. 系统环境: OS:Win7 64位 英文版 Office 2010 32位 英文版 1.VBA连接MySql前的准备 Tools---> ...

  4. .Net读取Excel文件时丢失数据的问题 (转载)

    相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...

  5. 来吧!带你玩转 Excel VBA

    来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...

  6. excel vba 数据分析

    (Visual Basic Application) VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visua ...

  7. Excel VBA 从一个工作簿查找另一个一个工作簿中的一些内容复制到另外一个工作簿

    帮朋友来写个Excel VBA 以前写过ASP,所以对vb略微熟悉,但VBA 没有仔细研究过. 以前只研究过 vba 写一个 计算个人所得税的程序. 这次写的功能也算是简单,但也耗费了两天的功夫. 需 ...

  8. Office EXCEL VBA数组如何使用

    Excel VBA数组入门教程 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已. 2. 数组的维数: Sub 数组示例()  Dim x As Long, y As Long  Dim ...

  9. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

随机推荐

  1. 关于git及其github的使用

    一:序言(就是瞎扯) 人们都说不会使用git和github的程序员都不是好程序员,是的,当我第一次听到的时候有点失望.因为我也不会...但是这句话激起了我学习使用git的动力(其实也没怎么深入的学习) ...

  2. TIME定时器

    一.定时器分类 STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器.基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定 ...

  3. [Recompose] Handle React Events as Streams with RxJS and Recompose

    Events are the beginning of most every stream. Recompose provides a createEventHandler function to h ...

  4. flash3D学习1

    今天正式学习flash3D. 先配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0 ...

  5. 什么是 &quot;署名-非商业性使用-同样方式共享&quot;

    什么是 "署名-非商业性使用-同样方式共享" 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致& ...

  6. POJ 1611 The Suspects 并查集 Union Find

    本题也是个标准的并查集题解. 操作完并查集之后,就是要找和0节点在同一个集合的元素有多少. 注意这个操作,须要先找到0的父母节点.然后查找有多少个节点的额父母节点和0的父母节点同样. 这个时候须要对每 ...

  7. Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture

    这几个概念比较绕, 又比较相近. 初看比较糊涂, 把握关键点就好. 关键字 View SurfaceViewGLSurfaceViewTextureView这三个后缀都是View, 所以这三个东西都是 ...

  8. legend---三、方法集思路

    legend---三.方法集思路 一.总结 一句话总结:其实也就是工具包思路,会极大的简化编程,清晰逻辑 1.多if转换成简洁单if怎么实现? 下面这段代码是错的,if的这种写法只适合直接return ...

  9. scikit-learn的线性回归

    scikit-learn的线性回归预测Google股票 这是机器学习系列的第一篇文章. 本文将使用Python及scikit-learn的线性回归预测Google的股票走势.请千万别期望这个示例能够让 ...

  10. ES6第一节:开发环境的搭建

    前言:由于目前浏览器对ES6的支持度不高,需要借助babel将编写好的ES6代码转换成ES5,浏览器才能解析. 需要在NodeJS环境下运行 一. 建立结构:两个文件夹和一个html文件,分别是src ...