读取和区分单元格中的日期,然后返回平均日期

时间:2016-03-04 11:28:03

标签: excel excel-vba excel-2010 vba

我没有vba的高级经验,所以请放轻松我:)

我的工作表特定列中的每个单元格都可以包含19/12/15, 22/12/15形式的日期;这可以是例如C10的值(仅举这一点,我要求用户以一种或另一种形式在任何这些单元格中输入日期,但我找到了上述明确的方法,在加工和清晰度方面,最方便)。

下面我给出了细胞样子的样本:
enter image description here

这里的任务只是读取单元格的值,区分可以是两个或更多的日期,并返回一个平均日期。在奇数差异的情况下,它应该使日期更接近下限。

我尝试了各种预先构建的vba日期函数,只是为了分隔和分割日期,但没有一个有效。此外,每当我将单元格的值作为参数传递时,我都使用split函数返回0。 你有什么建议吗?

谢谢!

编辑:我已经能够提出以下功能,该功能可以在日期以标准格式插入单元格的情况下完成工作,例如: ##/##/##, ##/##/##,以及单元格中插入的日期不超过两个。如果有人找到更好的方法,请随时提供。

Function MeanDate(cell As Range) As Date
 Dim InvoiceDate As String
 Dim FirstInvoiceDate As String
 Dim SecondInvoiceDate As String
 Dim meanInvDate As String
 Dim DaysOfDiff As Long
 InvoiceDate = cell.Value
 If Len(InvoiceDate) = 8 Then
   MeanDate = ActiveCell.Value
 Else
   FirstInvoiceDate = DateValue(Mid(InvoiceDate, 1, 8))
   SecondInvoiceDate = DateValue(Mid(InvoiceDate, 11, 8))
   DaysOfDiff = DateDiff("d", FirstInvoiceDate, SecondInvoiceDate)
   MeanDate = DateAdd("d", Round((DaysOfDiff / 2), 0), DateValue(FirstInvoiceDate))
 End If
End Function

1 个答案:

答案 0 :(得分:0)

您可以使用TextTo列

Sub Macro1()  
    Selection.TextToColumns Destination:=Range("E:E"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="-", FieldInfo:=Array(Array(1, 4), Array(1, 4)), TrailingMinusNumbers:=True   
End Sub