2017-08-11 63 views
0

我努力与一个简单的代码,不合作与我;) 我在列L从行5开始的一些日期。日期格式为yyyy.mm。但在公式栏中可以看到整个日期的格式为dd.mm.yyyy如果找到一个日期,然后做...- VBA Excel

F是相同的日期,以相同的方式格式化。唯一的区别是这里有一些单元格被合并。每个日期都位于与下两个单元格合并的单元格中。
这意味着在单元格F5是一个日期。
该单元格与F6F7合并。
在单元格F8是下一个日期。此单元格合并...

我想从第L列中找到第一个日期,并在F列中找到它们,如果找到,请执行一些操作。

问题是变量Dates每次都是空的。我会很感激任何建议。

Public Sub Fsaldo() 

Dim Finanse As Worksheet 
Dim x As Range 
Dim Dates As Range 
Dim Sum As Range 
Dim State As Range 

Set Finanse = Sheets("Finanse") 

For Each x In Finanse.Range("L6:L100") 
    If x <= Now() And IsDate(x) Then 
     Set Dates = Finanse.Range("F5:F100").Find(What:=x, LookIn:=xlValues, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 
'  MsgBox Dates.Address 
'  MsgBox Data 
     Set Sum = Dates.Offset(0, 3) 
'  MsgBox sum.Address 
     Set State = x.Offset(0, 1) 
     State = Sum.Value + Sum.Offset(1, 0).Value + Sum.Offset(2, 0).Value 
    End If 
Next 

End Sub 

亲切的问候 Neke

+0

你要找的F栏的日期...是正确的? – BruceWayne

+0

是的,你是对的。抱歉,是我的错。我已经更正了上述文字。 – neke

回答

0

由于没有解决我的问题,我自己做了...

再次澄清。在这两栏中我都写有dd.mm.yyyy的日期。所有单元格的格式都是自定义(yyyy.mm),因此在单元格中显示的就像2017.07,但是在公式栏中仍然类似于01.07.2017。

上面的宏没有工作,因为方法查找被错误地使用。我改变了:

  • LookIn:xlFormulas'而不是查看单元格值我只是从公式栏中获取信息。不知道为什么xlValues不起作用。值是相同的。

  • SearchOrder:xlColumns'此更改使我可以找到我在合并的单元格中搜索的内容。

也许它可以帮助别人......

0

我通过您的代码看起来。您正在搜索x的范围。我想一个简单的抵消不会做的伎俩,因为列F和L的日期不是在同一个顺序? 代码:

Dim x As Range 
(...) 
For Each x In Finanse.Range("L6:L100") 
If x <= Now() And IsDate(x) Then 
     Set Dates = Finanse.Range("F5:F100").Find(What:=x, LookIn:=xlValues, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

如果简单的偏移会工作,你可以尝试:

If x <= Now() And IsDate(x) Then 
set Dates = Range(x).offset(0,-6).value 

如果您搜索的日期,尽量在末尾添加.value的。

Set Dates = Finanse.Range("F5:F100").Find(What:=x, LookIn:=xlValues, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).value 

或者不是搜索范围搜索日期。我从来没有在Excel vba中搜索范围。我总是在变量中“读取”单元格的值,然后搜索它。但是如果有重复,这会导致问题。

请让我知道它是否有帮助。

+0

马可,首先:感谢您的调查!关于您的第一个问题:日期的顺序相同,但两者之间的偏移量不是恒定的。一般来说,偏移量的技巧,以及我用数字替换日期时的代码。它不适用于日期。我不知道为什么。 – neke

+0

Hi Neke;根据你的描述,我做了一个简单的Excel。 – Marco

+0

我会认为该错误是在.find部分。我的想法是,“日期”没有处理值“finanse.range(F5:F100”......“。(通常在.find()后我write.activate或.select)我试图解决它首先选择范围(范围(“F5:F100”))选择)然后找到单元格(Selection.Find(What:= x).Activate)然后将活动单元分配给日期(日期= ActiveCell) PS:如果你在使用日期,不要忘了,你可以在日期中转换数值,但是,如果你有任何想法,我会让你知道。 “CDate” – Marco