【发布时间】:2016-10-26 15:16:22
【问题描述】:
我正在尝试从 A:E 列中提取电话号码,并将它们放在 F:I 列中。 “提供的示例是 Col“E”上的一个实例。
我希望将电话号码提取到 F:I 列。但是,如果一列已经有数据。然后移动到下一个,如果数据有 4 个数字,则使用最后一个“I”列作为最终位置“它永远不会大于 4”
Dim c As Range, i As Integer
For Each c In Worksheets("data").Range("B2", _
Worksheets("data").Range("B" & Rows.Count).End(xlUp))
With c
If .Value2 Like "*???-???-????*" Then
For i = 11 To 14
If .Offset(, i).Value2 = "" Then
.Offset(, i).Value2 = .Value2
.Value2 = ""
GoTo NextC
End If
Next i
End If
End With
NextC:
Next c
End sub
我遇到的问题是它只返回一些电话号码,而不是全部。 “98k 行”
数据来自我提取的旧 XML 文件。在提取的特定“名称”列上,我已将回车代码替换为唯一符号,然后使用该唯一符号将文本运行到列。它提供了来自 A:N 的关键“名称”数据。 {示例:客户姓名、电子邮件地址、手机、家庭电话、项目详细信息、街道地址、城市、邮编...} 现在,这些列中的每一列都可以很好地保存我想在 4 个单独的列中提取的电话号码数据“最可能 F:I”,但也保持这样的逻辑,即当电话列填满时,它不会覆盖并从我指定的 4 移动到下一个可用列。
改变了
If .Value2 Like "*???-???-????*" Then
到
If .text Like "*###-###-####*" Then
成功。
【问题讨论】:
-
查看How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops或搜索[vba][regex]电话号码
-
通过显示您的数据样本来帮助我们 - 以及显示 (Value) 和存储 (Value2) 格式的示例 - 您在 Value2 上的搜索 - 但如果您所有的数字都显示相同,那么您可能需要比较 Value 或 Text 属性?
-
我认为 .value2 将消除获取日期或货币的可能性。 (msdn.microsoft.com/en-us/library/office/ff193553.aspx)
-
不完全; Range.Value2 property 将从日期值中去除区域信息,本质上将其转换为长整数,货币变为双精度。
-
.value 和 .text 也没有任何帮助。我将未提取的数据复制到另一个工作表。我将场景设置为相同,它适用于 .value2
标签: excel vba extraction