从同一工作簿中的另一个工作表读取数据的用户定义函数
Posted
技术标签:
【中文标题】从同一工作簿中的另一个工作表读取数据的用户定义函数【英文标题】:User Defined Function that reads data from another woorksheet within the same workbook 【发布时间】:2019-02-16 01:57:51 【问题描述】:这是我的工作簿的结构。
一张名为“export”的工作表包含每个酒店的所有房间密钥(它们可以重复)(2k 行)。
一张名为“delete”的工作表包含所有要删除的房间键(100 行)。
我想要的是从工作表“delete”创建一个函数,您将“roomkey”作为参数传递,它会告诉您该值在“export”工作表中的 roomkey 列中重复了多少次。
我的想法是按房间键过滤,然后计算选择中有多少行并返回该数字。我想我不能在函数中调用另一个工作表。
Public Function HowManyRatePlansPerRoom(Roomkey As String) As Integer
Dim SheetName As String
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim LastRow As Integer
Dim Rowz As Integer
On Error GoTo errorHandler
'Application.ScreenUpdating = True
Set ws1 = Sheets("Export")
ws1.Activate
ws1.Cells(1, 1).Select
'Find the last row
LastRow = ws1.Range("A1").CurrentRegion.Rows.Count
'select the data set
ws1.Range("A1:BI" & CStr(LastRow)).Select
'filter table by roomkey
Selection.AutoFilter Field:=1, Criteria1:=Roomkey
'this counts the data in the filter and -1 means minus the header
Rowz = ws1.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
HowManyRatePlansPerRoom = Rowz
errorHandler:
MsgBox "The following error occurred: " & Err.Description
Err.Clear
End Function
这个想法的背景是如果房间钥匙在“导出”时重复了 5 次,而我在“删除”时有 5 个“房间钥匙”,我需要删除那个房间。另一方面,如果我有 5 个用于“删除”的房间钥匙,但只有两个用于“导出”,我必须离开房间。
【问题讨论】:
访问其他工作表中的数据在 UDF 中工作得很好。您只是无法对它们执行 UI 操作。见How to avoid using Select in Excel VBA。 【参考方案1】:试试这个:
Public Function Roomkey_Count(sRoomkey As String) As Byte
Dim bOutput As Byte
Dim rg As Range, lRow As Long
With ThisWorkbook.Sheets("Export")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rg = .Cells(1).Resize(lRow)
End With
bOutput = WorksheetFunction.CountIf(rg, sRoomkey)
Roomkey_Count = bOutput
End Function
【讨论】:
以上是关于从同一工作簿中的另一个工作表读取数据的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章
在同一活动工作簿中从一个工作表复制和粘贴到另一个工作表时出现错误 1004