替换单元格中的数据部分以获取数千个Excel数据

时间:2014-05-29 23:04:40

标签: excel excel-vba vba

我有一个包含列数据的大型电子表格,如:

ABC:1:I.0
ABC:1:I.1 
ABC:1:I.2
ABC:1:I.3
ABC:2:I.0
ABC:2:I.1
ABC:2:I.2
ABC:2:I.3
ABC:3:I.0
ABC:3:I.2
ABC:3:I.3
ABC:4:I.0
ABC:4:I.1
ABC:4:I.2
ABC:4:I.3
ABC:5:I.0
ABC:5:I.1
ABC:5:I.2
ABC:5:I.3
ETC.

我需要用以下内容替换上面的内容:

ABC:I.Data[1].0
ABC:I.Data[1].1
ABC:I.Data[1].2
ABC:I.Data[1].3
ABC:I.Data[2].0
ABC:I.Data[2].1
ABC:I.Data[2].2
ABC:I.Data[2].3
ABC:I.Data[3].0
ABC:I.Data[3].2
ABC:I.Data[3].3
ABC:I.Data[4].0
ABC:I.Data[4].1
ABC:I.Data[4].2
ABC:I.Data[4].3
ABC:I.Data[5].0
ABC:I.Data[5].1
ABC:I.Data[5].2
ABC:I.Data[5].3
ETC.

以下是数据样本,大多数数据遵循类似的格式,但命名" ABC"除外,它们的大小可能不同,因此它可能是" ABCD&# 34;除了字母" I",它可以是" O"同样。此外,有些可能缺少某些值,例如数据中缺少的ABC:3:I.1。我不太熟悉excel公式或VBA代码。有谁知道如何做到这一点?我不喜欢它必须采用哪种方法,因为如果有人向我提供VBA解决方案,我不介意学习一些VBA代码。

我在考虑使用某种循环和一些条件语句。

谢谢!

4 个答案:

答案 0 :(得分:1)

Please try

=LEFT(F11,FIND(":",F11))&MID(F11,FIND(":",F11,6)+1,1)&".Data["&MID(F11,FIND(":",F11,2)+1,1)&"]."&RIGHT(F11,1)  

向下复制到适合,假设放在Row11中,并且您的数据在RowF中从ColumnF开始。


趣闻:

  1. 首次发布此A时,它尝试仅解决列表示例输入和输出。我暂时删除了该版本,同时解决了ABC表中的内容ABCD有时可能I,而O的内容有时可能是{{1}}。
  2. OP发布了我编辑的答案,没有任何明显的变化,但显示为删除了两个字符。在编辑之前,OP公式的副本显示语法错误。
  3. OP建议对我的回答进行编辑,但审核流程拒绝了这一点。碰巧,我认为编辑建议不正确。
  4. 我再次编辑了我的答案,包括这些“好奇心”,并在答案中匹配OP使用的单元格引用。

答案 1 :(得分:1)

=LEFT(A1,SEARCH(":",A1)) & MID(A1, SEARCH(".",A1)-1, 2) &
  "Data[" & MID(A1,SEARCH(":",A1)+1,1) & "]" & RIGHT(A1,2)

答案 2 :(得分:1)

在pnuts的帮助下,我能够找到自己的解决方案:

=LEFT(F11,LEN(F11)-5)&MID(F11,LEN(F11)-2,2)&"Data["&MID(F11,LEN(F11)-4,1)&"]"&RIGHT(F11,2)

我的解决方案基于以下事实:字符串ABC:1:I:0中最后六个值的长度对于我拥有的所有数据的大小总是相同的,因此您在我的LEN(F11)-some number中看到ABC码。大小改变的字符串的唯一部分是第一部分,在这种情况下ABCDEF也可以是{{1}}等。

答案 3 :(得分:0)

如果你想使用公式而不是VBA,一个简单的选择是使用Text To Columns选项将数据拆分为4列 - 首先使用冒号作为分隔符进行拆分,然后使用全站/期间作为分隔符。

一旦你有4列数据(每个块一个),你可以使用Concatenate函数加入它们并添加额外的字符:=CONCATENATE(A1,":",C1,".","Data[",B1,"].",D1)

如果你有额外/替代字符(例如ABCD而不是ABC),只要你有相同的分隔符,这仍然可以工作,但显然你需要测试以确保。