Показать данные из электронной таблицы в соответствии с выбранными данными в другой электронной таблице - PullRequest
0 голосов
/ 20 марта 2019

Вероятно, этот вопрос очень новобранец, но на самом деле он мало используется для игры в Excel, во всяком случае, здесь я иду.

У меня есть 2 таблицы: A и B

В таблице "A "имеют следующую информацию:

+----------+--------+-------+------+
|   DATE   |  CODE  | CORRL | CAPA |
+----------+--------+-------+------+
| 01/03/17 | 110104 |     5 |   28 |
| 01/03/17 | 110104 |     7 |   30 |
| 01/03/17 | 810107 |     5 |   30 |
+----------+--------+-------+------+

и в электронной таблице" B "следующую информацию:

+----------+--------+-------+--------+
|   DATE   |  CODE  | CORRL |   SN   |
+----------+--------+-------+--------+
| 01/03/17 | 110104 |     5 | 182694 |
| 01/03/17 | 110104 |     5 | 571394 |
| 01/03/17 | 110104 |     7 | 298435 |
| 01/03/17 | 110104 |     7 | 205785 |
| 01/03/17 | 810107 |     5 | 234519 |
| 01/03/17 | 810107 |     5 | 229787 |
+----------+--------+-------+--------+

Так что мне нужно, когда я перемещаюсь по записям в электронной таблице«A» отображаются только записи с одинаковыми значениями DATE, CODE и CORRL в электронной таблице «B»

Пример: если я нахожусь в 1-й строке электронной таблицы «A» в электронной таблице"B" должны быть показаны только первые 2 записи, то есть:

+-----------+---------+--------+--------+
|   DATE    |  CODE   | CORRL  |   SN   |
+-----------+---------+--------+--------+
| 01/03/17  | 110104  |     5  | 182694 |
| 01/03/17  | 110104  |     5  | 571394 |
+-----------+---------+--------+--------+

и т. Д.

Спасибо

1 Ответ

0 голосов
/ 22 марта 2019

Я должен сказать, что это один из самых разных запросов, которые я видел для функциональности Excel.

Я думаю, у меня есть кое-что для вас.

Во-первых, если вы 'Если вы не знакомы с редактором VBA, вы можете получить к нему доступ, нажав Alt + F11 .Другой способ получить к нему доступ - это вкладка Developer на ленте, которая по умолчанию скрыта.Чтобы показать его, измените ленту, чтобы включить его.

Developer Tab

Оттуда вы можете получить доступ к редактору VBA, а также запускать макросы.

VBA Editor

Изнутри добавьте следующий код ...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim lngRow As Long, lngCol As Long, strDate As String, strCode As String, strCorrl As String
    Dim strKey As String, strSlaveKey As String, i As Long

    If objSlaveSheet Is Nothing Then Exit Sub

    objSlaveSheet.Rows.EntireRow.Hidden = True
    objSlaveSheet.Rows(1).Hidden = False

    If Target.Cells(1, 1).Row > 1 Then
        With Target.Worksheet
            strDate = .Cells(Target.Row, 1)
            strCode = .Cells(Target.Row, 2)
            strCorrl = .Cells(Target.Row, 3)

            strKey = strDate & "_" & strCode & "_" & strCorrl
        End With

        ' Now loop through all of the cells in the slave workbook.
        ' Start at the second row because the first has a header.
        With objSlaveSheet
            For lngRow = 2 To .Rows.Count
                strSlaveKey = ""

                For i = 1 To 3
                    strSlaveKey = strSlaveKey & "_" & .Cells(lngRow, i)
                Next

                strSlaveKey = Mid(strSlaveKey, 2)

                If strSlaveKey = "__" Then Exit For

                If strSlaveKey = strKey Then
                    .Rows(lngRow).Hidden = False
                End If
            Next

            .Activate
            .Cells(1, 1).Select
        End With
    End If
End Sub

... в рабочую таблицу, где вы хотите вызватьна ваш рабочий лист A .

Также в рабочей книге A создайте новый Модуль в редакторе VBA и вставьте следующеекод ...

Public objSlave As Workbook
Public objSlaveSheet As Worksheet

Public Sub SelectSlaveBook()
    Dim objDlg As FileDialog, strFile As String, strSlaveSheetName As String

    strSlaveSheetName = "Sheet1"

    Set objDlg = Application.FileDialog(msoFileDialogOpen)

    objDlg.Show

    If objDlg.SelectedItems.Count > 0 Then
        strFile = objDlg.SelectedItems(1)

        Set objSlave = Application.Workbooks.Open(strFile, False, True)
        Set objSlaveSheet = objSlave.Worksheets(strSlaveSheetName)

        ThisWorkbook.Activate
    End If
End Sub

... прежде чем двигаться дальше, убедитесь, что вы изменили значение strSlaveSheetName на имя листа, на котором ваши данные находятся в вашем "подчиненном"Рабочая тетрадь ( B ).

Наконец, на листе A добавьте следующий код в объект ThisWorkbook ...

Private Sub Workbook_Open()
    SelectSlaveBook
End Sub

... теперь закройте основную рабочую книгу (в вашем случае рабочую книгу A ) и откройте ее снова.

Вам будет предложено указать местонахождение рабочей книги "Slave".(учебное пособие B ).

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

Конечно,если вам нужны настройки для точного соответствия вашим требованиям, это всегда возможно.

Надеюсь, это сработает для вас.

...