我正在使用excel中的数据库。我会尽量让它变得简单。
例如,
我有一个vlookup系列/水果系列,谁喜欢每种水果。
Fruit - Person
1. Apple – DeShoun
2. Apple – John
3. Apple – Scott
4. Pear – Scott
5. Strawberries – John… ect
在我的数据库中,我有一份水果清单和销售它的供应商
Fruit - Vendor
1. Apple – Sprouts
2. Apple – Walmart
3. Apple – Trader Joe’s
4. Strawberries – Abel Farms
5. Banana – Sprouts
6. Pear – Sprouts…. ect
我需要能够在我的数据库中找到水果“apple”,并在数据库中创建新的信息行,使其看起来如下所示。
Fruit - Vendor - Person
1. Apple – Sprouts - DeShoun
2. Apple – Walmart - DeShoun
3. Apple – Trader Joe’s - DeShoun
4. Apple – Sprouts - John
5. Apple – Walmart – John
6. Apple – Trader Joe’s - John
7. Apple – Sprouts - Scott
8. Apple – Walmart - Scott
9. Apple – Trader Joe’s – Scott
10. Strawberries – Abel Farms - John
11. Banana – Sprouts - #N/A
12. Pear – Sprouts - Scott
由于我将处理至少1000多行,我需要知道是否存在以任何方式加速这一过程的过程。
有没有人有任何建议或链接/文章可以指出我正确的方向?
随意发表评论或提出任何有助于获得良好答案的问题。
由于
答案 0 :(得分:1)
让我们说你的Fruit-Person表是表2,Fruit-Vendor是表3. Fruit是表格中的常用字段。您需要使用Fruit列中的唯一值构建表1。 (有许多方法可以构建具有唯一值的表格,如果您不知道,它们应该可以在线获取)
我列出了Excel-2013的流程,旧版本可能略有不同。
逐个将它们全部转换为表格。 Alt + N>> T,或者,选择A1:A5>>插入>>表。 勾选选择我的表有标题。
在多个范围上创建数据透视表 A)在表1上创建数据透视表(插入>>数据透视表)。勾选检查"将此数据添加到数据模型"。的 IMP 强>
创建关系 在“分析”选项卡中,单击“关系”。一个表示管理关系的框应该打开。我们的想法是建立关系。
A)尝试在表1和表2之间建立关系。 新>>选择以下选项:
表:表2
专栏(外国):水果
相关表格:表1
B)让我们尝试在表1和表1之间建立它。 3 新>>选择以下选项:
表:表3
专栏(外国):水果
相关表格:表1
相关栏(小学):水果
形成枢轴 A)从表1中得到水果,表2中的人,表3中的供应商(按此顺序)作为行标签
B)现在,Table2 / Fruit和Table3 / Fruit需要作为Value Labels。
这样形成的桌子几乎就是决赛桌。您想要的行将是,其中D列和E都为1 。您可以通过过滤/粘贴值来关闭这些行。
(作为一个过程,粘贴图像似乎不是流行的方法,但如果没有它们,我无法在视觉上更好地解释它)
答案 1 :(得分:0)
一开始可能很难掌握,但我建议您查看INDEX MATCH函数。一起使用它们可以完成vlookup的功能,但是稍微了解它们会更灵活,可能更适合您的需求:) http://fiveminutelessons.com/learn-microsoft-excel/how-use-index-match-instead-vlookup
可能会有帮助,或谷歌找到适合你的教程
特别针对您的问题,最困难的部分是匹配每个供应商,每个水果的人......可能需要VBA
答案 2 :(得分:0)
我对VBA很新,但是有点小提琴,这似乎与你描述的一样(作为一个潜在的例子......)。已将每个数据表放在单独的工作表中。
Sub FruityPerson_Matching()
Dim strFruit As String, strPerson As String, strVendor As String 'to hold text.
Dim myWB As Workbook, myWS_P As Worksheet, myWS_V As Worksheet, myWS_C As Worksheet
Dim LastRow As Integer, n As Integer, iNewRow As Integer
Dim rFruit As Range, checkCell As Range
Set myWB = Application.ActiveWorkbook
Set myWS_P = myWB.Worksheets("Person")
Set myWS_V = myWB.Worksheets("Vendor")
Set myWS_C = myWB.Worksheets("Combined")
LastRow = myWS_P.Cells(myWS_P.Rows.Count, "A").End(xlUp).Row
首先循环遍历人员列表,在供应商列表中找到他们的第一个水果实例:
For n = 2 To LastRow
strFruit = Cells(n, 1).Value
strPerson = Cells(n, 2).Value
Set rFruit = myWS_V.Range("A:B").Find(What:=strFruit, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not rFruit Is Nothing Then
Set checkCell = rFruit 'For checking when findnext gets back to original cell.
strVendor = myWS_V.Cells(rFruit.Row, 2).Value
在最终的组合数据表中将其添加到新行(以确保它为空):
iNewRow = myWS_C.Range("A" & myWS_C.Rows.Count).End(xlUp).Offset(1).Row
myWS_C.Range("A" & iNewRow).Value = strFruit
myWS_C.Range("B" & iNewRow).Value = strVendor
myWS_C.Range("C" & iNewRow).Value = strPerson
由于每个水果的潜在多个供应商,现在为同一个人循环:
Do
Set rFruit = myWS_V.Range("A:B").FindNext(After:=rFruit)
If Not rFruit Is Nothing Then
If rFruit.Address = checkCell.Address Then Exit Do
'Shows: are back at start.
strVendor = myWS_V.Cells(rFruit.Row, 2).Value
iNewRow = myWS_C.Range("A" & myWS_C.Rows.Count).End(xlUp).Offset(1).Row
myWS_C.Range("A" & iNewRow).Value = strFruit
myWS_C.Range("B" & iNewRow).Value = strVendor
myWS_C.Range("C" & iNewRow).Value = strPerson
Else
Exit Do
End If
Loop
Else
'What do if strFruit not found...?
Exit Sub
End If
Next
End Sub
最后转到下一个人循环等,直到到达最后一行数据。
像你想到的那样?