VBA新手教程:没放弃咱就开整(1)

2021-08-05 11:14:04 浏览数 (1)

来,没看上期的可以前往上期回顾:

VBA新手教程:从入门到放弃(0)

看到这的老铁你离会VBA不远了!

统计《某马拉牙》的《百家讲坛易中天品三国》各期节目中得出,收听第1期节目的人次为1247.4万,收听第2期的人次为741.1万,全部收听过至少一次的人次是127.4万(以收听人次最少的第51期计算)。

所以得出一个不靠谱的结论:

你已经超越了40.6%的同学!同时看完全集的概率由10.2%提高到了17.2%!

惊不惊喜!意不意外!

Whatever,以上分析卵用没有。仅能用来开篇扯皮……

像不像某些数据分析师?(手动狗头

复习一下

上期的作业还记得吗?输出"Hello world!"

抄作业最近这么流行,抄也能抄会了吧!

不会的同学请去办理退课,组织放弃你了!

来,好孩子们咱继续!

今天的小目标

  1. 整几个特别low的变量;
  2. 用for循环偷懒;
  3. 用if告诉程序怎么做是对的;
  4. 从单元格读取内容,经过一番折腾再放回去。

(本来计划的2和3留着下次讲,这次内容有点儿整多了)

正经的教程开始

这里我们主要讲一些基础概念

变量

其实就是给某个东西起个名,以后用这个名指代这个东西。

比如之前有个房地产大佬,调侃乔布斯,后被网友反讽,成就了一个梗: 1潘 = 1000元/平方米。在这里,“潘”就是一个变量,而后被赋值为“千元/平方米”。

用VBA可以如下定义(为了讲解,瞎扯的例子)。

代码语言:javascript复制
Dim 潘 as 单位
潘 = 千元/平方米

语法解释

Dim,声明,告诉程序,我要公告一个变量了!以后我要用它!

变量名,可以是中文,可以是字母,后面都可以加数字,下划线随便用。 虽然“a”呀,“b”呀这些个变量名你可以用,但是真的不建议,因为写到后面变量多了,你根本不知道“a”是个啥!

如果你渴望知道专业的命名规则,请百度以下三种:匈牙利命名法、骆驼命名法、帕斯卡命名法。

我的建议是啥呢:用英文翻译,或直接用中文!Low是真的low不过别人也看不到!自己看懂最重要!你要是让命名给难住了不想继续搞,那还学个屁!

As,这个词我不懂啥意思谁来解释一下!

变量类型,例子里面叫“单位”,通常是一种数据类型。意思就是我声明的这个变量,它是个啥东西。一般整数型你就用integer(整型),超过30000的整数用long(长整型),字符串型你就用string。目前记住这俩(仨)就行,能解决你90%的问题。如果你的工作非常惨需要小数,那小数型你就用single(单浮点精度)。

其实你也可以不写……在你赋值的时候系统会根据你赋值的类型给它也分配一个类型。但是不建议这样做,等你脱离婴幼儿期遇到例子我会给你讲为什么。

赋值,格式:变量名 = 值。等号左边放变量名,等号右边放值,之后任何地方用到这个变量,它就是右边的值!如果一个变量被定义后没有被赋值过,如果是数字型那就是0,如果是字符串型那就是空。

注意X = X 1:这不是一元(不要钱)一次方程!而且求出来0 = 1你会疯!这就是一个赋值:X增加了1!

正经的举例

代码语言:javascript复制
Sub 一个正经的例子()
    Dim aNumber As Integer
    aNumber = 250
    MsgBox (aNumber)
End Sub

在这里声明了一个变量aNumber(一个数),整数型。

而后对这个变量进行了赋值,伍佰的一半。

输出之后能看到什么呢?

细心的小朋友到这儿可能会问了!

“哎!劳斯!补对啊!Msgbox里的双引号去哪lia!”

代码语言:javascript复制
MsgBox (aNumber)
MsgBox ("Hello World!")

确实差了一个双引号哈!

双引号,在VBA里是字符串的标志。当代码检测到含有双引号时,会认定一对双引号中间的值是字符串;如果没有双引号,则认定是一个变量。

所以在这个例子中,如果你把aNumber两侧加上双引号,那输出的就是:

机智的小朋友,你明白了吗!

赋值的先后顺序:程序都是从上往下按照顺序一条一条执行,如果变量先后两次被赋值,后来的赋值是会覆盖掉之前的赋值的!

一个正经的例子修改版

代码语言:javascript复制
Sub 一个正经的例子()
    Dim aNumber As Integer
    aNumber = 250
    aNumber = 1111.234
    MsgBox (aNumber)
End Sub

你先猜一下会输出什么!

代码语言:javascript复制
10
9
8
7
6
5
4
3
2
1
0.9
0.8
0.7
……
0!

(我估计是ACE了,答错的同学请添加公众号领取臭骂一顿!)

来敲黑板知识点!大部分同学可能会觉得这是一个白给题,后面的赋值把前面的赋值覆盖了,那结果就是1111.234呗!

但请注意这是一个Integer,整数型!所以只有整数!小数都扔掉!即使后面是0.99999,那也扔掉扔掉!所以最后结果就变成了只保留整数部分的1111,你明白了吗!

变量的运算:变量既然可以是数,当然就会支持运算,那常用的运算你小学初中高中已经学完了,咱们来复习一下!

  • 第一梯队:加减乘除,没错小键盘区已经足够了。
  • 第二梯队:幂运算,也就是次方,符号比较特殊:^。X ^ 3就是X的立方。
  • 第三梯队:取模运算,也就是求余数。比如今天星期八,求250天后星期几就能用到取模。因为其涉及到函数,先不讲。前两个梯队基本够用!别学太多!容易放弃!

运算顺序还记得吗!幂 > 乘除 > 加减!

举个例子

代码语言:javascript复制
Sub 求圆的面积()
    Dim R As Integer
    Dim Pai As Single
    Dim S As Single
    R = 3
    Pai = 3.1415926
    S = Pai * R ^ 2
    MsgBox (S)
End Sub

公式很熟悉吧!

圆面积

小数点很长是吗?先不用在意这些细节,我会慢慢给你渗透!

妥了!变量就先整这么多,你已经够用了!

单元格操作

我不是跟你吹,学会了这招,你的成就感马上就会开始源源不断的奔向你!然后正反馈会让你逐渐走火入魔不是在想尽办法实现需求就是在央求需求的路上!

单元格操作贼简单,来试一下!

需求:读取A1单元格的内容,将其加1后输出到A2里。 代码:

代码语言:javascript复制
Sub 十分简单的单元格操作()
    Dim temp
    temp = Cells(1, 1)
    temp = temp   1
    Cells(2, 1) = temp
End Sub

讲解:

Cells(行,列) Cells,单元格。所以Cells(1,1)就代表第一行第一列的值,即A1单元格的值。同理Cells(2,1)代表第二行第一列的值,即A2单元格的值。Cells最后的s千万不能少!别问我为什么就这么记!

为了方便阅读我声明了一个临时变量temp,没定义类型(因为我不知道A1会是什么型)。

先将A1的值赋值给temp,然后让temp的值加1,然后将temp的值赋给A2。搞定!

其实简单粗暴,可以一行代码搞定:

代码语言:javascript复制
Sub 十分粗暴的单元格操作()
    Cells(2, 1) = Cells(1, 1)   1
End Sub

这种方法是不是直接扣题了!

只要你喜欢怎么写都行!

单元格的其它表示方法: (会上面的足够,这个不会不要紧我后面会具体讲,看不懂没关系千万别放弃啊!)

1、Cells(1,1) 等价于 Range("A1")

Range是范围的意思,能看懂吧没办法更细地讲了!

2、Worksheets(Sheet1).Cells(1,1) 与 Cells(1,1)

Worksheets长了点,指向的更明确了,所以更不易出错。前者指向“Sheet1”工作页的A1单元格,比后者单纯的A1单元格更具体!试想如果一个Excel包含了很多工作页,那后者指向的到底是哪一页的A1呢?所以通常在不指定工作页的情况下,默认指的都是当前激活表页的单元格。什么意思呢,你运行程序之前,哪页是你看到的,就指向哪页。

今日作业

1、小学及以下文化程度看这里——求三角形面积

1)新建一个工作簿;

2)通过编写VBA,读入高和底的数据,将三角形的面积输出在B3单元格。

2、初中及以上文化程度看这里——依据不同半径求球的体积

1)新建一个工作簿;

2)A列存在不同的半径值,在C1单元格填写R的行数,在C2单元格输出当前半径对应的球的体积;

3)π取3.14;

4)球的体积公式?我不会!

下期不定期更新预告

1、用For循环偷懒!

2、用If条件判断告诉计算机怎么做才是咱们想要的!

(这回真讲)

今日毒奶

持续不断的正反馈才是坚持下去的动力,别想一口吃成个胖子!

0 人点赞