由于工作需要,需要从头开始学习Excel表格。以前并没有认识到Excel表格的丰富功能直到工作后,接触到别人(BA)写的 Excel,看了一下还不错。所以在这里整理一下我查找的资料。
Excel VBA Tutorial - Easy Excel Programming
API
VBA 方法
VBA 与 VB 区别与联系
VBA(Visual Basic for Applications) VB (Visual Basic)
1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化
2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.
3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依 赖于它的父应用程序,例如EXCEL.
4.VBA是VB的一个子集。
https://www.jb51.net/shouce/vbs/vsmthReadAll.htm
一个主要区别就是表单控件可以和单元格关联,操作控件可以修改单元格的值(不用编程),所以用于工作表,而 ACTIVEX控件虽然属性强大,可控性强,但不能和单元格关联,所以用于表单Form。
1. VLOOKUP函数(使用率很高,类似 SQL外键查询。)
=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) =VLOOKUP(F:F,Sheet2!A:I,4,0)
a.外键区域 b.外键在另一个sheet页的区域 c. 外键列的位置 d. 是否是精确查询 0,1
VLOOKUP 多条件查询
2. Text()
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 鼠标放在哪里,选中哪里
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Call gys '调用改颜色 的sub 代码
Dim fist As Range, rownum As Integer
Set fist = Range("A2:EJ2000")
fist.Interior.Pattern = xlNone
rownum = ActiveCell.Row
If rownum >= 2 Then
Selection.EntireRow.Interior.ColorIndex = 37 ' 选择的区域整行的底纹的内部颜色是
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
VBA通常在程序开始加两句:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
在结尾处再恢复:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
VBA筛选AutoFilter用法(转载)
Sub FilterSophia()
'
' FilterSophia 宏
'重点 在于 Variant 变量
'(2, "1/10/2019")
Dim dateformat As String, Year As String, Month As String, Day As String, myValue As Variant
If ActiveSheet.AutoFilterMode = False Then '检查是否开启自动筛选
Range("A1:B9").AutoFilter '没有开启的话则开启自动筛选
End If
Selection.AutoFilter
Range("A1").Select
' myValue = InputBox("Give me Date (Format M/DD/YYYY)")
myValue = Date
ActiveSheet.Range("$A$1:$XEZ$2138").AutoFilter Field:=92, Criteria1:= _
"Sophia Shao"
ActiveSheet.Range("$A$1:$XEZ$2138").AutoFilter Field:=93, Operator:= _
xlFilterValues, Criteria2:=Array(2, myValue)
End Sub
原文:https://blog.csdn.net/iamlaosong/article/details/78842718
1、关闭文件时如果文件做了修改,系统会提示保存,用下列语句就不会提示了:
ThisWorkbook.Close savechanges:=False
False表示不保存修改,如果改为True,则保存修改。类似的:
ActiveWindow.Close savechanges:=False
Windows(datfile).Close savechanges:=False
。。。
2、保存文件时如果存在同名文件,系统会提示是否覆盖,用用下列语句就不会提示了:
在文件处理开始时,关闭报警:
Application.DisplayAlerts = False
在文件保存后,再打开报警:
Application.DisplayAlerts = True
3、下列语句可以消除“隐私警告”消息框:
ActiveWorkbook.RemovePersonalInformation = False
with语句,当对某个对象执行一系列的语句时,不用重复指出对象的名称。
Set regex = CreateObject("VBScript.RegExp")
With regex
.Pattern = "(SC2)-[A-Z0-9]{5}-[A-Z]{4}-\d{6}$" 'Change pattern for different requirement
.Global = True
End With
Set matches = regex.Execute(ActiveSheet.Range("A" & i).Value)
Sub CreateRecordset1()
Application.Calculation = xlManual
Dim cnn As Object
Dim rst As Object
Dim strPath As String
Dim strSQL As String
Dim lngCount As Long
Dim i As Integer
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.RecordSet")
'----后期引用Recordset对象
strPath = ThisWorkbook.FullName
'----指定ADO连接的文件路径(本工作簿)
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Extended Properties=Excel 12.0;" _
& "Data Source=" & strPath
strSQL = "select distinct a.*,b.工艺设计理论单产 from (select distinct 工厂,物料,max(提交日期) as 最新日期 from [MX$] group by 工厂,物料) as a left join [MX$] as b on a.工厂=b.工厂 and a.物料=b.物料 and (a.最新日期=b.提交日期 or a.最新日期 is null)" '定义SQL记录命令"
'----SQL语句
rst.Open strSQL, cnn, 1, 3
'----使用Open方法建立记录集
Cells.ClearContents
For i = 0 To rst.Fields.Count - 1
'----遍历读取记录集中的字段
Cells(1, i + 1) = rst.Fields(i).Name
Next i
Range("A2").CopyFromRecordset rst
'----读取记录集中的记录
lngCount = rst.RecordCount
'----记录的数目
MsgBox "共查询到:" & lngCount & "条记录。"
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Application.Calculation = xlAutomatic '打开自动计算
End Sub
shortcut key F1 help
MsgBox "Entered value is " & Range("A1").Value & join the string
Highlight Active Cell
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer
Cells.Interior.ColorIndex = 0
rowNumberValue = ActiveCell.row
columnNumberValue = ActiveCell.column
For i = 1 To rowNumberValue
Cells(i, columnNumberValue).Interior.ColorIndex = 37
Next i
For j = 1 To columnNumberValue
Cells(rowNumberValue, j).Interior.ColorIndex = 37
Next j
End Sub
Range Object
Private Sub CommandButton1_Click()
Dim rng As Range, cell As Range
Set rng = Range("C4:D10")
Set cell = Selection//鼠标手动选择的区域
If cell.Count = 1 And IsNumeric(cell) And Not IsEmpty(cell) And Not Intersect(rng, cell) Is Nothing Then
MsgBox "You win"
Else
MsgBox "You lose"
End If
End Sub
Sort Numbers
Dim i As Integer, j As Integer, temp As Integer, rng As Range
Set rng = Range(""A1"").CurrentRegion
For i = 1 To rng.Count
For j = i + 1 To rng.Count
If rng.Cells(j) < rng.Cells(i) Then
'swap numbers
temp = rng.Cells(i)
rng.Cells(i) = rng.Cells(j)
rng.Cells(j) = temp
Next j
Next i
End If
Dependent Drop-down Lists (accroding to previous set)
local on top-left ctrl + Home/End
Insert Row ctrl + shift + "+"
Delect Row ctrl + "-"
Current date Ctrl +;
Select last row Ctrl+ arrows
Select area Shift + Ctrl + arrows
Select all area Shift + Ctrl + End
Fliter Shift + Ctrl + L
Hide row Ctrl +9
Hide column Ctrl + 0
在红色框处,点击右键可以查看所有工作表清单。
筛选状态下,复制数据时,隐藏的数据经常会被复制出来。使用数据->高级筛选,可以直接将筛选结果复制到指定的区域。
符号 “&”
Phonetic
不同数量的单元格,无法通过下拉来填充序号,因此可以使用Max和相对地址来快速填充序列号。
=MAX($B$2:B2)+1
按Ctrl+Enter全部填充
Thanks for above blog author.
+