Excel VBA--表和单元格操作

一、基础操作

1.添加4月1日到4月30日的所有表

Sub text()
Dim i
For i = 1 To 30
    Sheets.Add after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "4月" & i & "日"
Next
End Sub

输出

连续删除

Sub text()
Sheets.Application.DisplayAlerts = False
Dim i
For i = 1 To 30
    Sheets(Sheets.Count).Delete
Next
Sheets.Application.DisplayAlerts = False
End Sub

2.添加并修改表名

Sub text()
Sheets.Add after:=Sheet1
Sheet2.Name = "叶问"

End Sub

3.将表复制到最后一个,并且重命名

Sub text()
Sheets("sheet1").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = "lili"
End Sub

4.提取表的名称并汇总

Sub text()
Sheets("汇总").Range("a1") = "姓名"
Dim i
For i = 2 To 4
    Sheets("汇总").Range("A" & i) = Sheets(i).Name
Next
End Sub

5.提取工作表的名称及数值

Sub text()
Dim i
For i = 2 To Sheets.Count
    Sheets("汇总表").Range("a" & i) = Sheets(i).Name
    Sheets("汇总表").Range("b" & i) = Sheets(i).Range("a2")
    
Next
End Sub

6.移动

Sub text()
Sheets("4月1日").Move before:=Sheets("汇总表")
End Sub

move 与copy 的区别
move只移动位置,原表不保留
copy保留原表

7.利用变量给所有表中的单元格赋值

Sub text()
Dim i, j
For j = 2 To Sheets.Count
    Set i = Sheets(j)
    i.Range("A1") = 500
    
Next
End Sub

8.对多个表同时计算

Sub text()
Dim i, s1, s, j
For i = 1 To Sheets.Count
    Set s1 = Sheets(i)
    s = 0
    For j = 2 To 4
        s = s + s1.Range("b" & j)
    Next
    s1.Range("e1") = s
Next
End Sub

9.分模块汇总计算

Option Explicit

Sub 总分()
Dim i, s1, s, j
For i = 1 To Sheets.Count
    Set s1 = Sheets(i)
    s = 0
    For j = 2 To 4
        s = s + s1.Range("b" & j)
    Next
    If s1.Name <> "汇总" Then
        s1.Range("e1") = s
    End If
Next
End Sub

Sub 汇总()
Dim i, s1
For i = 2 To Sheets.Count
    Set s1 = Sheets(i)
    Sheets("汇总").Range("A" & i) = s1.Name
    Sheets("汇总").Range("b" & i) = s1.Range("e1")
Next
End Sub

Sub 合并()
Call 总分
Call 汇总
End Sub

10.添加控件


二、函数

创建并调用函数

1.

Function 随机数()
    随机数 = Int(Rnd * 10) + 1
End Function

Sub 使用函数()
MsgBox 随机数()
End Sub

单元格中用 =随机数() 调用

2.

Function 称呼(x)
    If x = "女" Then
        称呼 = "女士"
    Else
        称呼 = "男士"
    End If
End Function

Sub text()
Dim i, s
For i = 2 To 7
    Set s = Range("b" & i)
    Range("c" & i) = 称呼(s)
Next
End Sub

3.截取数据

Sub text()
Dim s
Set s = Range("a2")
城市 = InStr(s, "市")
区县 = InStr(s, "区")
Range("E2") = Left(s, 城市)
Range("f2") = Mid(s, 城市 + 1, 区县)
Range("g2") = Right(s, Len(s) - 区县)
End Sub

更高效更准确的用正则表达式,和其他语言也是通过用的

4.

Sub text()
Dim s, i
For i = 2 To 5
    Set s = Range("a" & i)
    Range("b" & i) = Split(s, "-")(2) & "年 第" & Split(s, "-")(3) & "周"
Next
End Sub

5.从身份证中提取出生日期

Sub sr()
Dim x, i
i = 2
Do While Range("a" & i) <> ""
    x = Range("a" & i)
    Range("b" & i) = DateSerial(Mid(x, 7, 4), Mid(x, 11, 2), Mid(x, 13, 2))
i = i + 1
Loop
End Sub

6.for each next

把每个工作表名汇总

Option Explicit

Sub text()
Dim i, j
i = 2
For Each j In Worksheets
    If j.Name <> "汇总" Then
        Range("a" & i) = j.Name
        i = i + 1
    End If

Next
End Sub


再逐一删除

Sub 删除()
Excel.Application.DisplayAlerts = False
Dim j
For Each j In Worksheets
    If j.Name <> "汇总" Then
        j.Delete
    End If
Next
Excel.Application.DisplayAlerts = True
End Sub

以下两者相等

For Each j In Worksheets
For i = 1 To Sheets.Count
    Set w = Sheets(i)

for each next 在单元格中的应用

Sub a()
Dim i, s1
i = 1
For Each s1 In Range("A1:A10")
    s1.Value = i
    i = i + 1
Next
End Sub

for each 实战

Sub 汇总()
Dim i, s1, j, k
Set s1 = Sheets("汇总")
For i = 2 To 7
    Name = s1.Range("a" & i)
    For Each j In Worksheets
        If Right(j.Name, 1) = "月" Then
            k = 2
            Do While j.Range("a" & k) <> ""
            If j.Range("a" & k) = Name Then
                s1.Range("b" & i) = s1.Range("b" & i) + j.Range("b" & k)
            End If
            k = k + 1
            Loop
        End If
    Next
Next
End Sub

三、属性

Sub a()
Range("b2") = ThisWorkbook.Name
Range("b3") = ThisWorkbook.Path
Range("b4") = ThisWorkbook.FullName

End Sub

😊以上是我的笔记整理,希望对需要的朋友有所帮助!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容