精华内容
下载资源
问答
  • VBA 设置单元格格式

    千次阅读 2019-05-21 15:37:18
    庆年工坊 知道合伙人互联网行家推荐于2017-10-02 1 2 3 4 5 ... [a1].NumberFormatLocal="@"'设置A1单元格为文本格式 [b1].NumberFormatLocal="yyyy/m/d"'设置B1单...

    庆年工坊 
    知道合伙人互联网行家 推荐于2017-10-02

    1

    2

    3

    4

    5

    6

    7

    8

    Sub s()

        [a1].NumberFormatLocal = "@" '设置A1单元格为文本格式

        [b1].NumberFormatLocal = "yyyy/m/d" '设置B1单元格为日期格式

        [c1].NumberFormatLocal = "[$-F400]h:mm:ss AM/PM" '设置C1单元格为时间格式

        [d1].NumberFormatLocal = "0.00%" '设置D1单元格为百分比格式

        [e1].NumberFormatLocal = "0.00E+00" '设置E1单元格为科学记数法格式

        [f1].NumberFormatLocal = "G/通用格式" '设置F1单元格为常规格式

    End Sub

    展开全文
  • 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-时间格式标准化

    千次阅读 2019-04-27 20:29:12
    今天讲讲如何将时间信息转化为统一的输出格式 效果图 Part 1:示例 如上图所示,A列的时间信息,统一转化为标准格式yyyy-mm-dd hh:mm:ss 注意到第5行和第6行,系统对月识别的效果是不一样的,默认第1位是月,当...

    微信公众号原文

    系统:Windows 7
    软件:Excel 2010

    • 今天讲讲如何将时间信息转化为统一的输出格式

    效果图
    4.png

    Part 1:示例

    1. 如上图所示,A列的时间信息,统一转化为标准格式yyyy-mm-dd hh:mm:ss
    2. 注意到第5行和第6行,系统对识别的效果是不一样的,默认第1位是月,当系统判断第1位明显不是月的时候,取第2位为月信息

    Part 2:代码

    Sub 转换()
        Set sht = ThisWorkbook.Worksheets("示例")
        maxRow = sht.Cells(Rows.Count, "A").End(xlUp).Row
        
        For i = 2 To maxRow Step 1
            old_version = sht.Cells(i, "A")
            new_version = Format(old_version, "yyyy-mm-dd hh:mm:ss")
            sht.Cells(i, "B") = new_version
            sht.Cells(i, "B").NumberFormatLocal = "yyyy-mm-dd hh:mm:ss"
        Next i
        
    End Sub
    

    代码截图
    7.png

    Part 3:输出结果说明

    1. 代码中有两个关键信息,一是将信息转化为标准格式,另一个是修改显示格式
    2. 以下两种方式中,在编辑栏显示的信息是一样的,但展示的效果是不一样的
    3. 代码中变量new_version数据类型是字符串,并不是时间格式,所示只是看起来像而已,本质上数据类型还是字符串

    取消NumberFormatLocal那一行
    2.png

    增加NumberFormatLocal那一行
    3.png

    数据类型说明
    5.png

    Part 4:部分代码解读

    1. Format是用来转换格式的,sht.Cells(i, "B").NumberFormatLocal是用来修改单元格显示方式的

    • 如需文中高清并可以无限放大路径图,可以文后留言留下邮箱,小编会发过去
    • 本文为原创作品,如需转载,可加小编微信号learningBin

    更多精彩,请关注微信公众号
    扫描二维码,关注本公众号

    公众号底部二维码.jpg

    展开全文
  • excel VBA自动设置表格格式

    千次阅读 2020-01-07 23:42:30
    通过VBA自动将表格格式快速设置为要求的格式,减少手工调整的时间

    通过VBA自动将表格格式快速设置为要求的格式,减少手工调整的时间。这个程序还有部份功能未实现,在数字列中文字右对齐,数字添加千位分隔符,强调的行添加背景色等内容。
    原始表格格式如下:
    在这里插入图片描述
    设置格式后格式如下:
    在这里插入图片描述
    打印预览:
    在这里插入图片描述
    具体VBA代码如下:

    Option Explicit
    
    
    Sub 设置表格格式()
    '
    '自动设置表格格式的宏
    '
    '
    
        '关闭屏幕刷新
        Application.ScreenUpdating = False
        
        '如果第一行不为空,插入一行空行
        If Not WorksheetFunction.CountA(Rows(1)) = 0 Then
            Cells(1, 1).EntireRow.Insert shift:=xlShiftDown
        End If
        '如果第一列不为空,插入一列空列
        If Not WorksheetFunction.CountA(Columns("A")) = 0 Then
            Cells(1, 1).EntireColumn.Insert shift:=xlShiftToRight
        End If
        
        Cells.Select
        With Selection.Font
            .Name = "微软雅黑"       '设置字体为微软雅黑
            .Size = 11               '设置字号为11
        End With
        Selection.RowHeight = Selection.Font.Size * 1.6     '设置行高为字号的1.6倍
        '消除已设置的边框
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        Selection.Borders(xlEdgeLeft).LineStyle = xlNone
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        Selection.Borders(xlEdgeRight).LineStyle = xlNone
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
        
        '取得最后一个非空单元格行号列号
        Dim maxR As Integer
        Dim maxC As Integer
        'Debug.Print ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Count).Address
        'Debug.Print ActiveSheet.UsedRange.Columns.Count
        maxR = ActiveSheet.UsedRange.Rows.Count + 1    '之前插入了一行空白行+1
        maxC = ActiveSheet.UsedRange.Columns.Count + 1   '之前插入了一列空白列+1
        Range(Cells(2, 2), Cells(maxR, maxC + 1)).Select '选择B2单位格到最后一个非空单元格,并选多一列空白列
        'ActiveSheet.UsedRange.Select
        
        '设置自动列宽
        Selection.EntireColumn.AutoFit
        
        '数字格式的单元格设置为蓝色,添加千位分隔符
        Dim rng As Range
        For Each rng In ActiveSheet.UsedRange
            If rng.HasFormula Then     '判断单元格是否有公式,有公式则将字体设置为黑色
                rng.Font.Color = RGB(0, 0, 0)
            Else
                If VarType(rng) = 5 Then         '判断单元格类型是否为数字
                    rng.Font.Color = RGB(0, 112, 192)     '设置为蓝色(或-4165632)
                    'rng.Style = "Comma"     '添加千位分隔符
                    'rng.NumberFormatLocal = "_ * #,##0_ ;_ * -#,##0_ ;_ * ""-""??_ ;_ @_ "
                End If
            End If
        Next
        
        '设置选择单元格区域的边框
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlHairline
        End With
        
        '设置所选区域第一行的底边框为无边框
        'Debug.Print Selection.Rows(1).Address
        Selection.Rows(1).Borders(xlEdgeBottom).LineStyle = xlNone
        
        '第一列和最后一列空白列设置宽度为3
        Columns("A").ColumnWidth = 3
        'Debug.Print ActiveSheet.UsedRange.Columns.Count
        Columns(ActiveSheet.UsedRange.Columns.Count + 1).ColumnWidth = 3
        
        '不显示网格线
        ActiveWindow.DisplayGridlines = False
        
        '设置打印页面
        With ActiveSheet.PageSetup
            .CenterFooter = "&P"      '页脚设置页码
            .CenterHorizontally = True   '水平居中打印
            .PrintArea = Selection.Address '设置打印区域
        End With
    
        '打开屏幕刷新
        Application.ScreenUpdating = True
        
    End Sub
    

    向右缩进的代码,要先选择需要向右缩进的单元格,再执行代码

    Sub 向右缩进一列()
    '
    '选中单元格区域向右缩进一列
    '
    
        Dim rng As Range
        
        Selection(1).Offset(0, 1).EntireColumn.Insert shift:=xlShiftToRight   '右边插入一列
        For Each rng In Selection
            rng.Offset(0, 1).Value = rng.Value  '将值复制到右边一个单元格中
            rng.ClearContents                   '删除原单元格内容
        Next
        
        Selection(1).EntireColumn.ColumnWidth = 1   '设置原单元格所在列列宽为1
    End Sub
    
    展开全文
  • vba日期格式

    万次阅读 2018-06-29 13:26:51
    日期怎么格式化#" & Date + 2 & "# 举例子:Me.sfrList.Form.Filter = "[确认结果]='确认'" _ & "AND (([确认装箱日期] >= #" & Date + ...
  • EXCEL-VBA设置单元格格式

    万次阅读 2017-09-20 09:48:50
    EXCEL-VBA设置单元格格式
  • 现需要将合同签订日期转换成英文日期,该如何通过VBA批量实现? 姓名 合同签订日期 英文日期1 英文日期2 英文日期3 辛劭钧 2010/1/1 1 Jan 2010 1 January 2010 1st Jan,2010 林庆荣 ...
  • VBA设置字符串格式——Format 函数

    千次阅读 2020-01-12 16:50:01
    返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。 语法 Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) Format 函数的语法具有下面几个部分: 部分 ...
  • vba 设置单元格文本格式

    千次阅读 2013-05-05 09:27:22
    VBA设置单元格格式为文本: Public Sub demo() irow = ActiveSheet.UsedRange.Rows.Count For i = 2 To irow If Len(Range("E" & i).Value) = 4 And CStr(Range("E" & i).Value) Range("F" & i)....
  • 利用VBA实现条件格式设置的过程并不像在Excel工作表中设置单元格条件格式那样方便。在VBA中,对于批量操作,通常需要用循环结构逐个进行。 此处,初学者一般能够掌握为满足条件的数据设置颜色的语句,但是比较容易...
  • 我们在使用Excel的时候,经常需要使用格式设置,尤其是文本设置,时间设置,就像是“城市牛皮癣”一样,换不过来!!真是让人火大。 即使,在VBA中使用C开头的函数,只是转换了Variant的类型,等填入到单元格并不是...
  • Excel VBA:设置图表系列格式

    千次阅读 2020-01-13 14:53:23
    可使用本方法快速设置图表的格式,而不必逐个设置所有属性。本方法是非交互式的,并且仅更改指定的属性。 语法 表达式.ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels, SeriesLabels, HasLegend, ...
  • VBA 强制转日期格式

    千次阅读 2018-12-16 18:40:00
    1、强制转日期格式,yyyy-m-d Sheet2.Cells(2, 1) = Format(Sheet2.Cells(2, 1), "yyyy-m-d")Sheet2.Cells(2, 25) = Format(Sheet2.Cells(2, 25), "yyyy-m-d") 2、取日期格式中的年 、月。 Sheet2.Cells(2, 3) = ...
  • Excel VBA 设置等待时间

    2021-05-12 11:06:21
    Excel VBA 设置等待时间 Sub wait(t) Dim firsttime As Variant firsttime = Timer Do Until Timer - firsttime > t DoEvents Loop End Sub sub调用 wait(时间-单位毫秒)
  • 单元格格式设置的不恰当会引发灾难的,估计在操作身份证、银行卡号等信息时踩坑的小伙伴深有同感。使用代码设置单元格格式时,虽然我们可以使用录制宏的方法得知如何设置,但是录制得到的代码比较啰嗦,对象不是很...
  • 钉钉打卡工时统计,表1为原始打卡记录,怎么用Python或者VBA生成表2工时格式。 早上上班时间为7:00,下班时间为11:30,下午上班时间为13:30下班时间为17:30,如果有加班加班时间为18:00-20:30。 中午休息1.5...
  • 循环调用程序自身,并设置调用时间举例 Option Explicit '公共变量说明 Dim endtime As String Sub oneminute() '主程序 endtime = Now + TimeValue("00:01:00") Call updateself End Sub Sub updateself() '被调用...
  • 新建一个.xlsm文件(打开.xlsx源数据文件并另存为.xlsm也可以),输入数据源(源数据和VB代码可以从以下链接下载): 原始数据以及 VBA 代码 打开.xlsm文件后在当前Sheet的名字上右击,选“View Code”(或者直接...
  • 文件扩展名是hhnnssms的时间戳,ms部分被格式化为4位数字。 由于Now()函数不会返回毫秒,因此我使用以下函数进行计算。 OptionCompareDatabase OptionExplicit PrivateTypeSYSTEMTIME wYearAsInteger ...
  • VBA输出日期格式问题

    千次阅读 2010-07-15 23:11:00
    http://topic.csdn.net/u/20071106/17/44cd3373-6019-4f5a-bce6-c15e950237ab.html<br />  http://topic.csdn.net/u/20090403/11/5c48e2d2-50de-42c4-b90c-cb33e487bd1d.html
  • 只是为了转换图片格式,就需要再电脑中安排这么一个庞然大物,并且其操作界面有些太专(复)业(杂),逐个打开图片文件进行操作,也比较耗费时间,其实VBA中也可以轻松实现批量图片格式转换。
  • Function CI(c) 'Cells.Address.Information If IsNumeric(c) Then On Error GoTo NumErr CI = Replace(Cells(, c).Address(0, 0), 1, "") Else On Error GoTo TxtErr CI =
  • VBA日期时间函数总结(全)

    万次阅读 2019-04-17 12:42:39
    日期函数: 编号 函数 ... 返回一个指定的时间间隔被添加的日期。 4 DateDiff 返回两个时间段之间的差异。 5 DatePart 返回给定输入日期值的指定部分。 6 DateSerial ...
  • Sub 获取设置日期() Dim dDate1 As Date Dim dDate2 As Date '获取日期 dDate1 = Date Debug.Print "当前日期为:" & dDate1 '设置日期 Date = DateSerial(2013, 2, 1) '获取新日期 dDate2 = Date ...
  • 转自:http://www.pinlue.com/article/2019/11/0315/389764831640.html
  • VBA日期时间函数

    万次阅读 2018-12-08 21:37:02
    VBScript日期时间函数帮助开发人员将日期时间从一种格式转换为另一种格式,或以适合特定条件的格式表示日期时间值。 一、日期函数 1、Dateadd() Private Sub Constant_demo_Click() ' Positive Interal...
  • VBA批量获取照片拍照时间 DSCN1547 2012-07-12 17:17:15 2012:07:12 17:17:15 星期四 DSCN1548 2012-07-12 17:17:33 2012:07:12 17:17:33 星期四 DSCN1553 2012-07-12 17:19:14 2012:07:12 17:19:14 星期四 DSCN1554...
  • now() 包含完整的日期+时间,date是日期和 time() 是时间 如果把时间转为 double 类型,就可以看出 整数部分就是 date ,而小数部分就是 time() Sub daojishi11() Debug.Print Now() Debug.P...
  • EXCEL VBA文本框内容显示为日期格式

    千次阅读 2010-07-15 23:13:00
    我在EXCEL单元格里的是日期格式,但是要显示到文本框里时就变成数字了。 我要文本框内容也显示为日期格式应该怎么办?    Range("A1").Text 就是日期格式的。
  • 可解决wps各版本自带的日期控件和listview控件不兼容的问题

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,871
精华内容 5,548
关键字:

vba设置日期格式