1. Range / Cells / Columns / Rows
2. 绝对引用 $F$13 / 相对引用 F13
公式所在单元格的被复制到其他位置时,绝对引用不变
3. VLookup / NLookup / LLookup
4. =if(ISNA(C1:C17); "There are #N/A's in one of the cells"; "")
other similars: ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT()
5. 全角半角转换
StrConv("TestString", vbWide|vbNarrow|.., 1041)
6. Choose
=CHOOSE(1, "Tech", "on", "the", "Net") Result: "Tech"
=CHOOSE(5, "Tech", "on", "the", "Net") Result: #VALUE!
=CHOOSE(3.7, "Tech", "on", "the", "Net") Result: "the"
7. Sheets(0).Range("I7") = "=RC[-1] + 100"
RC[-1] -> R[0]C[-1] -> 当前行列变换为:行不变,列减1 -〉 H7
R[x]C[y] -> 行 + x, 列 + y
8. Sub Add(a as integer, b as integer)
End Sub
调用sub而不是function的格式为Add 3, 5 ,或者Call Add (3, 5)
9. 录制宏 -> Record Macro
将操作转换成代码,万事不求人
10. workbook保存
ActiveWorkbook.SaveAs Filename:=svFile, FileFormat:=xlExcel8
11. 超级隐藏sheet页
("Sheet2").Visible = xlSheetVeryHidden
Sheet2只能通过vba编辑器打开看到,直接通过双击打开Excel文件,sheet2是不可见的
12. 判断一个数组是否已经初始化
dim x() as integer
如果x()没有初始化,那么LBound(x) 的时候会有异常,
解决办法Len(Join(x)) > 0,x()被初始化
13. Speedup scripts
Option Explicit Public glb_origCalculationMode As Integer Sub SpeedOn(Optional StatusBarMsg As String = "Running macro...") glb_origCalculationMode = Application.Calculation With Application .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False .Cursor = xlWait .StatusBar = StatusBarMsg .EnableCancelKey = xlErrorHandler End With End Sub Sub SpeedOff() With Application .Calculation = glb_origCalculationMode .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True .CalculateBeforeSave = True .Cursor = xlDefault .StatusBar = False .EnableCancelKey = xlInterrupt End With End Sub Sub FillSlow() Dim c As Range, r As Range, startTime, EndTime Set r = Range("A1:C1000") r.ClearContents startTime = Timer For Each c In r c.Select c.Formula = "=Row()*Column()" Next c DoEvents EndTime = Timer MsgBox "Total Time: " & EndTime - startTime [A1].Select End Sub Sub FillFast() Dim c As Range, r As Range, startTime, EndTime Set r = Range("A1:C1000") r.ClearContents startTime = Timer On Error GoTo ResetSpeed SpeedOn For Each c In r c.Select c.Formula = "=Row()*Column()" Next c DoEvents EndTime = Timer MsgBox "Total Time: " & EndTime - startTime [A1].Select ResetSpeed: SpeedOff End Sub
14. Some functions
Combine2 | OFFSET | MATCH | INDEX | INDIRECT | ADDRESS | CELL