Как получить полный выбор из листа Excel, используя VBA без отфильтрованных строк, которые находятся между - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь получить выборку из листа в Excel, используя VBA, чтобы использовать этот выбор в качестве входных данных для следующего шага анализа данных. Это работает нормально, пока вы не сделаете выборку, в которой есть отфильтрованные строки. В этом случае он получит только часть диапазона, которая находится перед отфильтрованными строками.

Как я могу также получить выбранные строки после отфильтрованных строк?

Ниже приведенкод, который я использую для получения выбранных строк на листе, и пример выбора, в котором код не работает должным образом.

    For Each area In Selection.Areas
        Set newRange = area
        Set rnge = Selection.SpecialCells(xlCellTypeVisible)
        For i = 1 To rnge.Rows.Count
            x = rnge.Cells(i, 5).Value
            y = rnge.Cells(i, 6).Value
            Write #1, x, y
        Next i
    Next

enter image description here

Обновление: используя код ниже, я получил его на работу, благодаря ответу SNicolaou

    Set rnge = Selection.SpecialCells(xlCellTypeVisible)
    For Each area In rnge.Areas
        For i = 1 To area.Rows.Count
            x = area.Cells(i, 5).Value
            y = area.Cells(i, 6).Value
            Write #1, x, y
        Next i
    Next

1 Ответ

1 голос
/ 02 октября 2019

Существует два подхода к выбору ячеек: например, удерживая клавишу Shift и нажимая по отдельности на две ячейки, вы выбираете две области. удерживая клавишу Shift, щелкните и перетащите, чтобы выбрать две ячейки, создаст одну область. то есть. если мои ячейки A1 и B1, то в первом случае я получу две области «$ A $ 1», «$ B $ 1», тогда как во втором случае вы получите одну область «$ A $ 1: $ B $ 1»

Так что, если вы хотите перейти к одному выбору, вам нужно разделить выделение, как показано ниже:

Private Sub sTestSolution()

  Dim area As Range, newRange As Range
  Dim i As Long, x As Variant, y As Variant

  Set newRange = Selection.SpecialCells(xlCellTypeVisible)
  For Each area In newRange.Areas
    Debug.Print area.Address
  Next

End Sub

Если вы хотите перейти к множественному выбору, тогда код будет таким (отрегулируйте соответственно):

Private Sub sTestSolution()

  Dim area As Range
  Dim i As Long, x As Variant, y As Variant

  For Each area In Selection.Areas
      For i = 1 To area.Rows.Count
          x = area.Cells(i, 1).Value
          y = area.Cells(i, 2).Value
          Debug.Print area.Address
      Next i
    Next

End Sub

Следуя вашему комментарию, я получаю следующее, когда выбрал эти строки на своем скриншоте. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...