# 常用技巧

# 移动和选择

Key Meaning
TAB 跳到本行下一个单元格
SHIFT TAB 跳到本行上一个单元格
ENTER 跳到本列下一个单元格
SHIFT ENTER 跳到本列下一个单元格
CTRL + 方向键 跳到指定方向的边界
SHIFT + 方向键 选择指定方向一个单元格
CTRL + SHIFT + 方向键 选择到指定方向边界

# 拖动

鼠标左键栏位边缘呈现十字箭头拖动。

  • 拖动复制:CTRL+ 鼠标左键十字箭头。
  • 拖动插入:SHIFT + 鼠标左键十字箭头。

# 调整栏宽行高

鼠标放至栏位分隔线处出现 <-|->

  • 调整单个栏宽至内容宽度: <-|-> 单击鼠标左键。

  • 调整所有栏宽至内容宽度:选择所有栏, <-|-> 单击鼠标左键。如果栏宽没有调整到内容的宽度,需要注意是否开启了自动换行。

  • 调整所有栏宽至相同宽度:选择所有栏, <-|-> 鼠标左键拖动。

# 快速插入多个空行

  • 右键插入空行,然后 F4 重复上次操作。
  • 选择多行,然后右键插入。

# 重复填充

选择需要重复填充的源和待填充的行, 执行 CTRL + D

Initial Result

# 跨行复制

按住 CTRL ,鼠标选择要复制的行,然后 CTRL + C 复制。

# 单元格内换行

ALT + ENTER

# 批注

右键 => 插入批注 => 右键批注设置格式

# F4 相对应用变绝对引用

A1 => $A$1

# F9 刷新公式

# 从下拉列表中选择

鼠标右键 => 从下拉列表中选择

# 选择性粘贴 转置

复制数据 => 选择性粘贴 => 勾选转置

# 选择性粘贴 运算

所有英文成绩加 5

复制数据 5 => 选择性粘贴 => 选择需要运算区域 => 勾选运算

# 模拟分析

已知国语,数学,英文成绩,计算英文达到多少平均值才能达到 60

数据 => 模拟分析 => 单变量求解

# 表格对角线

  1. 绘图边框

    选择绘图边框,沿着对角线绘制

  2. 右键单元格格式 => 边框

# 向右补充空格到指定长度

LEFT("AAAA"&REPT(" ", 5), 5) => "AAAA "

# 数据分列

数据 => 分列

  1. 先根据空格分列
  2. 姓名根据宽度分为姓和名

案例:将 students.txt 转换为 excel 格式,并且 001 保留原有的格式。

1
2
3
4
id|name|age
001|babb|28
002|julian|30
003|owen|40
  1. 选择待分列的列 (A 列),点击数据 -> 分列,合适的文件类型中选择分隔符号。

  2. 选择分隔符号,可以勾选其他,手动填写分隔符号,这里使用 |

  1. 设置列的数据类型,这里将 id,name 设置为文本格式,可以 Shift 点选,需要选择所有列使用 CTRL + A.
  1. 文件另存为 xlsx.

# 打印预览

默认 Excel 打印不会显示网格綫,勾选打印网格綫,会打印默认的虚綫格式

如果需要其它类型网格綫使用网格綫工具

# 打印设定

视图 => 分页预览 调整分页符到合适的位置

页面布局 => 打印标题 进行页眉页脚,顶端标题行设置

打印预览

# 冻结窗格,分隔视窗

视图 => 冻结窗格

视图 => 分隔视窗

行,列同时冻结需要选择行和列交叉処

# 创建组

数据 => 创建组

# 复制非隐藏内容

  1. 开始 => 查找 => 定位
  1. 选择可见单元格 => 定位 然后复制区域

# 排序

数据 => 排序 可以自订清单 (自定义序列)

# 数据筛选

数据 => 自动筛选

自动筛选也可以根据颜色筛选和排序

# 格式化表格 (表格样式)

  • 方式一:开始 => 格式化为表格 (表格样式)

  • 方式二:插入 => 表格

    格式化的表格可以使用汇总行

# 条件格式

开始 => 条件格式

# 合并计算

数据 => 合并计算

可以将分布在不同表格中的季度数据合并

# 数据透视表

数据 => 数据透视表

# 保护工作表

CTRL + 1 设定公式单元格 锁定 (保护工作表后不可更改) + 隐藏 (保护工作表后公式不可见)

取消保护工作表后可以修改单元格的锁定

审阅 => 允许用户编辑区域

保护工作表之后用户可以通过输入区域密码对允许编辑区域进行修改

审阅 => 保护工作表

# 关闭转换为超链接

# IF

# VLOOKUP

VLOOKUP(查找值, 数据表, 列序数, [匹配条件])

成绩: =VLOOKUP(J3,$M$2:$N$7,2,TRUE) TRUE 表示模糊匹配

姓名: =VLOOKUP($C$3,$E$2:$K$12,2,FALSE)
总平均: =VLOOKUP($C$3,$E$2:$K$12,6,FALSE)
成绩: =VLOOKUP($C$3,$E$2:$K$12,7,FALSE) FALSE 代表精确匹配,7 代表取第七列数据(从 1 开始)

# HLOOKUP

# IFERROR

姓名 IF(C3="","",IFERROR(VLOOKUP($C$3,$E$2:$K$12,2,FALSE),"查无此人"))

如果学号为空,姓名显示为空;如果学号在列表中不存在,显示 查无此人

这里也可以对学号进行数据有效性验证,不在验证范围内的学号提示错误

# COUNTIF、COUNTIFS

COUNTIFS 可以指定多个条件

SUMIFS 需要先指定一个求和区域

# COUNTIF 标识重复

# 名称设定

# INDIRECT

# INDIRECT 实现下拉选单

公式 => 指定 => 根据范围指定名称

定位到餐点名称 数据 => 数据有效性

# 数值格式

CTRL + 1 设置单元格格式
# 一个位数的预留位置,无意义的 0 会被省略 82.56 #.# => 82.6
?一个位数的预留位置,无意义的 0 会被空格代替 “90” #.? => "90."
0 强制显示每一个指定的位数,90 #.00 => 90.00
@ 单元格内的文字,甲 @“等” => 甲等
_ 重复指定的符号直到填满储存格 简介 @_. => 简介… wps not valid?
, 千分位 1000000 0,“M” => 1M
_ 以后面的符号的宽度增加留白
特殊语法:正值格式;负值格式;零值格式;文本格式 0.00;(0.00);0.00;@
0.00 [红色];(0.00)[绿色];0.00 [蓝色];@[黄色]

# DATEDIFF

# NETWORKDAYS

NETWORKDAYS(开始日期, 终止日期, [指定假期])
NETWORKDAYS.INTL(开始日期, 终止日期, [周末], [指定假期])1

# TODAY、NOW

# RANK.EQ

RANK.EQ (数值,引用区域,[排位方式])

排位方式: 1 模糊排位,0 精确匹配 (默认)

# LEFT、MID、RIGHT

# INDEX、MATCH

# 等第

# 考绩

# RANDBETWEEN

# CHOOSE

# RAND

# RANK

# OR、AND

# SUMPRODUCT

# PARETO CHART

按住 CTRL 键,选择投诉内容、投诉次数、累计百分比 => 图表 => 组合图 => 折线图使用次坐标轴

设置坐标轴相关属性

# 学生成绩表

学号 姓名 国文 数学 英文 总平均 成绩
101 刘明哲 65 85 72 74 C
102 黄雅婷 78 30 66 58 E
103 蔡宜芳 84 61 50 65 D
104 陈翰松 100 60 59 73 C
105 戴育如 98 74 80 84 B
106 汪贞仪 35 64 27 42 E
107 李承航 86 37 30 51 E
108 林淑慈 82 69 50 67 D
109 张淑卿 99 100 86 95 A
110 吴芊菱 90 85 80 85 B

#

开发工具 => 录制新宏

宏 => 选择要执行的宏

单步执行可以进行调试

# VBA

# Variable、Const

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Option Explicit

Sub Variable()
' Dim Score As Integer
' Score = 100
' MsgBox Score
'
' Dim Price As Double
' Price = 9.6
' MsgBox Price
'
' Dim Birthday As Date
' Birthday = #4/23/2021#
' MsgBox Birthday

'
' Dim Message As String
' Message = "Hello, World!"
' MsgBox Message
'
' Dim Pass As Boolean
' Pass = True
' MsgBox Pass

' Dim Score As Integer, Price As Double
' MsgBox Score
' MsgBox Price
'
' Dim var
' var = 10
' MsgBox var
' var = #4/24/2021#
' MsgBox var

' MsgBox Scoe 'Option Explicit variable not defined

End Sub

Sub StaticCount()
Static Count As Integer

Count = Count + 1

MsgBox Count
End Sub


Sub Constant()

Const PI As Double = 3.14

Dim Area As Double

Area = PI * 2 * 2

MsgBox Area

'vbRed 内置常量
ActiveCell.Interior.Color = vbRed

End Sub

# Select Case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub SelectCase()

Dim Score As Integer

Score = 100

Select Case Score
Case Is >= 90
MsgBox "good"
Case Is >= 70
MsgBox "normal"
Case Else
MsgBox "bad"
End Select
End Sub

# Loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub ForLoop()

Dim Num As Integer
Dim Total As Integer

For Num = 1 To 100 Step 2
If Num > 50 Then
Exit For
End If

Total = Total + Num

Next Num

MsgBox Total
End Sub


Sub DoWhile()

Dim Num As Integer
Dim Total As Integer

Do While Num <= 100
Total = Total + Num
Num = Num + 1
Loop

MsgBox Total
End Sub


Sub DoUntil()

Dim Num As Integer
Dim Total As Integer

Do Until Num > 100
Total = Total + Num
Num = Num + 1
Loop

MsgBox Total
End Sub

# Array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Sub ArrayTest()
Dim MyArray(1 To 3) As Integer
' Dim MyArray(3) As Integer 3 代表最大下标,最小默认为 0, Option Base 1 可以指定最小下标为 1

MyArray(1) = 1
MyArray(2) = 2
MyArray(3) = 3

Dim Index As Integer

' For Index = 1 To 3
' MsgBox MyArray(Index)
' Next Index


For Index = LBound(MyArray) To UBound(MyArray)
MsgBox MyArray(Index)
Next Index
End Sub


Sub DoubleDimensionArrayTest()
Dim MyArray(1 To 2, 1 To 3) As Integer

MyArray(1, 1) = 11
MyArray(1, 2) = 12
MyArray(1, 3) = 13

MyArray(2, 1) = 21
MyArray(2, 2) = 22
MyArray(2, 3) = 23

Dim Row As Integer, Col As Integer

For Row = LBound(MyArray, 1) To UBound(MyArray, 1)
For Col = LBound(MyArray, 2) To UBound(MyArray, 2)
MsgBox MyArray(Row, Col)
Next Col
Next Row
End Sub


Sub DynamicArrayTest()

Dim MyArray() As Integer

ReDim MyArray(1 To 3)
MyArray(1) = 1
MyArray(2) = 2
MyArray(3) = 3


Dim Index As Integer
For Index = LBound(MyArray) To UBound(MyArray)
MsgBox MyArray(Index)
Next Index

ReDim MyArray(1 To 2, 1 To 3) As Integer
MyArray(1, 1) = 11
MyArray(1, 2) = 12
MyArray(1, 3) = 13

MyArray(2, 1) = 21
MyArray(2, 2) = 22
MyArray(2, 3) = 23

Dim Row As Integer, Col As Integer

For Row = LBound(MyArray, 1) To UBound(MyArray, 1)
For Col = LBound(MyArray, 2) To UBound(MyArray, 2)
MsgBox MyArray(Row, Col)
Next Col
Next Row

End Sub

# Object Hirerarchy

1
2
3
4
5
6
7
Sub ObjectHierarchy()
' Application.Workbooks("Excel.xlsm").WorkSheets("VBA").Range("A6").Value = 6
Range("A6").Value = 66
' Range("A6").Clear
MsgBox Worksheets("VBA").Name
' Worksheets.Add
End Sub

# Cell Reference

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Sub CellRefTest()
Range("A1").Value = 1

Range("A1, A2, A3").Value = 2

Range("A1:A3").Value = 3

Range("A1:A3, C1:C3").Value = 4

Range("test").Value = 5 ' 引用单元格名称

Range("10:10").Value = 6

Range("D:D").Value = 7

Range("11:11, 13:13").Value = 8

Range("E:E, G:G").Value = 9

Rows("14:16").Value = 10

Columns("H:J").Value = 11
End Sub


Sub CellRefTest2()
Cells(1, 1).Value = 1

Range(Cells(1, 1), Cells(2, 2)).Value = 2

' 引用区域中的单元格
Range("A3:B4").Cells(2, 2).Value = 3

Range("A3").Offset(2, 2).Value = 4

Range("C5").Offset(-2, -2).Value = 5


End Sub


Sub CellRefTest3()
Range("A1").Select
Range("A1:B2").Select

Range("A1").Activate
Range("A1:B2").Activate

Range("A1:B2").Select
Range("B2").Activate

Selection.Value = 1
ActiveCell.Value = 2
End Sub


Sub CellRefTest4()
Rnge("A1").End(xlDown).Select 'CTRL + 向下方向键
Range("A2").End(xlUp).Select

Range("A1").End(xlToRight).Select
Range("B1").End(xlToLeft).Select

Range("A1").End(xlToRight).End(xlDown).Select
End Sub

# Function

1
2
3
4
5
6
7
8
9
10
Function Concat(rng As Range, Optional sep As String = "") As String
Dim cell As Range

For Each cell In rng
Concat = Comcat & cell.Value & sep
Next cell

Concat = Left(Comcat, Len(Comcat) - Len(sep))

End Function

# Hide Column

1
2
3
4
5
6
7
8
9
Sub HideColumn()
Dim sheet As Worksheet

For Each sheet In ActiveWorkbook.Sheets
sheet.Columns("A:F").EntireColumn.Hidden = True
sheet.Columns("O:T").EntireColumn.Hidden = True
Next

End Sub

# Combine Sheet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Sub CombineSheet()

Application.DisplayAlerts = False 'Close Worksheets(combineSheetName).Delete alert dialog

Dim beginRow As Integer
Dim sheet As Worksheet
Dim rowCount As Integer
Dim combineSheetName As String

combineSheetName = "Combined"


On Error Resume Next ' Ignore runtime error, continue execute the code after error

Worksheets(combineSheetName).Delete
Worksheets.Add(before:=Worksheets(1)).Name = combineSheetName

' Copy header
Sheets(2).Activate
Range("A1").EntireRow.Select
Selection.Copy Destination:=Sheets(1).Range("B1") ' First column set empty for copy to DB update directly

For Each sheet In ActiveWorkbook.Sheets
If sheet.Name <> "Combined" Then

Application.GoTo Sheets(sheet.Name).[A1]
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 2).Select ' Don't copy header and last line
rowCount = Selection.Rows.Count 'Actual copy rowCount

If beginRow = 0 Then ' The first row is header, copy destination from second row
beginRow = beginRow + 2
End If

Selection.Copy Destination:=Sheets("Combined").Cells(beginRow, 2) ' First column set empty for copy to DB update directly
beginRow = beginRow + rowCount

End If
Next

ActiveWorkbook.Sheets(combineSheetName).Activate
Range("A1").EntireRow.Select
Selection.CurrentRegion.Select

Application.DisplayAlerts = True
End Sub

# Debug

  1. 在需要天使程式关注点左侧打上断点
  2. 点击运行
  3. 点击 Debug 选择调试方式。

# Other

# CSV

, 分隔的 .csv 文件可以通过 excel 直接打开;以 tab 分隔的 csv 将文件名重命名为 .xls/.xlsx 可以通过 WPS 直接打开。

, 分隔的 .csv 虽然可以直接使用 excel 开启,不过对一些特殊的符号需要进行简单的处理,例如 ="007", =007, 007 在 excel 中的显示分别是 007, =007, 7

reason csv xlsx
显示逗号 “Taipei, Taiwan” Taipei, Taiwan
显示双引号 “12’30"”" 12’30"
显示数字或字符串前面的 00 =“007” =“007” (显示 007)
使用 excel 公式 =SUM(B2:B5)/"=SUM(B2:B5)" =SUM (B2:B5) (显示和)
双引号前有空格 A, "B,C",D
双引号后有空格 A,"B,C" ,D
科学计数法 (only numbers) 646772001824 6.46772E+11
科学计数法 (include E) 646772002E95 6.47E+103
Edited on