大替换具有混合字母和数字的列的公式,以便最终排序和GIS导入

时间:2017-12-28 14:14:51

标签: excel

作为最终表加入的大数据转换工作的一部分,我在Excel中创建自定义排序字段以迁移到GIS,但需要格式化某个字段,排序顺序将按照这种方式运行到真正的网站序列。我正在使用Excel 2010.数据是〜250,000条记录(最终是数百万条记录)。

Problem Field        How Excel Sorts It      The Needed Sort
585                  585                     585
979                  979                     585A
1175                 1175                    585B
1227A                1227A                   585C
585A                 585A                    979
585B                 585B                    979Q
585C                 585C                    979R
979Q                 797Q                    1175
979R                 979R                    1227A
B11                  B1                      B1
B1                   B11                     B9
B9                   B9                      B11
B90                  B90                     B90

同事和我决定通过创建一个临时站点字段来解决这个问题。 以字母开头(将相应的第一个字母更改为大号):

 B1  -->  20000001
 B11 -->  20000011
 G22 -->  70000022

和 以字母结尾(更改带小数的结束字母以保留排序顺序):

587A   -->  587.01
587M   -->  587.13

如果它以字母开头并以字母结尾,请保持整个字符串不变。 我有两个新字段,“StartsWithLetter”和“EndsWithLetter”,每个字段都有一个True或False语句来显示哪些字段有字母和哪里。

=SUM(COUNTIF(A4,{"a*","b*","c*","d*","e*","f*","g*","h*","i*","j*","k*","l*","m*","n*","o*","p*","q*","r*","s*","t*","u*","v*","w*","x*","y*","z*"}))>0

然后复制/粘贴整个字段以仅显示字符串的值为TRUE或FALSE。

我已经尝试设置更多字段来替换,“CorrectLeft”和“CorrectRight”用于最终合并。我得到了正确的代码才能正常工作:

=IF(RIGHT(A2,1)="A",REPLACE(A2,LEN(A2),1,".01"),IF(RIGHT(A2,1)="B",REPLACE(A2,LEN(A2),1,".02"),IF(RIGHT(A2,1)="C",REPLACE(A2,LEN(A2),1,".03"))))…etc.

但是我很难为专栏的左侧做类似的事情。

任何人对我的左派代码有什么想法?

我的代码:

=IF(LEFT(A2,1)="A",REPLACE(A2,LEN(A2),1,"100000"),IF(LEFT(A2,1)="B",REPLACE(A2,LEN(A2),1,"200000"),IF(LEFT(A2,1)="C",REPLACE(A2,LEN(A2),1,"300000"),IF(LEFT(A2,1)="D",REPLACE(A2,LEN(A2),1,"400000"),IF(LEFT(A2,1)="E",REPLACE(A2,LEN(A2),1,"500000"),IF(LEFT(A2,1)="F",REPLACE(A2,LEN(A2),1,"600000"),IF(LEFT(A2,1)="G",REPLACE(A2,LEN(A2),1,"700000"),IF(LEFT(A2,1)="H",REPLACE(A2,LEN(A2),1,"800000"),IF(LEFT(A2,1)="I",REPLACE(A2,LEN(A2),1,"900000"),IF(LEFT(A2,1)="J",REPLACE(A2,LEN(A2),1,"1000000"),IF(LEFT(A2,1)="K",REPLACE(A2,LEN(A2),1,"1100000"),IF(LEFT(A2,1)="L",REPLACE(A2,LEN(A2),1,"1200000"),IF(LEFT(A2,1)="M",REPLACE(A2,LEN(A2),1,"1300000"),IF(LEFT(A2,1)="N",REPLACE(A2,LEN(A2),1,"1400000"),IF(LEFT(A2,1)="O",REPLACE(A2,LEN(A2),1,"1500000"),IF(LEFT(A2,1)="P",REPLACE(A2,LEN(A2),1,"1600000"),IF(LEFT(A2,1)="Q",REPLACE(A2,LEN(A2),1,"1700000"),IF(LEFT(A2,1)="R",REPLACE(A2,LEN(A2),1,"1800000"),IF(LEFT(A2,1)="S",REPLACE(A2,LEN(A2),1,"1900000"),IF(LEFT(A2,1)="T",REPLACE(A2,LEN(A2),1,"2000000"),IF(LEFT(A2,1)="U",REPLACE(A2,LEN(A2),1,"2100000"),IF(LEFT(A2,1)="V",REPLACE(A2,LEN(A2),1,"2200000"),IF(LEFT(A2,1)="W",REPLACE(A2,LEN(A2),1,"2300000"),IF(LEFT(A2,1)="X",REPLACE(A2,LEN(A2),1,"2400000"),IF(LEFT(A2,1)="Y",REPLACE(A2,LEN(A2),1,"2500000"),IF(LEFT(A2,1)="Z",REPLACE(A2,LEN(A2),1,"2600000")))))))))))))))))))))))))))

如果“CorrectLeft”和“CorrectRight”字段正常工作,我可以构建一个这样的公式,如果它们有字母,则合并所有已校正的字段。

=IF(AND(B2="FALSE",C2="FALSE"),A2),IF(AND(B2="FALSE",C2="TRUE"),D2),IF(AND(B2="TRUE",C2="FALSE"),E2),IF(AND(B2="TRUE",C2="TRUE"),A2)

我还尝试将几个函数组合成一个综合公式,但我认为最好在修改效率之前让这些单独的公式起作用。

3 个答案:

答案 0 :(得分:0)

如果问题字段位于col A:

//copy this down   
=TEXT(A1,"###")

这将创建另一个应按您希望排序的列。

答案 1 :(得分:0)

如果问题列为A,请添加排序列:

// copy these cells down
=IFERROR(IF(LEFT(A1,1)+0=LEFT(A1,1)+0,A1,"error"),CONCATENATE(LEFT(A1,1), TEXT(RIGHT(A1,LEN(A1)-1),"000000") ))

使用此公式,值B1变为(在排序列中)B000001,值B22变为B000022,值c65345变为c065345等。

如果您需要更长的最小数字集,请将公式中的“000000”更改为您需要的位数。

请注意,这仅适用于第二个数字始终为数字的情况,这与数据集的情况相似。例如,值AB23C会破坏这一点。

答案 2 :(得分:0)

我有一个解决方案,但它很难看。

将每个单元格的字符串分解为一个字符= IFERROR(VALUE(MID($ A2,COLUMNS($ A $ 2:A $ 2),1)),"")。您只需将其拖动到值的右侧即可获得最长值的最大长度。因此需要16个字符= 16个单元格。

接下来,在右边,= ISERR(VALUE(LEFT(A2,1))) 接下来,在右边,= ISERR(VALUE(RIGHT(A2,1)))

最后,在此右侧,= CONCATENATE(CONCATENATE(IF(ISERR(VALUE(LEFT(A2,1))),LEFT(A2,1),""),10000 + CONCATENATE(B2,C2,D2,E2,F2,G2)),IF(ISERR(VALUE(RIGHT(A2,1))),RIGHT(A2,1),"&#34))

10000需要比数据集中的最大位数多一个0。您的示例是4位数,因此使用了10,000。如果最大计数为16,那么它将是10,000,000,000,000,000。

还需要修改内部连接以添加用于第一个公式的每个列。此示例使用6,如果最大长度为16,则再添加10列,例如(H2,I2,......)。

然后,如果您对此结果进行排序,excel将弹出一个并选择第二个选项,分别对数字和文本进行排序和处理。