根据另一个电子表格中的选定数据显示电子表格中的数据

时间:2019-03-20 20:04:55

标签: excel excel-2010

这个问题可能是非常菜鸟,但无论如何,我在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”的记录时,只显示电子表格“ B”中具有相同DATE,CODE和CORRL值的记录

示例: 如果我位于电子表格“ B”的电子表格“ A”的第一行中,则仅必须显示前2条记录,即:

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

以此类推

谢谢

1 个答案:

答案 0 :(得分:0)

我不得不说,这是我所见过的对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编辑器中创建一个新的 Module ,并粘贴以下代码...

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 ),然后再次打开它。

系统将提示您输入“从属”工作簿(工作簿 B )的位置。

一旦指定了该位置,请选择要选择的内容,并使所有内容保持不变,它将为您工作。

当然,如果需要进行调整以满足您的确切要求,那总是有可能的。

我希望它对您有用。