Excel VBA 几个实用工具函数---统计行列、新建文件、复制黏贴、查表

Excel VBA 几个实用工具函数

1. 获取列数(允许中间有空列)

Function getCols(sheetname As String, row As Integer, skips As Integer)
Dim emptyboxs As Integer, usedcolums As Integer
	emptyboxs = 0
For usedcolums = 1 To Worksheets(sheetname).UsedRange.Columns.Count
    If (emptyboxs <= skips And (Not (Worksheets(sheetname).Cells(row, usedcolums).Value = ""))) Then
        emptyboxs = 0
    End If
    If (Worksheets(sheetname).Cells(row, usedcolums).Value = "") Then
        emptyboxs = emptyboxs + 1
    End If
    If (emptyboxs > skips) Then
        Exit For
    End If
Next usedcolums
usedcolums = usedcolums - (skips + 1)
getCols = usedcolums
End Function

传入参数:sheetname 工作表名,row 参考行所在行号,skips 允许跳过的空白列
返回值:列数

样例

dim cols as Integer
cols=getCols("样表",2,2)

2. 创建新工作簿(覆盖/打开旧工作簿)

Function make_new_excel(name As String, Optional cover As Boolean = True)
Dim root As String
root = ThisWorkbook.path
Dim path As String
'可以自行改动生成路径,默认是本文档所在目录
path = root  & name & ".xlsx"  
ex = Len(Dir(path, vbDirectory))
Application.ScreenUpdating = False
If cover Then
    If ex <> 0 Then
        On Error GoTo fileopen
        Kill path
    End If
Else
    If ex <> 0 Then
        Set make_new_excel = Application.Workbooks.Open(path)
        Exit Function
    End If
End If
fileopen:
    If Err.Number = 70 Then
        Workbooks(name & ".xlsx").Close
        Kill path
    End If
    Workbooks.add
    ActiveWorkbook.SaveAs fileName:=path, _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Set make_new_excel = Application.Workbooks.Open(path)
    Application.ScreenUpdating = True

End Function

传入参数:name 新建的工作簿名,cover [可选,默认覆盖] 是否覆盖旧文件
返回值:工作簿句柄

样例

dim testWorkbook as WorkBook
set testWorkbook=make_new_excel("样表",false)

3.快速粘贴(支持选择性粘贴)

Sub easy_paste(sheetid As Integer, file As Workbook, paste_postion As String, Optional mode As Integer = 0)
    'mode=0 仅数值和数字格式
    'mode=1 全部格式
    
    Application.ScreenUpdating = False
    file.Worksheets(sheetid).Activate
    Range(paste_postion).Select
    
        Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=True, Transpose:=False
            
        If mode = 1 Then
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        End If
        
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
            
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub

传入参数:sheetid 工作表号,file 工作簿句柄,paste_position 粘贴的起 始位置,mode 粘贴模式

样例

dim targetWorkbook as WorkBook
'定义targetWorkbook
'initialize:
sheets("源表").Activate
Range("A1:F30").Copy
'先复制一个区域
Call easy_paste(1, targetWorkbook, "B" & 5)
'在目标表中从B5单元格开始粘贴

4.在表中查找关键字(所有满足条件的单元格)

Function seekTarget(target As String,LimitRange as String)

Dim rng As Range
Dim c As New Collection

Set rng = Range(LimitRange).find(target)
If Not rng Is Nothing Then
        firstAddress = rng.Address
        Do
            c.add rng.row'这里仅记录符合条件的单元格的行号,可自行更改
            Set rng = Range(LimitRange).FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> firstAddress
    End If
    Set seekTarget = c
End Function

传入参数:target 查询关键字,LimitRange 限定查询区域
返回值:满足条件的单元格行号的集合(可自行修改)

样例

dim test_match as New Collection
set test_match=seekTarget("关键字","A3:Z500")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel中,VBA是一种编程语言,可以用来自动化执行一系操作。如果要通过VBA来调用VLOOKUP函数实现动态查询,我们可以按照以下步骤进行操作: 1. 打开VBA编辑器:在Excel中按下Alt+F11键,即可打开VBA编辑器窗口。 2. 在VBA编辑器中插入新的模块:在"插入"菜单中选择"模块",即可在项目资源管理器中创建一个新的模块。 3. 编写VBA代码:在新的模块中输入以下代码,用于调用VLOOKUP函数实现动态查询。 ```vba Function VLOOKUP_Dynamic(LookupValue As Range, LookupRange As Range, ColumnIndex As Integer) As Variant Dim Result As Variant Result = Application.WorksheetFunction.VLookup(LookupValue, LookupRange, ColumnIndex, False) VLOOKUP_Dynamic = Result End Function ``` 4. 保存并关闭VBA编辑器:保存VBA代码,然后关闭VBA编辑器窗口回到Excel工作表。 5. 在单元格中调用VBA函数:在Excel工作表中选择一个单元格,在函数栏中输入"=VLOOKUP_Dynamic(要查找的值, 查找范围, 返回索引)",并按下回车键。其中,"要查找的值"是要动态查询的值,"查找范围"是要进行查询的范围,"返回索引"是要返回的号或索引。 通过以上步骤,我们可以通过VBA调用VLOOKUP函数实现动态查询。每当单元格中的值发生变化时,VLOOKUP_Dynamic函数将会重新计算并返回相应的查询结果。这种方法可以节省时间和手动操作的复杂性,提高查询的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值