在Excel中创build一个数据库

我正在使用Excel中的数据库。 我会尽量简化。

例如,

我有一个vlookup范围/水果arrays,谁喜欢每个水果。

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 

我需要能够在我的数据库中find水果“苹果”,并在数据库中创build新的信息行,使其看起来像下面的内容。

  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 

由于我将在至less1000行以上工作,所以我需要知道是否有一个以任何方式加速这个过程的过程。

有没有人有任何build议或链接/文章,可以指出我在正确的方向?

随意评论或提出任何问题,可以帮助导致一个很好的答案。

谢谢

假设你的Fruit-Person表是表2,Fruit-Vendor是表3.水果是这里跨表的共同字段。 您将需要使用Fruit列中的唯一值构build表1。 (build立一个具有独特价值的桌子有许多方法,如果你不知道,他们应该可以在线获得)

我列出了Excel-2013的stream程,在旧版本中可能略有不同。

第0步:

根据前面的描述,你有3个表格。 表1具有独特的值

步骤1:

将它们全部转换成表格。 Alt + N >> T,或者selectA1:A5 >> Insert >> Table。 勾选 Choose My Table has Headers。 在这里输入图像说明

对所有3个表重复这个过程。 他们应该是这样的: 在这里输入图像说明

第2步:

在多个范围创build数据透视表A)在表1上创build数据透视表(Insert >> PivotTable)。 勾选“将数据添加到数据模型”。 IMP 在这里输入图像说明

B)在数据透视表字段中,ALL; 你应该看到所有的3个表格 在这里输入图像说明

第三步:

创build关系在“分析”选项卡中,单击“关系”。 一个说pipe理关系的框应该打开。 这个想法是build立关系。

A)尝试build立表1和表2之间的关系。新build>>select以下选项:

表:表2

专栏(外文):水果

相关表格:表1

相关专栏(主要):水果 在这里输入图像说明

B)现在我们尝试在表1和3之间build立新的>>select以下选项:

表:表3

专栏(外文):水果

相关表格:表1

相关专栏(主要):水果

它应该是这样的: 在这里输入图像说明

步骤4:

形成枢轴A)从表1得到果实,表2中的人,来自表3的供应商(以该顺序)作为行标签 在这里输入图像说明

B)现在,表2 /水果和表3 /水果需要作为价值标签。 在这里输入图像说明

这样形成的桌子几乎是你的决赛桌。 你想要的行将在D和E两列都有1 。 您可以通过过滤/粘贴将这些行closures。

(作为一个过程,粘贴图像并不是目前stream行的方法,但是如果没有它们,我不可能更好地解释它)

我对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 

首先循环查找人员列表,在供应商列表中find他们的第一个实例:

 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 

最后再循环下一个人,直到到达最后一行数据。

就像你想的那样?

开始时可能很困难,但我build议查看INDEX MATCHfunction。 一起使用,他们可以做什么vlookup做,但有一点了解,他们是更加灵活,可能会更好地适合您的需求:) http://fiveminutelessons.com/learn-microsoft-excel/how-use-index -match-代替,VLOOKUP

可能会有帮助,或谷歌find适合你的教程

特别是对于你的问题,最难的部分将匹配每个供应商,每个人的水果… VBA可能是必要的