VBA 使用心得

阔别了好久的VBA这两天又有人让我做东西,就又捡了起来,在使用的过程中,发现遗忘的厉害,于是就想记录一下这两天用到的一些东西,以后有机会再补充吧。

先贴一段简单的代码,先熟悉一下vba是怎么写代码的

'设置行背景色
Private Sub SetRowColor()
'
' SetRowColor Macro
'
Dim currentSheet As Worksheet
Set currentSheet = Sheets(1)
If (currentSheet.Name = "汇总") Then
        'currentSheet.Activate
    Else
        MsgBox ("请确保存在“汇总”表格,并将“汇总”表格作为第一个表格")
        Exit Sub
End If

Dim columnCount As Integer
Dim rowCount As Integer

rowCount = currentSheet.UsedRange.Rows.Count
columnCount = currentSheet.UsedRange.Columns.Count

For i = 2 To rowCount
    If ((i - 2) Mod 6 = 3 Or (i - 2) Mod 6 = 4 Or (i - 2) Mod 6 = 5) Then
        With Range(Cells(i, 1), Cells(i, columnCount)).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.349986266670736
            .PatternTintAndShade = 0
        End With
    End If
Next i
End Sub

分析这里面需要注意的几点

 

if语句写法

If (condition) Then
    'do something
End If

 

for循环

For i=1 To 3000
    'do something
Next i

 

变量声明

Dim iIndex as Integer
Dim curSheet as Worksheet


变量赋值,根据索引取得Sheet

iIndex = 3
Set curSheet = ThisWorkbook.Sheets(1)

这里要注意的地方:

如果是普通的Integer、Long类型这些,赋值的时候不用Set,如果是Worksheet、Range这些对象要用Set关键字

弹出提示框的写法

MsgBox ("请确保存在“汇总”表格,并将“汇总”表格作为第一个表格")


弹出输入框并取得其输入值的写法

    Dim dt As String
    dt = InputBox("请输入要整理数据的日期,限定在1-31之间,如 25", "提示框", "1")


取得当前Sheet已使用的行数和列数

Dim columnCount As Integer
Dim rowCount As Integer

rowCount = currentSheet.UsedRange.Rows.Count
columnCount = currentSheet.UsedRange.Columns.Count


激活某一个sheet

currentSheet.Activate


设置背景色为灰色

With Range(Cells(i, 1), Cells(i, columnCount)).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.349986266670736
            .PatternTintAndShade = 0
        End With

这部分是根据录制宏得到的

四则运算符

运算符符号

运算符

表达式

+

相加运算符

i=j+k

相减运算符

i=j﹣k

*

相乘运算符

i=j*k

/

相除运算符

i=j/k

\

整型除法运算符

i=j\k

Mod

取余数运算符

i=jMod k

^

指数运算符

i=5^2

 

关系运算符与关系表达式

关系运算符

意义

数学式

关系表达式

= =

相等

A=B

A= =B

<>

不相等

A≠B

A<>B

>

大于

A>B

A>B

<

小于

A<B

A<B

>=

大于或等于

A≧B

A>=B

<=

小于或等于

A≤B

A<=B

Like

按样式比较字符串

 

字符串Like样式

Is

比较对象

 

对象A Is对象B

TypeOf…Is

测试对象数据类型

 

If(TypeOf对象Is)Then

Like子句样式用法如下所示:

Dim chksign As Boolean                                 

chksign = “A” Like “A” ‘True

chksign = “a” Like “A” ‘False

chkFlag = “A” Like “AAA”                                ‘False

 

逻辑运算符

运算符

描述

AND

在采取某行动前,所有的条件都必须为真(TRUE

OR

在采取某行动前,至少有一个条件为真(TRUE

NOT

用来否定条件。如果该条件为真,NOT使它为假;如果条件为假,NOT使它变真

Xor

同0异1。

 

数组使用方法,声明、赋值、取值

Dim qualityData(10000, 3)
qualityData(i, 1) = wsQuality.Cells(i + 1, 1) 'planName
wsQuality.Cells(i + 1, columIndex) = qualityData(i, 3)
调用函数的方式(Sub)
Call SetRowColor

SetRowColor为一个Sub函数

取得单元格的值

curData(i, 4) = currentSheet.Cells(i + 1, 7)


退出循环、函数、do循环

Exit Sub
Exit For
Exit Do

 

do循环写法

Do
'do something
Loop


 判断一个String是否是数字,及Integer类型转换

    '输入的值合法性检查
    Dim dt As String
    dt = InputBox("请输入要整理数据的日期,限定在1-31之间,如 25", "提示框", "1")
    If (IsNumeric(dt)) Then
        iDt = CInt(dt)
        
        If (iDt < 1 Or iDt > 31) Then
            MsgBox ("输入的值不合法,请确保输入的是1-31之间的整数")
            Exit Sub
        End If
    Else
        MsgBox ("输入的值不合法,请确保输入的是1-31之间的整数")
        Exit Sub
    End IfIsNumeric(dt)) Then
        iDt = CInt(dt)
        
        If (iDt < 1 Or iDt > 31) Then
            MsgBox ("输入的值不合法,请确保输入的是1-31之间的整数")
            Exit Sub
        End If
    Else
        MsgBox ("输入的值不合法,请确保输入的是1-31之间的整数")
        Exit Sub
    End If


其他,在Excel如果需要判断遍历大量数据行来进行比较的时候,性能瓶颈在于从excel的cell读取值来比较,解决方案是先把数据读到内存中作为数组来进行比较是否相等,这样可以大大提高性能,还可以使用VLookup函数,这种方法暂时还没研究

 

合并单元格

            Range("$A$" & iRow, "$A$" & (iRow + 2)).Merge

从这里可以看到一个字符串连接的方式,是使用&方式来进行连接,如果出现多个字符串部分连接,可以是用()把其中一部分括起来,来保证总是2个字符串部分进行连接,如下

 index = ("Ab"&i)&"cd"

另外可以看到,Range里面取得Cell的用法,上面还提到一种,如下

Range(Cells(i, 1), Cells(i, columnCount))

 

取得单元格的值(日期),并取得其 天 的部分

            rowDate = wsSource.Cells(i, 1)
            If (Day(rowDate) = iDt) Then
                arrSource(iDataSrc, 1) = wsSource.Cells(i, 2) '推广计划名
                arrSource(iDataSrc, 2) = wsSource.Cells(i, 4) '关键词
                arrSource(iDataSrc, 3) = wsSource.Cells(i, 6) '点击量
                arrSource(iDataSrc, 4) = wsSource.Cells(i, 9) '平均点击价格
                arrSource(iDataSrc, 5) = wsSource.Cells(i, 7) '消费
                
                iDataSrc = iDataSrc + 1
            End IfDay(rowDate) = iDt) Then
                arrSource(iDataSrc, 1) = wsSource.Cells(i, 2) '推广计划名
                arrSource(iDataSrc, 2) = wsSource.Cells(i, 4) '关键词
                arrSource(iDataSrc, 3) = wsSource.Cells(i, 6) '点击量
                arrSource(iDataSrc, 4) = wsSource.Cells(i, 9) '平均点击价格
                arrSource(iDataSrc, 5) = wsSource.Cells(i, 7) '消费
                
                iDataSrc = iDataSrc + 1
            End If

对应的取得年、月的函数为Year()和Month函数

 

调用系统函数的方法

    Application.WorksheetFunction.Acos


PS:CSDN的博客编辑器太烂了,文章一长就超级难编辑!!!!鄙视!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值