Excel: щелкните ячейку, чтобы открыть данные на другой лист - PullRequest
0 голосов
/ 05 января 2019

Вот мои черновики данных

Имя листа: "ПЕРВЫЙ"

Данные представляют собой Пропуск и сбой в полях X & Y . Если Район терпит неудачу, когда дело доходит до X , он будет помечен как F и, если он пройдет, поле X помечается как P . Та же процедура, что и для поля Y

enter image description here

И

Имя листа: "ВТОРОЙ"

Вот краткое изложение листа: «ПЕРВЫЙ» Он рассчитывает количество пропусков и неудач. Используя идею функции Countif.

= COUNTIF (FIRST B2: B5, "P")

= COUNTIF (FIRST C2: C5, "F")

enter image description here

То, что я пытаюсь сделать, это

При попытке щелкнуть счетчик проходов и неудач. Он перенаправит вас на новый лист, где на листе будут представлены данные о пройденных и неудачных областях.

* * Пример тысяча шестьдесят-восемь: Если я нажму "3" под полем Пройдено Это даст мне что-то вроде этого,
       | X |
 Area1 | p |
 Area2 | p |
 Area4 | p |

Извините, это не мой проект, не домашнее задание или экзамен. Мне просто нужно понять логику открытия данных при нажатии на ячейку.

1 Ответ

0 голосов
/ 05 января 2019

Cell-Click на другой лист

  • Скопируйте код в код листа Sheets ("SECOND") (в VBA дважды щелкните «ВТОРОЙ») и переименуйте лист в «ТРЕТИЙ».
  • На третьем листе будет 2 столбца с заголовками AREA и X. Заголовки исключены из ClearContents.
  • Ниже приведены результаты для Pass или Fail в зависимости от того, какой ячейка была нажата (выбрана) в данный момент.

Код

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Const cStrPass As String = "A3"   ' Pass Cell Range
    Const cStrFail As String = "B3"   ' Fail Cell Range

    If Target = Range(cStrPass) Then
        CellClick Range("A3")
    End If

    If Target = Range(cStrFail) Then
        CellClick Range("B3")
    End If

End Sub

Sub CellClick(CellRange As Range)

    Const cVntName1 As Variant = "FIRST"
    Const cVntName3 As Variant = "THIRD"

    Dim vntSrc As Variant   ' Source Array
    Dim vntTgt As Variant   ' Target Array
    Dim lngLastRow As Long  ' Source Last Row
    Dim i As Long           ' Source Row Counter
    Dim k As Long           ' Target Row Counter
    Dim j As Integer        ' Source/Target Column Counter
    Dim strPF As String     ' PassFail String

    ' Paste Source Range into Source Array.
    With Worksheets(cVntName1)
        lngLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        vntSrc = .Range("A2", .Cells(lngLastRow, "B"))
    End With
    ' Determine PassFail String.
    If CellRange.Column = 1 Then
        strPF = "P"
      Else
        strPF = "F"
    End If
    ' Count rows for Target Array
    For i = 1 To UBound(vntSrc)
        If vntSrc(i, 2) = strPF Then
            k = k + 1
        End If
    Next
    ' Write data to Target Array
    ReDim vntTgt(1 To k, 1 To 2)
    k = 0
    For i = 1 To UBound(vntSrc)
        If vntSrc(i, 2) = strPF Then
            k = k + 1
            For j = 1 To UBound(vntSrc, 2)
                vntTgt(k, j) = vntSrc(i, j)
            Next
        End If
    Next
    ' Paste Target Array into Target Range.
    With Worksheets(cVntName3)
        .Range("A2", "B" & .Rows.Count).ClearContents
        .Range("A2").Resize(UBound(vntTgt), UBound(vntTgt, 2)) = vntTgt
        .Select
    End With

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