目前,我有一个名为SRC
的源文件,其索引为Ci
一些列Cn
。该文件在第一列上被索引而没有重复,然后根据情况从一列中读取了数据。 (数据是每个指数的价格,日期等)。
我有一些目标Excel文件(称为A
,B
,C
等),我必须在其中查找每个匹配索引的对应列在我的来源SRC
中。
当前,我正在使用命名范围和VLOOKUP
来找到匹配的索引和相应的数据:
VLOOKUP($A6;price_data;3;FALSE)
此解决方案有效,但是我的问题是文件大小。使用命名范围甚至直接引用另一个文件都会导致Excel将数据从我的SRC
到我的每个目标文件A, B, C, ...
问题本身:如何在不增加目标文件大小的情况下从源文件中查找数据?
具有两个文件的附加测试: A)仍将命名范围链接到另一个文件,并且B)我删除了命名范围,未修改任何方程式。然后将两个文件重命名为.zip,以检查内容。
文件A包含目录xl / externalLinks,带有一个文件externalLink1.xml,其大小与我的原始SRC大小相同。
文件B不包含xl / externalLinks,并且大小非常小。 A = 1,2 MB,B = 25 kB。
答案 0 :(得分:0)
一个选择是创建一个vba函数并将其与打开的文件链接。打开文件时它将获取/更新值。您会得到想要的东西,但是打开文件的速度会变慢。
EDIT1
这就是我所做的
只有主文件的大小不同
答案 1 :(得分:0)
在VBA解决方案下面找到,您可以将此功能与打开的工作簿链接,它将更新您的数据
我也更新了vba_lookup,其中包含一些现已修复的错误。
我还插入了一个测试电话,您可以根据您的数据进行检查。
Function vba_lookup(lookup_value, lookup_range As Range, column_position As Integer)
Dim found_value As Range
Dim returning_value As Range
On Error GoTo NOTFOUND
Set found_value = lookup_range.Columns(1).Find(lookup_value, LookAt:=XlLookAt.xlWhole)
Set returning_value = found_value.Offset(0, column_position - 1)
vba_lookup = returning_value.Value
Exit Function
NOTFOUND:
vba_lookup = "#N/A"
End Function
Sub test_vlookup_from_other_file()
Call vlookup_from_other_file("Main", "F2:F11", "A2:A11", 2, "C:\Users\user\Desktop", "temp.xlsx", "Sheet3", "E8:F16")
End Sub
Sub vlookup_from_other_file(main_sheet_name As String, paste_col_range As String, search_col_range As String, column_position As Integer, file_directory_path As String, file_name As String, file_sheet_name As String, lookup_range As String)
'Application.ScreenUpdating = False
Dim this_workbook As Workbook
Set this_workbook = Application.ThisWorkbook
Workbooks.Open Filename:=file_directory_path & "\" & file_name
this_workbook.Activate
lookup_range = "[" & file_name & "]" & file_sheet_name & "!" & lookup_range
row_end = Range(paste_col_range).Rows.Count
For row_num = 1 To row_end
Sheets(main_sheet_name).Range(paste_col_range).Cells(row_num, 1).Value = vba_lookup(Sheets(main_sheet_name).Range(search_col_range).Cells(row_num, 1).Value, Range(lookup_range), column_position)
Next
Windows(file_name).Close
'Application.ScreenUpdating = True
End Sub
函数参数如下