如何将 excel 索引匹配转换为 Access - 加入 4 个表

Posted

技术标签:

【中文标题】如何将 excel 索引匹配转换为 Access - 加入 4 个表【英文标题】:How to transform excel index match to Access - joining 4 tables 【发布时间】:2019-11-23 22:41:15 【问题描述】:

我是 Access 新手,想请教一下。我在 Excel 中有数据(大约 5 万行)。在第一张纸上,有我的代码(区分大小写),在其他纸上(2 3 4)我有我“vlookup”到第一张纸的数据。唯一代码在每张纸上,但在 sheet1 上有更多代码 - 并非 sheet1 中的所有代码都有来自其他工作表的附加信息。

Excel 不区分大小写,因此我将索引和匹配结合使用。但是 5 万行对于 Excel 来说太多了,我需要将它放入 MS Access。 在 sheet1 上有一个由另一个程序随机生成的唯一代码,它是数字和大小写字母的组合。我需要显示所有这些并显示其他工作表中的其他信息。

所以我想为 50000 行显示类似的内容。

Code(from sheet1) | FirstName(from sheet2) | LastName(from sheet3)| Adress(from sheet4)
5kj7tfR           |Jane                    | White                | London 3

这是我的数据: 问题是,例如,如果缺少工作表 4 上的代码(我没有地址),则 Access 只会显示工作表 1 中的代码,并且即使工作表 2 上存在名字等附加信息也会丢失。

我试过了,但是当 Excel Access 中的某些内容为空白时,不会显示其他工作表中的任何数据。假设在 sheet1 上是区分大小写的代码,在 sheet2 名字上,在 sheet 3 上姓氏和在 sheet4 地址上。我需要 Access 以显示所有其他工作表中的所有代码和信息。

select sheet1.code, Tab.FirstName, Tab.LastName, Tab.Adress
from Sheet1
left join
(
select sheet1.code, sheet2.FirstName, sheet3.LastName, sheet4.Adress
from ((sheet1
left join  sheet2 on (sheet2.code=sheet1.code) and (StrComp(sheet1.code,sheet2.code,0)=0))
left join sheet3 on (sheet3.code=sheet1.code) and (StrComp(sheet1.code,sheet3.code,0)=0))
left join sheet4 on (sheet4.code=sheet1.code) and (StrComp(sheet1.code,sheet4.code,0)=0)
) as Tab
on Sheet1.ID = Tab.ID --...these IDs made Access while importing Excel to Access.

即使某些单元格是空的,如何显示所有数据的所有代码?

谢谢!

【问题讨论】:

Tab 数据从何而来?可能不应该链接 ID 字段。自动编号字段很少同步。编辑问题以显示示例数据。 需要一个包含所有可能代码值的数据集,以便工作表加入。 我在问题中添加了一些附加信息。我无法编写所有可能的代码,因为它们是独一无二的——我有成千上万的代码。我使用了辅助选项卡来帮助我加入表格,因为当我只加入没有此选项卡的表格(这是连接的组合)时,它只显示包含所有工作表的所有信息的行)。虽然这个有用的选项卡我发现即使其他工作表中没有此代码的数据,也会显示 Sheet1 中的代码。但是 Access 显示 sheet1 中的代码以及其他列中的所有信息,或者 sheet1 中的代码和 Access 中的所有其他列都是空的。 数据应该以文本表格的形式提供,而不是图像。但是,我可以看到 Sheet1 具有所有可能的代码。假设代码在所有表中都是唯一的,则其他工作表加入 Sheet1 以实现所需的输出应该没有问题。但是我以前从来没有考虑过case,我得做一些测试。 您没有显示 Tab 数据集,也没有显示您如何构建它。 【参考方案1】:

我的研究表明不能强制在 Access 中的链接字段上区分大小写。 StrComp() 用于应用过滤条件并强制拒绝两个表之间不区分大小写的匹配。我可以得到一个 UNION 来显示所有区分大小写的匹配,但不能对代码值进行分组,因为分组不区分大小写。我能看到的唯一选项涉及 VBA 将文本转换为 HEX 并使用该值来加入、排序、分组。

将此函数放在一个通用模块中(位于Case-Sensitive Sort)。

Function StrToHex(S As Variant) As Variant
'
' Converts a string to a series of hexadecimal digits.
' For example, StrToHex(Chr(9) & "A~") returns 09417E.
'
   Dim Temp As String, I As Integer
      If VarType(S) <> 8 Then
         StrToHex = S
      Else
         Temp = ""
      For I = 1 To Len(S)
         Temp = Temp & Format(Hex(Asc(Mid(S, I, 1))), "00")
      Next I
         StrToHex = Temp
      End If
End Function

在查询中调用该函数会返回所需的输出。复制/粘贴或键入查询生成器的 SQLView。我最初在代码字段上使用连接构建查询,然后切换到 SQLView 并添加到函数调用中。 请勿在设计视图中打开查询。访问查询设计器无法解析这些联接。必须加入嵌套子查询才能启用设计视图。

请注意,address 用两个 d 拼写,您可以根据需要进行修改。

SELECT Sheet1.code, [time], [type of error], FirstName, LastName, age, address
FROM Sheet4 RIGHT JOIN (Sheet3 RIGHT JOIN (Sheet2 RIGHT JOIN Sheet1 
     ON StrToHex([Sheet2].[code]) = StrToHex([Sheet1].[code])) 
     ON StrToHex([Sheet3].[code]) = StrToHex([Sheet1].[code])) 
     ON StrToHex([Sheet4].[code]) = StrToHex([Sheet1].[code]);

【讨论】:

以上是关于如何将 excel 索引匹配转换为 Access - 加入 4 个表的主要内容,如果未能解决你的问题,请参考以下文章

如何在将导入 Access 的 Excel 中转换此文本日期?

运行时错误 13 类型不匹配,将数据从 Access 传输到 Excel

Excel 2010 索引匹配 VBA

Access VBA:删除单元格值与 Access 表中的值匹配的 Excel 行

如何将access中的数据导出为EXCEL文件?

导入 Excel 电子表格时 MS Access 2013 类型转换失败