精华内容
下载资源
问答
  • vba 转换多种格式日期

    千次阅读 2019-11-29 22:21:17
    版权声明:本文为博主原创文章,转载请在显著位置标明...1、2019/1/9,但是设置了单元格的日期格式,显示为2019年1月9日,如第1行。 2、2017年6月20日,直接就是文本的2017年6月20日,如第14行。 3、2017.2.23,如...

    版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

    今天上班的时候需要处理一张表:

    需要把里面日期一栏修改为yyyymmdd形式,表中的日期数据也就是有三种
    1、2019/1/9,但是设置了单元格的日期格式,显示为2019年1月9日,如第1行。
    2、2017年6月20日,直接就是文本的2017年6月20日,如第14行。
    3、2017.2.23,如第18行
    三种日期数据格式在原表中交错的,总共有几千行,如果只有那20几行我也就手动修改了,几千行太累了,只有祭出vba了。
    按照这三种不同的数据分别处理即可:

    Sub ??1()
    '
    ' ??1 ??
    '
    Dim i As Integer
    Dim fsrq As String
    Dim fsrq2 As String
    
    Dim pos1 As Integer
    Dim pos2 As Integer
    Dim pos3 As Integer
    
    Dim y As String
    Dim m As String
    Dim d As String
    
    For i = 1 To 26
        fsrq = Sheets("sheet1").Range("E" & i).Value
        If InStr(fsrq, "??") Then
             pos1 = InStr(fsrq, "??")
             pos2 = InStr(fsrq, "??")
             pos3 = InStr(fsrq, "??")
        
            y = Left(fsrq, pos1 - 1)
            m = Mid(fsrq, pos1 + 1, pos2 - pos1 - 1)
            d = Mid(fsrq, pos2 + 1, pos3 - pos2 - 1)
            
            If Len(m) = 1 Then m = "0" & m
            If Len(d) = 1 Then d = "0" & d
            
            fsrq2 = y & m & d
        ElseIf InStr(fsrq, ".") Then
            pos1 = InStr(fsrq, ".")
            pos2 = InStr(pos1 + 1, fsrq, ".")
        
            y = Left(fsrq, pos1 - 1)
            m = Mid(fsrq, pos1 + 1, pos2 - pos1 - 1)
            d = Right(fsrq, Len(fsrq) - pos2)
            
            If Len(m) = 1 Then m = "0" & m
            If Len(d) = 1 Then d = "0" & d
            
            fsrq2 = y & m & d
        Else
            fsrq = Format(fsrq, "yyyymmdd")
            fsrq2 = Replace(fsrq, "/", "")
        End If
         Sheets("sheet1").Range("F" & i).Value = fsrq2
    Next
    '
    End Sub

    运行后的效果:

    可见格式如 2019/1/9 的数据显示有问题。如果双击########的数据,也会显示正确:

    显然不是我们需要的,查看单元格格式,可以看到excel把这项仍然处理为日期,这时候想起我之前删除的F列也是日期。
    如果用现在的代码,那么两个方法可以解决:1、将F列先修改格式为文本;2、删除F列,这样新的F列就没有日期格式。然后在运行代码。
    当然我们更可以直接用代码解决,修改后的代码如下:

    Sub ??1()
    '
    ' ??1 ??
    '
    Dim i As Integer
    Dim fsrq As String
    Dim fsrq2 As String
    
    Dim pos1 As Integer
    Dim pos2 As Integer
    Dim pos3 As Integer
    
    Dim y As String
    Dim m As String
    Dim d As String
    
    For i = 1 To 26
        fsrq = Sheets("sheet1").Range("E" & i).Value
        If InStr(fsrq, "??") Then
             pos1 = InStr(fsrq, "??")
             pos2 = InStr(fsrq, "??")
             pos3 = InStr(fsrq, "??")
        
            y = Left(fsrq, pos1 - 1)
            m = Mid(fsrq, pos1 + 1, pos2 - pos1 - 1)
            d = Mid(fsrq, pos2 + 1, pos3 - pos2 - 1)
            
            If Len(m) = 1 Then m = "0" & m
            If Len(d) = 1 Then d = "0" & d
            
            fsrq2 = y & m & d
        ElseIf InStr(fsrq, ".") Then
            pos1 = InStr(fsrq, ".")
            pos2 = InStr(pos1 + 1, fsrq, ".")
        
            y = Left(fsrq, pos1 - 1)
            m = Mid(fsrq, pos1 + 1, pos2 - pos1 - 1)
            d = Right(fsrq, Len(fsrq) - pos2)
            
            If Len(m) = 1 Then m = "0" & m
            If Len(d) = 1 Then d = "0" & d
            
            fsrq2 = y & m & d
        Else
            fsrq = Format(fsrq, "yyyymmdd")
            fsrq2 = Replace(fsrq, "/", "")
        End If
         Sheets("sheet1").Range("F" & i).NumberFormatLocal = "@"
         Sheets("sheet1").Range("F" & i).Value = fsrq2
    Next
    '
    End Sub

    只需要添加一行代码: Sheets("sheet1").Range("F" & i).NumberFormatLocal = "@",让单元格格式为文本。
    所有日期都可以转换成功了,运行后如下:


    都是简单的vba语句,也许有朋友用得上

    展开全文
  • @",但是当同一列的日期里出现双数与单数的月与日时,整个日期的样式就会不那么美观了,除了通过手动的方式在设置单元格里进行日期格式设置而改变日期格式外,我们还可以通过VBA代码的方式来改变日期格式....

    在Excel表格里,默认的格式日期是这样的:"yyyy/m/d;@",但是当同一列的日期里出现双数与单数的月与日时,整个日期的样式就会不那么美观了,除了通过手动的方式在设置单元格里进行日期的格式的设置而改变日期的格式外,我们还可以通过VBA代码的方式来改变日期的格式.

    adeb0241dc5468ea024a20e911364312.png

    对于VBA新手来说,要想获得简洁好用的VBA代码有时并不是那么容易的事情,在这我们介绍一种方法来获得新的VBA代码,即通过录制宏的方式来获得代码,然后对里面的对象格式参数稍微进行修改后,就可以完全符合我们的要求了.

    录制宏方法步骤:

    第一步:点击"开发工具",录制宏命令.在弹出的对话框里录入宏的名称,在这里,我们录入的名称是"录制宏获取代码".点击确定.

    此时Excel软件会记录整个鼠标与键盘的操作过程,所在在这个过程里注意不要做无用多余的操作,仅仅做最重要最关键的操作.

    1eb6f603b75d342d3c6c59c69195f284.png

    第二步,选中日期列的任何一个单元格,右键单击,在弹出的对话框里选择"日期"标签,选择"2003/7/3"那个日期,然后点击"自定义"标签,在显示效果里把日期的格式修改成"yyyy/mm/dd;@"的样式.点击确定.

    bdf8b5563990386e370a733b0909658b.png

    第三步.点击"取消录制",打开VBE编程器,去找宏名为"录制宏获取代码"的这段代码,如下所示

    Sub 录制宏获取代码()

    Selection.NumberFormatLocal = "yyyy/mm/dd;@"

    End Sub

    其中,最关键的代码是单元格.NumberformatLocal,双引号里的内容是我们所设置的格式,当然在这里也可以随意修改成任何我们所喜欢的格式.

    b0d781e9d09d4737a9e7abf4092bd11f.png

    第四步:现在我们要把日期列,即F列的日期修改成我们所希望的样式,那么只需要把Selection修改成我们所需要的单元格对象区域就可以了.如下图所示,我们修改的VBA代码为:Range("f4:f20").numberFormatlocal="yyyy/mm/dd;@".

    修改完代码后,按一下键盘的"F5键"或者点击"运行",即可以执行代码.执行的结果就是我们所希望的结果了.

    Sub 改变日期的格式()

    Range("f4:f20").NumberFormatLocal = "yyyy/mm/dd;@"

    End Sub

    4074eed373482f5801f0ee809cce40e6.png

    通过录制宏的方法也可以得到其它的一些VBA代码,在VBA编程中,这种方法有着非常广泛的应用,感兴趣的朋友不妨自己试一下.

    展开全文
  • 大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会...

    ff4cebf423fc2f766de67eae0009dc27.png

    大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式的设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会发生变化,我们需要程序来处理。避免手工的操作。如下面截图为导出数据的信息:

    b9a4a0600f4c6cfba079310310e7e6c7.png

    很显然,这份表格中我们需要的是出生日期应该是年月日格式的日期,同时我们的第一行最好是把字体换成粗体。这需要程序的自动实现。

    我们可否能让程序自动实现呢?当我们深入的学习应用VBA后,需要这类问题的解决很多,为什么呢?因为我越来越不想手工处理了,最好程序给我一份最终的报表。好了,实现是没问题的,下面看我给出的代码:

    Sub mynzRecords_48() '第48讲 从数据库中导出数据到工作表后,工作表格式的设置

    Dim cnADO, rsADO As Object

    Dim strPath, strSQL, strTable As String

    Set cnADO = CreateObject("ADODB.Connection")

    Set rsADO = CreateObject("ADODB.Recordset")

    strPath = ThisWorkbook.Path & "mydata2.accdb"

    strTable = "员工信息"

    cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

    strSQL = "SELECT * FROM " & strTable

    rsADO.Open strSQL, cnADO, 1, 3

    Worksheets("48").Select

    Cells.ClearContents

    For i = 0 To rsADO.Fields.Count - 1

    ActiveSheet.Cells(1, i + 1) = rsADO.Fields(i).Name

    Next i

    GoTo 200

    For i = 1 To rsADO.RecordCount

    For j = 0 To rsADO.Fields.Count - 1

    ActiveSheet.Cells(i + 1, j + 1) = rsADO.Fields(j)

    Next j

    rsADO.MoveNext

    Next i

    GoTo 100

    200:

    '设置工作表格式

    With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))

    .Font.Bold = True

    .HorizontalAlignment = xlCenter

    End With

    '复制全部数据

    Range("A2").CopyFromRecordset rsADO

    ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"

    ActiveSheet.Columns.AutoFit

    100:

    rsADO.Close

    cnADO.Close

    Set cnADO = Nothing

    Set rsADO = Nothing

    End Sub

    代码截图:

    de6ee67181185eabe653ad7f6cad463b.png

    ca75f1ecff264c33e730623211c88fc3.png

    代码讲解:上述代码在执行过程中如果不执行GOTO 200,那么就是我在本文开始时讲到的那种结果了,当执行后GOTO 200 那么就有了格式的设置,下面我们看看都设置了哪些格式呢?

    1 With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))

    .Font.Bold = True

    .HorizontalAlignment = xlCenter

    End With

    这段代码的执行,设置了表头要按粗体来显示。这样的报表会美观些,当然这只是我个人的观点,每个人和每个人不一样。读者也可以自己设置成自己喜欢的格式。

    2 ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"

    ActiveSheet.Columns.AutoFit

    上面的代码就将日期列变成了类似于"yyyy-mm-dd" 这种年月日的格式了,并且自动调整。

    下面看我们代码的运行结果了:

    f07b421eb40e10c77478fe8c57a34818.png

    好了,非常的完美。

    今日内容回向:

    1 如何设置工作表的格式呢?

    2 上述代码中如果设置其他的列该如何设置呢?

    展开全文
  • 大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会...

    大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式的设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会发生变化,我们需要程序来处理。避免手工的操作。如下面截图为导出数据的信息:

    f7cf1811eeb935486bc0bc03463ce458.png

    很显然,这份表格中我们需要的是出生日期应该是年月日格式的日期,同时我们的第一行最好是把字体换成粗体。这需要程序的自动实现。

    我们可否能让程序自动实现呢?当我们深入的学习应用VBA后,需要这类问题的解决很多,为什么呢?因为我越来越不想手工处理了,最好程序给我一份最终的报表。好了,实现是没问题的,下面看我给出的代码:

    Sub mynzRecords_48() '第48讲 从数据库中导出数据到工作表后,工作表格式的设置

    Dim cnADO, rsADO As Object

    Dim strPath, strSQL, strTable As String

    Set cnADO = CreateObject("ADODB.Connection")

    Set rsADO = CreateObject("ADODB.Recordset")

    strPath = ThisWorkbook.Path & "mydata2.accdb"

    strTable = "员工信息"

    cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

    strSQL = "SELECT * FROM " & strTable

    rsADO.Open strSQL, cnADO, 1, 3

    Worksheets("48").Select

    Cells.ClearContents

    For i = 0 To rsADO.Fields.Count - 1

    ActiveSheet.Cells(1, i + 1) = rsADO.Fields(i).Name

    Next i

    GoTo 200

    For i = 1 To rsADO.RecordCount

    For j = 0 To rsADO.Fields.Count - 1

    ActiveSheet.Cells(i + 1, j + 1) = rsADO.Fields(j)

    Next j

    rsADO.MoveNext

    Next i

    GoTo 100

    200:

    '设置工作表格式

    With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))

    .Font.Bold = True

    .HorizontalAlignment = xlCenter

    End With

    '复制全部数据

    Range("A2").CopyFromRecordset rsADO

    ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"

    ActiveSheet.Columns.AutoFit

    100:

    rsADO.Close

    cnADO.Close

    Set cnADO = Nothing

    Set rsADO = Nothing

    End Sub

    代码截图:

    e353602617225fff0a695cdecb56741a.png
    6256fc8e40808b06ff46ab1a9ea35e53.png

    代码讲解:上述代码在执行过程中如果不执行GOTO 200,那么就是我在本文开始时讲到的那种结果了,当执行后GOTO 200 那么就有了格式的设置,下面我们看看都设置了哪些格式呢?

    1 With Range(Cells(1, 1), Cells(1, rsADO.Fields.Count))

    .Font.Bold = True

    .HorizontalAlignment = xlCenter

    End With

    这段代码的执行,设置了表头要按粗体来显示。这样的报表会美观些,当然这只是我个人的观点,每个人和每个人不一样。读者也可以自己设置成自己喜欢的格式。

    2 ActiveSheet.Columns(rsADO.Fields.Count).NumberFormat = "yyyy-mm-dd"

    ActiveSheet.Columns.AutoFit

    上面的代码就将日期列变成了类似于"yyyy-mm-dd" 这种年月日的格式了,并且自动调整。

    下面看我们代码的运行结果了:

    2a11d7576c34763e07ceb48fd18b9505.png

    好了,非常的完美。

    今日内容回向:

    1 如何设置工作表的格式呢?

    2 上述代码中如果设置其他的列该如何设置呢?

    展开全文
  • VBA问题总结

    2019-03-01 15:34:34
    1.设置单元格格式 .Columns("B:B").NumberFormat = "...2.VBA时间列和日期列合并,设置String类型的变量 temp = .Cells(i, 2) + .Cells(i, 3) ' .Cells(i, 3).ClearContents ...
  • Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 Then If Target.Column = 4 Then Cells(Target.Row, 6) = Now ...右键单元格,设置单元格格式不行,能否在vba中就把日期格式定义好。
  • 大家好,今日我们讲VBA解数据库解决方案的第48讲内容:从数据库中导出数据到工作表后,工作表格式设置。为什么要讲这讲内容呢?因为我们在操作数据库的时候,需要的是数据处理,往往从数据表中导出数据后,格式会...
  • VBA常用技巧

    2014-12-21 16:39:28
    11-1 单元格字体格式设置 12 11-2 设置单元格内部格式 12 11-3 为单元格区域添加边框 12 11-4 灵活设置单元格的行高列宽 12 技巧12 单元格中的数据有效性 12 12-1 在单元格中建立数据有效性 12 12-2 判断单元格是否...
  • Excel_VBA教程

    2014-09-22 11:36:34
    第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...
  • vba_1《考勤表》

    2021-03-23 15:58:16
    VBA(考勤表简单设计) 一 当月份日期取得 二 指定单元格设置颜色 三 指定单元格格式 一 Sub EnterDates5() '获取当前月份的所有日子 Dim TheDate As Date TheDate = DateSerial(Year(Date), Month(Date), 1) '获取...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    11-1 单元格字体格式设置 33 11-2 设置单元格内部格式 35 11-3 为单元格区域添加边框 36 11-4 灵活设置单元格的行高列宽 38 技巧12 单元格中的数据有效性 39 12-1 在单元格中建立数据有效性 39 12-2 判断单元格是否...
  • Excel_VBA_语法与应用辞典

    热门讨论 2012-03-22 14:46:32
     3-2 单元格格式设置  3-3 单元格的编辑 Chapter 04 工作簿的管理  4-1 工作簿操作  4-2 工作表操作  4-3 窗口操作 Chapter 05 函数的应用  5-1 日期与时间函数的应用  5-2 字符串函数的应用  5-...
  • Excel VBA 基础教程

    2019-01-01 18:51:06
    目 录 一、VBA语言基础...................................................................................................................1 第一节 标识符....................................................
  • 第61集 日期和进度条 295、 注意事项 注意:64位office无法加载该控件,32位可以运行。 296、 常用的日期控件 有2个,一个是DTPicker...DTPicker设置日期格式是,月份要大写。如:yyyy-MM-dd 297、 注册日历控件 Su...
  • ExcelVBA程序设计.doc

    2011-04-05 21:32:51
    第五课 利用VBA设置工作表使用权限 15 1.使用WITH语句。 17 2.使用对象变量。 17 方法3:减少对象的激活和选择 17 方法4:关闭屏幕更新 18 第六课 提高EXCEL中VBA的效率 19 方法1:尽量使用VBA原有的属性、方法和...
  • 59,把设置单元格格式项移动到右键菜单第一位 60,从海量有重复数据中查出最后一笔记录的对应日期及数量 by:hqswww 61,清除工作表密码_wpxxsyzx 62,为宏的安全性修改注册表_清风_ll 63,图片自适应单元格大小_...
  • 189、 返回当前日期、时间(指本机系统设置日期和时间) Sub t1() Debug.Print Date '返回当前日期 Debug.Print Time '返回当前时间 Debug.Print Now '返回当前日期+时间 End Sub 190、 格式化显示日期Format函数 ...
  • Excel 2007与VBA编程从入门到精通 10/10

    热门讨论 2012-04-01 15:47:40
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 6/10

    热门讨论 2012-04-01 14:47:49
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 1/10

    热门讨论 2012-04-01 13:34:05
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 9/10

    热门讨论 2012-04-01 15:43:41
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 3/10

    热门讨论 2012-04-01 14:09:14
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 5/10

    热门讨论 2012-04-01 14:34:23
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 2/10

    热门讨论 2012-04-01 13:54:03
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 4/10

    热门讨论 2012-04-01 14:21:28
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 8/10

    热门讨论 2012-04-01 15:29:41
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • Excel 2007与VBA编程从入门到精通 7/10

    热门讨论 2012-04-01 15:01:23
    出版日期:2008-2-1 ISBN:9787121057250 字数:750000 页码:457 内容提要 --------------------------------------------------------------------------------  本书将带领读者历经Excel 2007 VBA从入门到精通...
  • 股票分析 项目概况 目的 该项目的目的是重构...在重构代码之前,我查看了可以重用的代码,并复制了代码以创建表标题,要运行分析的年份的输入框,代码数组以及设置标题行和条件颜色的格式格式化。 我还确保我激活了
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    一、VBA语言基础...................................................................................................................1 第一节标识符...........................................................

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 131
精华内容 52
关键字:

vba设置日期格式