Определяемая пользователем функция, которая считывает данные из другой рабочей таблицы в той же книге - PullRequest
0 голосов
/ 16 февраля 2019

Это структура моей рабочей книги.

На одном листе под названием "экспорт" есть все ключи roomKeys на отель (их можно повторить) (2 тыс. Строк).

Один лист называется "delete "содержит все ключи комнаты, которые нужно удалить (100 строк).

Мне нужно из листа" удалить "создать функцию, в которой вы передаете в качестве параметра" ключ комнаты ", и она сообщит вам, сколько разэто значение повторяется в столбце 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

Контекст этой идеи таков: если клавиша room повторяется 5 раз при «экспорте», а у меня 5 «клавишей комнаты» при «удалении»Мне нужно удалить эту комнату.С другой стороны, если у меня есть 5 комнатных ключей для «удаления», но только два для «экспорта», я должен покинуть комнату.

1 Ответ

0 голосов
/ 16 февраля 2019

Попробуйте это:

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
...