我的问题:
我制作了一个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”。
含义:2018年2月8日
成为: 2018年8月2日
地点:2018年8月13日
仍为: 2018年8月13日
如何纠正此错误?
如果有任何更正。
在此先感谢您的帮助。
答案 0 :(得分: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
得到这个:
一种可能的解决方案是使用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
对于某些高级解决方案,您可以考虑编写自定义函数或稍微更改区域设置。后者很危险。
答案 1 :(得分:0)
这取决于您的本地设置。无论如何,宏根本不会考虑本地。 因此,您可以使用格式功能来超越它。 例如:
val1="02/08/2018"
val2=format(cdate(val1),"ddmmyyyy"))
会成功
答案 2 :(得分:0)
我自己找到了解决方案。
首先,感谢您的努力,但是我真的无法尝试一下,因为我需要在公式中进行很多更改...
在遍历单元格之前,我从日期列中删除了日期格式。 转为一般,转置不会交换数字。
RngNavRange = "A3:A" & LastRowA
RngKvikRange = "F3:F" & LastRowF
Range(RngNavRange).NumberFormat = "General"
Range(RngKvikRange).NumberFormat = "General"