Excel VBA - 日期格式转换

2024-01-08

我遇到了一项具有挑战性的任务,使用许多解决方法都无法解决该任务。

在一列中我有日期,日期可以采用以下三种格式:

1) 简单的日/月/年

2) dd/mm/yy,但周围可能有“之前、之后或关于”字样。任何 其中之一,在这种情况下我们只需要删除这些词即可。

3) 数字格式的日期。长十进制值,例如 1382923.2323 但实际上我可以在转换后从中获取日期。

文件已上传至此处。日期格式宏链接 https://docs.google.com/file/d/0B7gzonuQsNbvQXNzWFhta0ZqUWs/edit?usp=sharing

我编写了以下代码,但它给出了错误的结果。

Sub FormatDates_Mine()
    ManualSheet.Activate
    ManualSheet.Cells.Hyperlinks.Delete
    ManualSheet.Cells.Interior.ColorIndex = xlNone
    ManualSheet.Cells.Font.Color = RGB(0, 0, 0)

    lastRow = ManualSheet.Range("A" & Rows.Count).End(xlUp).Row
    Col = "A"
    For i = 2 To lastRow
        Cells(i, Col) = Trim(Replace(Cells(i, Col), vbLf, "", 1, , vbTextCompare))

        If InStr(1, Cells(i, Col), "about", vbTextCompare) <> 0 Then
            Cells(i, Col) = Trim(Replace(Cells(i, Col), "about", "", 1, , vbTextCompare))
            Cells(i, Col).Interior.Color = RGB(217, 151, 149)
        End If

        If InStr(1, Cells(i, Col), "after", vbTextCompare) <> 0 Then
            Cells(i, Col) = Trim(Replace(Cells(i, Col), "after", "", 1, , vbTextCompare))
            Cells(i, Col).Interior.Color = RGB(228, 109, 10)
        End If

        If InStr(1, Cells(i, Col), "before", vbTextCompare) <> 0 Then
            Cells(i, Col) = Trim(Replace(Cells(i, Col), "before", "", 1, , vbTextCompare))
            Cells(i, Col).Interior.Color = RGB(228, 109, 10)
        End If

        DateParts = Split(Cells(i, Col), "/", , vbTextCompare)

        Cells(i, Col) = Format(Cells(i, Col), "dd/mm/yyyy")
    Next i

    Range("D:E").HorizontalAlignment = xlCenter
End Sub

文件已上传至此处。日期格式宏链接 https://docs.google.com/file/d/0B7gzonuQsNbvQXNzWFhta0ZqUWs/edit?usp=sharing

请帮忙!


这就是你正在尝试的吗?我没有添加任何错误处理。我假设您不会偏离现有的数据格式。如果格式发生变化,那么您将不得不引入错误处理。

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim rng As Range
    Dim MyAr() As String

    Set ws = ThisWorkbook.Sheets("Data")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        Set rng = .Range("A2:A" & lRow)

        With rng
            '~~> Replace "After " in the entire column
            .Replace What:="After ", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False

            DoEvents

            '~~> Replace "About " in the entire column
            .Replace What:="About ", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False

            .NumberFormat = "dd/mm/yyyy"
        End With

        For i = 2 To lRow
            '~~> Remove the End Spaces
            .Range("A" & i).Value = Sid_SpecialAlt160(.Range("A" & i).Value)

            '~~> Remove time after the space
            If InStr(1, .Range("A" & i).Value, " ") Then _
            .Range("A" & i).Formula = Split(.Range("A" & i).Value, " ")(0)

            '~~> Convert date like text  to date
            .Range("A" & i).Formula = DateSerial(Split(.Range("A" & i).Value, "/")(2), _
                                                 Split(.Range("A" & i).Value, "/")(1), _
                                                 Split(.Range("A" & i).Value, "/")(0))
        Next i

    End With
End Sub

Public Function Sid_SpecialAlt160(s As String)
    Dim counter As Long

    If Len(s) > 0 Then
        counter = Len(s)
        While VBA.Mid(s, counter, 1) = " "
            counter = counter - 1
        Wend
        Sid_SpecialAlt160 = VBA.Mid(s, 1, counter)
    Else
        Sid_SpecialAlt160 = s
    End If
End Function

截屏

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA - 日期格式转换 的相关文章

  • 同一活动中的多个日期选择器

    我对 Android 平台完全陌生 在学习开发过程的同时一直在构建应用程序 目前 我正在开展一项活动 需要部署 2 个日期选择器 一个是 开始日期 另一个是 结束日期 我一直在关注 Android 开发者页面上的 DatePicker 教程
  • 如何将32位VBA代码转换为64位VBA代码

    我正在尝试运行宏代码 但由于我使用的是 64 位 Excel 2016 因此该代码不起作用 请帮我解决这个问题 Private Declare Function FindWindowEx Lib User32 Alias FindWindo
  • 将单独的范围放入二维数组中

    我正在尝试获取大小的二维数组 x 3 填充 X只是工作表的大小 行数 并且有 3 列我感兴趣 例如 这些列彼此不靠近arr i 0 应从 AA 栏开始填写 arr i 1 应来自 K 列 并且arr i 2 需要来自 L 列 我尝试按以下方
  • 为什么 JSON.stringify() 接受 Date 对象?

    至少在 Firefox 中 您可以对 Date 对象进行字符串化 gt gt gt JSON stringify now new Date now 2012 04 23T18 44 05 600Z 这是有效的 因为 在 Firefox 中
  • VBScript for Excel:如何选择源数据 (.SetSourceData)?

    我已经在谷歌和这里搜索了这个问题的答案 但没有成功 如果之前有人问过 那么我道歉 我正在尝试使用 VBScript 自动执行一些管理任务 此特定脚本的目的是从文本文件 包含文本和数字列 中获取一些使用情况统计信息 并根据数据制作折线图 创建
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • Excel VBA 将范围值复制到数组,

    我有以下代码摘录 我试图将一系列值复制到声明的数组上 但它一直给我 无法分配给数组 错误 Dim permittedCurve 0 To 7000 As Variant permittedCurve activeWorkbook Works
  • 请参阅使用代号的表

    我在此代码中收到 类型不匹配 错误 With Worksheets Sheet1 Error here my code here End With 我的床单CodeName is sheet1 有人可以帮我消除错误吗 1 按索引参阅表 Wi
  • PHP如何计算时差? [复制]

    这个问题在这里已经有答案了 我必须计算日期时间差 如何在 PHP 中做到这一点 我需要准确的小时 分钟和秒 有人有这方面的脚本吗 Use the diff 方法 http www php net manual en datetime dif
  • Excel VBA 公式德语/法语/意大利语/俄语/荷兰语/外国函数

    当我将数据添加到工作簿时 需要将公式从较早的单元格复制到新单元格 我使用以下公式来计算我的增长率 WENN ODER K9 L9 WENNFEHLER L9 K9 K9 由于这非常耗时 我想用宏来改进它 因此编写了以下代码 Sub Grow
  • 将参数传递给使用“New”创建的访问表单

    我有一个名为 详细信息 的表单 它显示所选记录的详细视图 该记录是从称为 搜索 的不同形式中选择的 因为我希望能够打开 详细信息 的多个实例 每个实例显示不同记录的详细信息 所以我使用了以下代码 Public detailCollectio
  • 如何以可读的方式重写Excel公式?

    我有一个 Excel 文件 其中包含以下公式 IF OR ISERROR G16 ISERROR G17 X16 IF OR G16 xxx G16 yyy G16 zzz Y16 IF G16 333 N A IF G17 333 Z16
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId
  • Excel vba 创建范围的所有可能组合

    我有一个问题 我无法在网络上的任何地方找到它 它可能在那里 但我找不到它 呵呵 我有一个包含 13 列数据的电子表格 每列都包含需要进入整体测试用例的参数的变体 它们都不同 比如 E 101 105 110 120 J Upper S上行L
  • Excel VBA 根据条件通过电子邮件发送每一行

    我正在尝试得到这个 因此 发送如下所示的电子邮件 然后就变成这样 我需要它跳过空白电子邮件地址 在发送时将已发送插入到第五列 并在有可用电子邮件时为每一行创建一封新电子邮件 新电子邮件需要与该单独行相关的特定信息 我正在使用 Ron de
  • 副水平X轴VBA最大刻度

    通过以下代码和敏 正在设置 VBA 中图表的主水平 X 轴的比例 Sub chart set Dim objCht As ChartObject With ActiveSheet ChartObjects 1 Chart Axes xlVa
  • 使用 access VBA 将列表框项目添加到数组

    我在访问表单中有一个列表框 它包含 18 项 我如何使用 access vba 将这些项目存储到数组中 下面将把列表框的内容拉入数组并吐出内容 Dim Size As Integer Size Me List0 ListCount 1 Re
  • 运行时错误“3065”无法执行选择查询

    我已经写了很多查询 但我正在努力解决这一问题 当我运行以下 sql 时 出现运行时错误 3065 Dim db As DAO Database Dim sqlstring As String Set db DBEngine 0 Databa
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • Excel VBA 循环遍历 10,000 组行,每组包含 20 行

    如何将当前按行循环的 Excel VBA 代码转换为循环 20 行集 据我了解 Step函数可能与以下行一起使用 Range V1 Value Application Index vInput1 r 0 但是 我不确定如何修改代码以循环遍历

随机推荐

  • 为什么我们应该在 PHP 中使用静态调用?

    为什么我们要在 PHP5 中使用静态变量或静态调用静态方法 也许是为了提高性能 我们使用静态类变量在类的所有实例之间共享数据 并且我们使用静态方法 最好是private static 来计算类功能所需的东西 但独立于类实例状态 this 性
  • 使用 cmake 将 clr 支持设置为 true

    我正在尝试使用 cmake 生成托管 C 代码 下面是我添加的脚本 SET TARGET PROPERTIES PROJECT NAME PROPERTIES COMPILE FLAGS clr STRING REPLACE EHsc EH
  • 如何将 SQL 连接字符串与 ADO.NET 实体数据模型结合使用

    我正在尝试以一种可以即时更改我指向的数据库的方式使用 ADO NET 实体数据模型 更改数据库可能需要全新的连接字符串 有些数据库位于不同的服务器上 因此 我需要能够向 ADO NET 实体数据模型传递自定义连接字符串 格式如下 serve
  • Jenkins 不从文件输出 Junit 报告信息

    Problem Jenkins 未选取 junit 格式的报告 导致报告未在项目的状态屏幕中列出 Details junit 格式的报告数据由名为 Karma runner 以前称为 Testaulous 的测试框架生成 被忽略的文件创建于
  • 当代码移动到 Angular 组件时,Owl 轮播不起作用

    我的 Angular 版本 Angular 7 我刚刚开始学习 Angular 并尝试在我的 Angular 项目中使用下载的 Bootstrap 模板 我的owl carousel打开时效果很好index html在我的 Angular
  • 如何在 php 的 ssh2 函数中使用 pem 文件

    我需要通过 php 的 ssh2 函数连接到一些 Amazon EC2 实例以获取一些信息并将其显示在我的后台 ssh2 函数中是否有一种方法可以执行与通过命令行 ssh 连接时相同的操作 ssh i path to file key pe
  • 如何修复 mat-tab 的标题

    我有 5 个 mat tab 每个选项卡都有大量数据 因此滚动将添加到该窗口 有什么方法可以修复 mat tab 的标题并让内容可以滚动 我尝试放置位置 固定 位置 粘在里面 ng deep mat tab label 但这似乎并不能解决问
  • 带有 ObjectDatasource UpdateMethod 的 GridView

    我有一个 ASP NET WebForms 页面 其中包含ASPxGridView and an ObjectDataSource
  • Java 8 https 连接在某些站点上失败

    我无法访问某些 https 资源 请帮助使 https 调用可靠 我在这里放置的示例是通过 Firefox 浏览器进行测试的 以确保它们正常工作 java version openjdk version 1 8 0 121 OpenJDK
  • 微任务是否保证在它们排队的同一动画帧内触发?

    例如 Promise 使用微任务 我验证了here https mail mozilla org pipermail es discuss 2016 April 045905 html它们可以在动画帧结束之前完成 在 Chrome 中 我说
  • JSP中如何获取浏览器信息?

    如何使用 JSP 获取客户端 IP 和浏览器信息 以下 jsp 将输出您的 IP 地址和用户代理 Your user agent is br Your IP address is br 要找出用户正在使用的浏览器和 或操作系统 请解析用户代
  • 在python中简单编辑二进制文件

    这应该很容易 但我一直无法找到这个问题的答案 使用python 我想将二进制文件读入内存 修改文件的前四个字节 然后将文件写回 必须有一种简单的方法来编辑四个微不足道的字节 正确的 为什么读取整个文件要改变开头的四个字节 这不应该起作用吗
  • 如何让重音字母在 bash 上真正起作用?

    我在 cygwin 上安装的 bash 无法正确处理重音字母 我尝试添加 set input meta on to accept 8 bit characters set output meta on to show 8 bit chara
  • 仅读取文件的下一行一次

    我有一个应用程序 它从文本文件中读取信息 然后对它们进行分类并将它们放入数据库中 对于一个类别 我需要检查当前行之后的行并查找某个关键字 我如何阅读这一行 当流阅读器当前行已打开时 应该会发生这种情况 我在 VS2010 上使用 C Edi
  • 确保在 MVVM WPF 应用程序中的 UI 线程上调用 OnPropertyChanged()

    在我使用 MVVM 模式编写的 WPF 应用程序中 我有一个后台进程来做这件事 但需要从它获取状态更新到 UI 我使用的是 MVVM 模式 因此我的 ViewModel 实际上对向用户呈现模型的视图 UI 一无所知 假设我的 ViewMod
  • OS X 支持 POSIX 会话吗?

    我正在开发一个可以充分利用 POSIX 会话的项目 如所述here http pubs opengroup org onlinepubs 9699919799 functions setsid html 但我现在不确定我是否误解了这个概念和
  • 基于 Access 中保存的 SELECT 查询更新查询?

    使用 UPDATE 查询 是否可以引用存储的选择查询 我想完成这样的事情 UPDATE WHERE IN MY STORED PROCEDURE 也许是这样的 UPDATE WHERE ID IN SELECT ID FROM MyStor
  • Android:服务自动重启

    我正在使用一项可以节省费用的服务GPS纬度不断地 但很多时候服务会自动重新启动 这会导致数据丢失 那么有什么办法可以限制服务重新启动呢 或任何解决此问题的想法 您可以通过在服务中提及该服务来创建新流程Manifest file as and
  • SwiftUI - 动画视图扩展(显示/隐藏)

    我有一个View其中包含一个HStack and a DatePicker 当您点击HStack the DatePicker显示 隐藏 我想为这个动作设置动画 就像 iOS 日历的新事件视图中开始和结束行的动画一样 struct Time
  • Excel VBA - 日期格式转换

    我遇到了一项具有挑战性的任务 使用许多解决方法都无法解决该任务 在一列中我有日期 日期可以采用以下三种格式 1 简单的日 月 年 2 dd mm yy 但周围可能有 之前 之后或关于 字样 任何 其中之一 在这种情况下我们只需要删除这些词即