使用列值作为类别转换Excel表

时间:2018-10-31 19:16:22

标签: excel vba pivot-table

我有一个Excel表格,其数据结构类似于:

declare @table table (script_id int identity(1,1), script varchar(4000))
insert into @table
values
('Sending information to a@gmail.com, please also send to a@gmail.com          
           and b@gmail.com'),
('Sending information to a@gmail.com, b@gmail.com.')


select distinct 
    --case statement removed periods from end of email for when it's at the end of a sentence
    case when right(x.Item,1) != 'm' then left(x.Item,len(x.Item) - 1) else x.Item end
from @table t
cross apply dbo.DelimitedSplit8K(script,' ') x
where x.Item like '%@gmail.com%'

是否有一种简单的方法来创建一个或多个新表,其中一个列表示类别,并且该列中的值是另一列中的值?例如,如果我选择“角色”,则上述列表的输出表是:

Name                 Team        Role        Level   Laptop Monitor
Cheryle Parish       Archers     Programmer  Level2  Dell   2
Shandi Kime          Archers     Programmer  Level2  Dell   1
Edwardo Cookson      Archers     Programmer  Level1  HP     3
Voncile Deak         Archers     Programmer  Level2  HP     3
Boyd Cueva           Climbers    Tester      Level2  HP     2
Caryn Kear           Climbers    Programmer  Level2  Apple  1
Kirsten Hirt         Climbers    Tester      Level2  Apple  3
Ayana Mayfield       Climbers    Programmer  Level2  Dell   2
Venetta Embree       Archers     Programmer  Level2  Dell   3
Herb Obryan          Archers     Programmer  Level2  Dell   2
Isobel Steinmetz     Explorers   Tester      Level2  Apple  3
Valeri Eisen         Explorers   Programmer  Level1  Dell   1
Anibal Plumlee       Explorers   Programmer  Level1  Dell   3
Floretta Tunney      Explorers   Tester      Level1  Apple  1
Lilliana Klutts      Explorers   Programmer  Level1  HP     2
Gaston Custodio      Explorers   Programmer  Level1  HP     2
Jared  Phaneuf       Explorers   Manager     Level1  Dell   3
Melvin Monsivais     Climbers    Manager     Level2  HP     2

源表中的其他条目在新表中被丢弃。理想情况下,如果有任何重复项,则忽略重复项,并且新表仅具有唯一值。 VBA解决方案会起作用,尝试避免使用外部程序。

我们可以选择任何列作为新表中的分类类别。例如,我们可以生成一个拥有特定笔记本电脑品牌的人的列表。

我能想到的最接近的方法是使用数据透视表来生成仍需要复制和粘贴类型编辑的内容。

Programmer           Manager              Tester
Cheryle Parish       Jared  Phaneuf       Boyd Cueva           
Shandi Kime          Melvin Monsivais     Floretta Tunney      
Edwardo Cookson                           Isobel Steinmetz     
Voncile Deak                              Kirsten Hirt         
Caryn Kear
Ayana Mayfield
Venetta Embree       
Herb Obryan          
Valeri Eisen         
Anibal Plumlee       
Lilliana Klutts      
Gaston Custodio      

我发现了与Excel Categorized table by column类似的问题,但是答案不能解决上述问题。

2 个答案:

答案 0 :(得分:0)

我知道这并不是您想要的,但这可能是一个折衷方案,可以让您与众不同,而不必强迫您编写VBA来实现这一目标,这可能是唯一真正获得所需内容的真正方法。

您可以在此处创建数据透视表,并将Role放入列中,将Name放入行中,再将Name放入Values中,您将获得一个{ {1}}(如果名称属于特定的1)。您可以使用枢轴表将RoleRole或其他任何内容轻松地换出Level

您也许可以构建一些数据来从该数据透视表中获取确切需要的信息,但是同样……这会花费更多的精力:

enter image description here

答案 1 :(得分:0)

我认为可以使用公式来完成。可能工作量太大,甚至难以维护,但这两个链接应该是一个好的开始(对不起,您没有时间提供完整的答案):