通过VBA 程序找出excel表中B列的最大日期,并且排除一个不要的年份的日期,如12/31/2099(日期格式),急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过VBA 程序找出excel表中B列的最大日期,并且排除一个不要的年份的日期,如12/31/2099(日期格式),急相关的知识,希望对你有一定的参考价值。

参考技术A 这需要用VBA吗?你日期都在B列,假设你需要排除的年份为2011,C1输入
=TEXT(MAX(IF(YEAR(B:B)<>2011,B:B)),"YYYY-M-D")
按CTRL+SHIFT+ENTER结束即可。追问

用的吧,将它写成巨集,就可以用到你的方法了,不过显示的是#VALUE!还是未能实现功能。。。

追答

巨集为何物?

追问

就是宏,在excel操作的全过程将其录制成宏,就可以看到相应的代码了

追答

直接用我的方法,用不到宏啊……

追问

恩,知道~刚刚有试重新弄张日期表,试了下是可以的,但是针对我要做的表格实现不了,我这边的时间格式是mm/dd/yyyy

追答

表发给我看看,19165827@qq.com

参考技术B Sub 最大日期()
Dim arr, r%, i%, p$
r = Range("B65536").End(3).Row
arr = Range("B1:B" & r)
Mydt = arr(1, 1)
For i = 1 To r
p = Mid(arr(i, 1), 1, (InStr(arr(i, 1), "/") - 1))
If p <> "2013" Then Range("B" & i) = "" Else _
If arr(i, 1) - Mydt >= 0 Then Mydt = arr(i, 1)
Next
MsgBox "最大日期:" & Mydt
End Sub
假设年份不是2013均排除追问

还是报错,执行阶段错误5:程序呼叫或引数不正确。。。还请继续指点

追答

我这里好的要不给个联系,我把EXCEL文档传给你

追问

发我邮箱吧429060741@qq.com 谢谢啊

本回答被提问者采纳
参考技术C 应该可以满足你的需求 试一下吧

Sub test()
Dim i%, j%
Dim Arr, v
v = 2014 ’不要的年
j = [b65536].End(xlUp).Row
ReDim Arr(1 To j)
For i = 2 To j
If Year(Cells(i, 2)) <> v Then
Arr(i) = Cells(i, 2)
Else
Cells(i, 2).Interior.Color = vbYellow
End If
Next i
v = Arr(1)
For i = 2 To j
If Arr(i) > Arr(i - 1) Then
v = Arr(i)
End If
Next i
MsgBox v
End Sub追问

编译错误:缺少语句,方便留个联系方式,我将表发你?

通过vba在excel中的“dd/mm/yyyy”日期格式

【中文标题】通过vba在excel中的“dd/mm/yyyy”日期格式【英文标题】:"dd/mm/yyyy" date format in excel through vba 【发布时间】:2014-09-28 10:14:57 【问题描述】:

我正在尝试通过 excel-vba 在 excel 表中以“dd/mm/yyyy”格式编写日期。我使用Cells(1, 1).Value = Format(StartDate, "dd/mm/yyyy") 实现了它。我的单元格值是30/04/2014,这很好.....

但是有一些奇怪的问题...... 因为我必须通过每次将 startDate 加 1 来迭代整个月,所以下一个值是 1/5/2014 而不是 01/05/2014 直到每个月的 12 日 12/5/2014 并且从 13 日开始,月份再次发生变化两位数13/05/2014....

我希望全部为两位数,因为我必须再次使用 Range.Find 方法搜索这些日期,在该方法中,我使用 "dd/mm/yyyy" fromat 传递值。

【问题讨论】:

在调试时,我得到两位数的值01/05/2014 【参考方案1】:

我明白了

Cells(1, 1).Value = StartDate Cells(1, 1).NumberFormat = "dd/mm/yyyy"

基本上,我需要设置单元格格式,而不是设置日期。

【讨论】:

【参考方案2】:

您的问题是尝试通过在 Excel 中的日期序列中添加 1 来更改月份。1 等于 1 天。尝试使用以下方法更改您的月份:

NewDate = Format(DateAdd("m",1,StartDate),"dd/mm/yyyy")

【讨论】:

我必须添加天数,而不是月数...我在调试时获得了所需的结果,但是在将其插入 excel 时,格式不考虑日期和月份列中的 2 位数字 StartDate 是什么类型的对象?可以试试:Format(StartDate+1,"dd/mm/yyyy"),看看能不能得到你想要的格式? 您还可以使用范围的.NumberFormat 属性。例如,如果您希望格式化为 dd/mm/yyyy 的日期位于单元格 A1 中,则可以使用 Range("A1").NumberFormat = "dd/mm/yyyy"。我不确定这与Format 有何不同(或为什么),这只是一个可能有帮助的建议。

以上是关于通过VBA 程序找出excel表中B列的最大日期,并且排除一个不要的年份的日期,如12/31/2099(日期格式),急的主要内容,如果未能解决你的问题,请参考以下文章

excel两组数据中如何找出相同的数据并对应排列?

通过vba在excel中的“dd/mm/yyyy”日期格式

Access 和 VBA:在导入期间将日期添加到一列的所有值

Excel VBA怎么实现整行/列的遍历

Excel2013 vba窗体程序如何通过image控件将工作表中得图片(不是本地照片)

使用excel VBA仅引用一个数字来自动填充日期