在Excel中复制时,日期中的月份和日期有时会反转

问题描述 投票:1回答:3

我的问题:

我创建了一个For Each循环,循环遍历同一个工作表中的2个不同的列。 此循环复制所需的列和唯一值。 虽然宏工作,它会粘贴错误的日期。 如何粘贴错误的日期,请在“目标:”部分下指定。

我的表:

| Date | ColB | Amount | Date | ColG | Amount | | 02-08-2018 | V584753 | 500 | 02-08-2018 | V584753 | -500 | | 11-08-2018 | 486542 | 1.000 | 21-08-2018 | 439857 | -30.547 | | 21-08-2018 | 439857 | 30.547 | 31-08-2018 | V587742 | -1.059 |

我的代码:

Sub PasteCellsWithoutMatch()

Dim ColB As Range, ColG As Range, c As Range
Dim Wf As WorksheetFunction
Set Wf = WorksheetFunction
Dim vR() As Variant
Dim k As Long, j As Integer

For Each c In ColB.Cells
    If Not IsEmpty(c) Then
        With Wf
            n = .CountIfs(ColG, c)
            If n = 0 Then
                k = k + 1
                ReDim Preserve vR(1 To 3, 1 To k)
                For j = 1 To 3
                    vR(j, k) = c.Offset(0, j - 2)
                Next j
            End If
        End With
    End If
Next

Sheet("Match").Range("A1").Resize(k, 3) = Wf.Transpose(vR)

目标:

我的意思是“粘贴错误的日期”,只要第一个值低于12,代码就会将“dd-mm-yyyy”换成“mm-dd-yyyy”。

含义:02-08-2018 成为:08-02-2018

鉴于:13-08-2018 遗骸:13-08-2018

我该如何更正此错误? 如果有任何更正。

预先感谢您的帮助。

excel vba excel-vba loops transpose
3个回答
0
投票

用最少的代码复制问题:

Public Sub TestMe()

    Dim val1 As String: val1 = "02/08/2018"
    Dim val2 As String: val2 = "13/08/2018"
    Dim myInput1 As Date
    Dim myInput2 As Date

    myInput1 = val1
    myInput2 = val2

    Range("A1") = myInput1
    Range("A2") = myInput2

End Sub

得到这个:

enter image description here


一种可能的解决方案是使用DateSerial()

Public Sub TestMe()

    Dim val1 As String: val1 = "02/08/2018"
    Dim val2 As String: val2 = "13/08/2018"
    Dim myInput1 As Date
    Dim myInput2 As Date

    myInput1 = DateSerial(Split(val1, "/")(2), Split(val1, "/")(1), Split(val1, "/")(0))
    myInput2 = DateSerial(Split(val2, "/")(2), Split(val2, "/")(1), Split(val2, "/")(0))

    Range("A1") = myInput1
    Range("A2") = myInput2

End Sub

对于某些高级解决方案,您可以考虑编写自定义函数或更改区域设置。后者很危险。


0
投票

这取决于您的本地设置。无论如何,宏根本不会考虑本地。所以你可以使用格式化功能来绕过它。例如:

val1="02/08/2018"
val2=format(cdate(val1),"ddmmyyyy"))

它会起作用


0
投票

我自己找到了解决方案。

首先,谢谢你的努力,但我真的不能自己尝试,因为我需要改变我的公式......

在循环遍历单元格之前,我从日期列中删除了日期格式。虽然将其转换为通用,但转置不会交换周围的数字。

RngNavRange = "A3:A" & LastRowA
RngKvikRange = "F3:F" & LastRowF

Range(RngNavRange).NumberFormat = "General"
Range(RngKvikRange).NumberFormat = "General"
© www.soinside.com 2019 - 2024. All rights reserved.