我正在寻找 VBA 解决方案。我的手机里有一个联系人和几个电话号码。 我需要将每个数字移动到每种类型的列中。顶部是数据的样子。 底部就是我需要的。 我不知道从哪里开始。这必须在数百个工作簿中的数十个单元格上完成。 所以任何手动操作都无法解决问题。
我不知道从哪里开始。
我会提供一些帮助你入门的东西。
我对 Excel 的了解不够,无法建议是否可以严格使用公式来完成此操作。这是我可以使用 Excel 2021 和 Power Query 执行的操作。
选择包含标题的数据范围,启动 Power Query:数据 > GetData > 来自表/范围(在弹出窗口中,确保选中“我的表有标题”)
在 PQ 中将 ,( 替换为 (
继续在 PQ 中根据特殊字符进行分割 - 换行:#(lf)
在 PQ 中继续 - 选择所有电话信息列 > 变换 > 逆透视 (可以删除创建的不需要的属性列)
继续在 PQ 中以逗号分隔电话信息
到目前为止结果如下(关闭保存到工作表或在PQ中继续)
联系方式1 | 价值.1 | 价值.2 |
---|---|---|
简·多伊 44 | (101)999-2657 | 无线 |
简·多伊 44 | (101)999-3907 | 固定电话 |
简·多伊 44 | (101)999-5059 | 其他手机 |
简·多伊 44 | (101)999-0766 | 固定电话 |
PQ 根据我在功能区上的选择生成的代码如下所示:
let
Source = Excel.CurrentWorkbook(){[Name="Table11"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Contact", type text}}),
#"Replaced Value" = Table.ReplaceValue(#"Changed Type",",(","(",Replacer.ReplaceText,{"Contact"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value", "Contact", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), {"Contact.1", "Contact.2", "Contact.3", "Contact.4", "Contact.5"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Contact.1", type text}, {"Contact.2", type text}, {"Contact.3", type text}, {"Contact.4", type text}, {"Contact.5", type text}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type1", {"Contact.1"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Removed Columns", "Value", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Value.1", "Value.2"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Value.1", type text}, {"Value.2", type text}})
in
#"Changed Type2"
TRANSFORM First(Contacts.PhoneNum) AS FirstOfPhoneNum
SELECT Contacts.Contact
FROM Contacts
GROUP BY Contacts.Contact
PIVOT [PhoneType] & DCount("*","Contacts","Contact='" & [Contact] & "' AND PhoneType='" & [PhoneType] & "' AND ID<=" & [ID])
IN("Wireless1","Wireless2","Landline1","Landline2","Otherphone1","Otherphone2");
我能想到的任何其他事情都会涉及 VBA。