#excel #excel-2010
#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»
Пример: Если я нахожусь в 1-й строке электронной таблицы «A», в электронной таблице «B» должны отображаться только первые 2 записи, то есть:
----------- --------- -------- --------
| DATE | CODE | CORRL | SN |
----------- --------- -------- --------
| 01/03/17 | 110104 | 5 | 182694 |
| 01/03/17 | 110104 | 5 | 571394 |
----------- --------- -------- --------
и так далее
Спасибо
Комментарии:
1. Я полагаю, что у вас происходит пара вещей, из которых VBA может быть более выгодным. Да, вы можете выполнить простые подсчеты, но, похоже, вам нужен какой-то тип change_event для обновления фильтра на листе B на основе вашей activecell.row на листе A. Тем не менее, вы «могли» использовать комбинированное совпадение графы на листе B и фильтровать вручную…
2. Находятся ли рабочие листы в разных книгах?
3. да, Брэд, как я уже говорил ранее, у меня есть 2 электронные таблицы: A.xlsx и B.xlsx
4. @cpastene да, но это можно интерпретировать как 2 листа в одной книге, следовательно, почему я спросил. В любом случае спасибо за ответ.
5. … это также значительно меняет решение.
Ответ №1:
Я должен сказать, что это один из самых разных запросов, которые я видел для функциональности Excel.
Думаю, у меня есть кое-что для вас.
Во-первых, если вы не знакомы с редактором VBA, вы можете получить к нему доступ, нажав Alt F11. Другой способ получить к ней доступ — со вкладки «Разработчик» на вашей ленте, которая по умолчанию скрыта. Чтобы отобразить их, измените ленту, чтобы включить их.
Оттуда вы можете перейти к редактору VBA, а также запускать макросы.
Оттуда добавьте следующий код …
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 amp; "_" amp; strCode amp; "_" amp; 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 amp; "_" amp; .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) и откройте ее снова.
Вам будет предложено указать местоположение «подчиненной» книги (workbook B).
После того, как вы указали это местоположение, выберите то, что вы хотите выбрать, и все параметры останутся неизменными, у вас должно получиться.
Конечно, если требуется доработка в соответствии с вашими конкретными требованиями, это всегда возможно.
Я надеюсь, что это работает для вас.