2012-03-16 65 views
1

我有一个从Access数据库通过SQL查询导出的表。在Excel中,有3列:ID,姓名和电话号码......问题在于电话号码列。用户以各种方式输入数字,因此看起来非常不整洁,我不能将该字段用于其他目的。Excel - 搜索并替换各种字符串

可以说我想看到这些数字的默认方式是:385991234567.所以它有国家代码,比区号,然后是数字......但是所有这些组合在一起。

在数据库中我有这样的投入:

0991234567 - 所以没有国家代码

991234567 - 没有国家代码和区号

385991234567的前导零 - 与+在国家代码前面

99/1234-567 - 用各种字符分隔数字组(我设法通过sql查询中的替换来清除它)。

我想要的是实现我在开始时提到的格式。所以添加国家代码,如果需要删除前导零。另外的问题是一些数字是7位数字,其他的是6位数字(没有国家或地区代码)。我曾尝试通过搜索099来进行替换,但如果它出现在数字中间,它也会发生变化。

我不知道该怎么做。或者甚至是这个问题的正确部分(因为我不知道是否更容易在Excel中通过VBA宏,通过SQL查询或其他)。我不能手工做,因为它的领域约。 100.000个电话号码。

+0

可能的重复:http://stackoverflow.com/questions/501368/phone-number-format-and-验证库(也祝你好运!) – assylias 2012-03-16 12:11:47

+0

垃圾进,垃圾出。对不起,我忍不住自己。 :) 祝你好运! – markblandford 2012-03-16 13:33:25

+0

我在想它有点......是否可以将REPLACE语句与LIKE语句的SQL查询结合起来?像这样:REPLACE(field,'X','Y')其中X LIKE'Z%'...我知道语法是错误的,但我只是给出一个普遍的想法/问题...谢谢 – Peraklo 2012-03-16 13:43:54

回答

1

OK,所以这里是......对于初学者来说,我使用了一些SQL查询来选择特定的电话号码和电话号码清理垃圾字符...

select sk, name1, phone into telefoni from 
(
SELECT customer_id as sk, name as NAME1, phone1 as phone from customers where len (phone1)>7 and (phone1 like "09*" or phone1 like "3859*" or phone1 like "*3859*" or phone1 like "95*" or phone1 like "98*" or phone1 like "99*" or phone1 like "91*" or phone1 like "92*" or phone1 like "97*") 

这一个。 ..

SELECT distinct sk, name1, replace(replace(replace(replace(replace(phone, "/", ""), "-", ""), " ", ""), ".", ""), "*", "") as tel into telefoni2 from telefoni1 order by name1; 

在那之后,我导出为ex​​cel数据和应用的下一个宏...

Sub test() 
For Each cell In Selection 
    If cell.Value Like "091*" Then cell.Value = Replace(cell.Value, "091", "38591", 1, 1, vbTextCompare) 
    Next cell 
End Sub 

而且多数民众赞成在...它像一个魅力工作。代码可能是凌乱的或可以写得更好,但我是一个新手,所以我想它确定:D