Excel-从另一个xls文件读取数据而不复制内容

时间:2018-10-31 12:32:19

标签: excel

目前,我有一个名为SRC的源文件,其索引为Ci一些列Cn。该文件在第一列上被索引而没有重复,然后根据情况从一列中读取了数据。 (数据是每个指数的价格,日期等)。

我有一些目标Excel文件(称为ABC等),我必须在其中查找每个匹配索引的对应列在我的来源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。

2 个答案:

答案 0 :(得分:0)

一个选择是创建一个vba函数并将其与打开的文件链接。打开文件时它将获取/更新值。您会得到想要的东西,但是打开文件的速度会变慢。

EDIT1

这就是我所做的

  1. 使用一个包含ID的列创建了一个名为main的文件
  2. 创建了另一个文件,将其命名为详细信息并在其中创建了两列 产品ID和产品名称。
  3. 同时保存了
  4. 检查文件大小
  5. 同时打开这两个文件并将vlookup插入正在获取的主文件中 详细信息文件中主文件中存在的ID的产品名称。
  6. 保存主文件并关闭两者
  7. 再次检查文件大小

只有主文件的大小不同

答案 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

函数参数如下

  • main_sheet_name:函数将粘贴获取的值的范围的工作表名称
  • paste_col_range:将粘贴值的列
  • search_col_range:要搜索的列
  • column_position:找到匹配项后要返回的数据列的列位置
  • file_name:函数将在其中搜索值的文件名
  • file_directory_path:以上文件的目录路径
  • file_sheet_name:以上文件的工作表名称
  • lookup_range:函数必须在其中搜索值的范围