【问题标题】:How to remove everything except words and dates with excel vba如何使用excel vba删除除单词和日期之外的所有内容
【发布时间】:2018-05-22 20:24:40
【问题描述】:

我有一个 word 文件每月更新 - 它包含空白行、在每个报告中更改的其他特殊字符、描述、参考和日期。
来自word文档的数据快照: Word document data example

目前已上传到 excel 中,auto_open 宏会打开并从 word 中导入数据。然后宏停止用户清理 - 我目前使用“过滤器”功能来删除除标题、结果和日期之外的所有内容。如果杂项特殊字符是恒定的,我可以自动执行此操作,但事实并非如此...... 我搜索了多个论坛以寻求帮助,发现一些代码删除了除字母字符之外的所有字符-它为我提供了基础知识-它删除了除字母之外的所有内容,然后将它们全部大写-我迷失了这个...

我目前使用的是什么:

Sub Remove_stuff()
Dim varRange As Range
Dim varWorkRange As Range

Set varWorkRange = Range("A15:A100")
Range("a15").Select

For Each varRange In varWorkRange
    varVal = ""
    For i = 1 To Len(varRange.Value)
        vartemp = Mid(varRange.Value, i, 1)
        If Not (vartemp Like "[a-z]" Or vartemp Like "[A-Z]") Then
            varStr = ""
        Else
            varStr = UCase(vartemp)
        End If
        varVal = varVal & varStr
    Next i
    varRange.Value = varVal
Next
End Sub

我已经搜索过使用 ISDATE 的“Like”来识别带有日期的单元格,并将它们排除在没有运气的情况下被删除。任何帮助将不胜感激 - 谢谢

好的 - 知道了 - 这是来自 word 文档的数据


南区土壤样本(参考“B6:D4”)

跟踪结果

2018 年 5 月 20 日

1


• ... 水样

生理盐水

2018 年 5 月 20 日

4


• ... 使用的农药

参考图书馆 4 书 C204

2018 年 5 月 20 日

3 `

【问题讨论】:

  • 您可以扩展您的字符列表以包括小写字母、数字、空格和逗号(例如[A-z0-9, ])。从您的“Word 文档数据示例”中不清楚每个单元格包含一个带有换行符的条目,或者每个条目是否跨越多行。
  • 如果您将数据作为插入而不是图像包含在内,并且还显示预期结果,这将有所帮助。例如,您是否希望排除数字 1、4、3 - 似乎是,但很高兴知道?日期是否始终采用所示格式?例如,它总是 Month dd, yyyy 还是可以有 Month d, yyyy 等?
  • 和 Reference Library 4 Book C204 你只想要 Reference Library Book 吗?它有助于了解您认为构成一个词的内容以及预期保留的内容。
  • 只是小费。而不是vartemp Like "[a-z]" Or vartemp Like "[A-Z]",写在模块顶部Option Compare Text 并删除Likes 之一。
  • Thomas,感谢关于扩展字符列表的提示 - 非常有帮助

标签: vba excel


【解决方案1】:

类似这样的:

Sub Remove_stuff()
Dim varRange As Range
Dim varWorkRange As Range

Set varWorkRange = Range("A15:A100")

For Each varRange In varWorkRange
    If Not IsDate(varRange) Then
        varVal = ""
        For i = 1 To Len(varRange.Value)
            vartemp = Mid(varRange.Value, i, 1)
            If Not vartemp Like "[A-z]" Then
                varStr = ""
            Else
                varStr = UCase(vartemp)
            End If
            varVal = varVal & varStr
        Next i
        varRange.Value = varVal
    End If
Next
End Sub

正在为我解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多