从Excel中的1个巨大单元格中提取项目


3

我有一个庞大的PC和安装在其上的软件的电子表格。
不幸的是,该报告在一个单元中列出了为PC安装的所有软件。

我需要一个公式或宏,该公式或宏将遍历单元格中的每个软件,并提取所有包含Microsoft单词的软件,并将其放在同一行的下一列中的新单元格中。它必须对找到的每个项目都执行此操作,以便安装的每个Microsoft产品都显示在第1行的单独单元格中。

我尝试了各种方法,但不确定如何获取每个实例的输出。我假设它需要某种数组和循环,但不知道如何执行。

如果需要任何其他信息,请告诉我。
您的帮助将不胜感激。

软件单元如下所示:

“ Adob​​e Flash Player 10插件| 10.3.181.26”;“ Adob​​e Flash Player 11 ActiveX 64位| 11.0.1.152”;“ Adob​​e Reader 9.4.6 | 9.4.6”;“ Altiris部署代理| 1.0.0”;“ BigFix企业客户端| 7.2.5.22”;“ Citrix Access Gateway插件| 4.6.1.2700”;“ Citrix密码管理器插件| 4.6.264.0”;“ Citrix XenApp Web插件| 11.0.0.5357”;“ Microsoft Office 2010的定义更新(KB982726)”;“英特尔(R)图形媒体加速器驱动程序”;“ JXplorer | 3.2.2”;“ Java(TM)6 Update 16 | 6.0.160”;“ McAfee Agent | 4.5.0.1852”;“ McAfee AntiSpyware企业模块| 8.7.0.129”;“ McAfee Encrypted USB Client | 1.5.0”;“ McAfee VirusScan Enterprise | 8.7.0”;“微软。NET Framework 4客户端配置文件| 4.0.30319“;” Microsoft应用程序虚拟化桌面客户端| 4.6.0.1523“;”用于Microsoft Office Outlook的Microsoft会议外接程序| 8.0.6362.187”;“ Microsoft Office Communicator 2007 | 2.0.6362.189“;” Microsoft Office InfoPath MUI(英语)2010 | 14.0.4763.1000”;“ Microsoft Office Live Meeting 2007 | 8.0.6362.187”;“ Microsoft Office Professional Plus 2010 | 14.0.4763.1000”;“ Microsoft Office Visio 2007 Service Pack 2(SP2)”;“ Microsoft Office Visio专业版2007 | 12.0.6425.1000”;“ Microsoft为2007 Microsoft Office程序另存为PDF或XPS加载项| 12.0.4518.1014“;” Microsoft Silverlight | 4.0.60831.0“;” Microsoft Sync Framework运行时v1.0(x86)| 1.0.1215.0“;” Microsoft同步框架服务v1.0(x86)| 1.0.1215.0“;” Microsoft Visual C ++ 2005可再发行-KB2467175 | 8.0.51011“;”微软


顺便说一句,我想像这样将数据输出到单元格中:Microsoft Office Professional Plus 2010 | 14.0.4763.1000
迈克尔

您会说单元中软件项的数量是多少?如果单元格破裂,是否足以容纳Excel中的总列数?
chuff

我忘了Excel 2010有超过16,000列。使用功能区上的内置命令可以轻松完成所需的操作,但是我认为您更喜欢自动解决方案?
chuff

您好,感谢您的答复。我会说每台PC可能安装大约50件物品,所以列肯定足够了。是的,我需要一种自动解决方案,因为它可以用于数千台PC。
迈克尔

Answers:


3

这应该可以完成工作,只需替换工作表和范围即可:

子ExtractSoftware()
    Dim ws作为工作表    
    调光行
    昏暗来源作为范围
    调光范围
    Dim varElement作为变体

    设置ws = Sheets(“ YourSheet”)
    对于lngRow = 1到ws.Range(“ A1000000”)。End(xlUp).Row
        设置rngSource = ws.Cells(lngRow,1)
        设置rng = rngSource.Offset(,1)

        对于Split中的每个varElement(rngSource.Value,“;”)
            如果InStr(varElement,“ Microsoft”)然后
                varElement =修剪(varElement)
                rng.Value = Mid(varElement,2,Len(varElement)-2)
                设置rng = rng.Offset(,1)
            万一
        下一个varElement
    下一个lngRow

结束子

这是一个很好的开始,但是返回所有项目,而不仅仅是Microsoft项目。
安迪·莫尔

1
哦,监督了MS的过滤。我改变了答案。
彼得·艾伯特

我认为您对文本到列的原始注释与查找公式结合使用是一种更灵活的解决方案。
Pynner 2013年

@Pynner:由于Ani Mohr已经提供了该方法的完整解决方案,所以我想提供VBA方法,该方法可以更快地完成工作-并且可以灵活(但随后需要对代码进行一些更改)
Peter Albert

1
@Michael:代码中有两个对工作表的引用-我对其进行了修改,因此您现在只需要在第一条Set语句和范围中更改工作表的名称。然后它应该可以正常工作。
彼得·艾伯特

2

我会使用的组合Find and Replace,和Text to Columns

  1. 将相关列复制到行的末尾。我们将替换一些数据,因此在第二列中执行此操作可以避免在输入错误时丢失数据。(皮带和牙套!)

  2. 使用此Find and Replace函数用两个特殊字符替换Microsoft的所有实例,这两个特殊字符在此列的其他地方都找不到。我经常使用¬`,因为它们很少使用,所以您要用¬`代替Microsoft

  3. 现在使用“ Text to Columns数据”选项卡上的功能。将分隔符设置为您的第一个特殊字符:¬。现在,这应该为您提供带有Microsoft项目前缀的单元格。但是,您还会跟随其他很多东西。

  4. 要删除这些无关紧要的内容,请选择所有包含此信息的列,然后执行另一个Find and Replace。找到以下内容:; *并替换为任何内容(使文本框为空)。这应该剔除您不想要的所有非Microsoft产品。

  5. 最后,你可以做一个重新添加标签,微软Find and Replace`并改变它回到微软

  6. 您可能有一些突出的尾随“”符号。请使用另一个Find and Replace删除它们。

一旦您习惯了这种黑客方式,您就可以很快做到,相信我!


虽然在大多数情况下,您可能需要删除第一列...
Peter Albert

是的,很多时候!
Andi Mohr 2013年

对不起,队友很忙,没有机会检查答案。我将尝试一下,看看我们如何进行。非常感谢您的帮助,不敢相信周围还有这么多人。
2013年

这是一个很好的解决方案,谢谢。我现在将使用它,但是当我需要针对不同产品的数百个其他报告执行此操作时,VBA解决方案也将非常有用。再次感谢
Michael
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.