Функция VBA для проверки и изменения номера строки ввода диапазона пользователя и индекса листа № - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь выполнить довольно простую задачу с помощью пользовательской функции в VBA.

У меня есть макрос, который перебирает большие файлы данных Excel, которые разбиты на листы по 50000 строк.

К сожалению, я не могу сшить их все вместе и зациклить столбцы, потому что это часто превышает предел строки в 1 048 576 для каждого листа в excel.

Мой макрос будет циклически проходить по данным до тех пор, покаусловие выполнено, и запишите его номер строки для дальнейшего использования.Очевидно, что когда он достигает какой-либо строки> 50 000, ему нужно перейти на следующий лист и продолжить процесс итерации.

Однако у меня возникают проблемы со значениями по обе стороны от предела 50 000, например: sheets(3).Cells(50021,2).

Мне нужно что-то вроде этого:

Ввод:

customfunction(sheets(3).Cells(50021,2))

Выход:

sheets(4).Cells(21,2)

1 Ответ

0 голосов
/ 11 февраля 2019
Public Type SheetPositions
  SheetIndex As Long
  RowNumber As Long
End Type

Public Function TranslateRange(ByVal c As Range) As Range
  With TranslatePositions(c.Worksheet.Index, c.Row)
    Set TranslateRange = c.Worksheet.Parent.Worksheets(.SheetIndex).Cells(.RowNumber, c.Column)
  End With
End Function

Public Function TranslatePositions(ByVal SheetIndex As Long, ByVal RowNumber As Long) As SheetPositions
  Const ROWS_PER_SHEET As Long = 50000

  If RowNumber <= ROWS_PER_SHEET Then
    TranslatePositions.SheetIndex = SheetIndex
    TranslatePositions.RowNumber = RowNumber
  Else
    TranslatePositions.SheetIndex = SheetIndex + RowNumber \ ROWS_PER_SHEET
    TranslatePositions.RowNumber = RowNumber Mod ROWS_PER_SHEET
  End If
End Function
Dim r As Range
Set r = Worksheets(2).Cells(50021, 1)
Set r = TranslateRange(r)
With TranslatePositions(3, 50021)
  MsgBox "Sheet " & .SheetIndex & " row " & .RowNumber
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...