搜索一行日期,确定开始日期和结束日期,合并从开始日期到结束日期的行中的单元格
Search a row a dates, identify a start date and end date, merge cells in row from start date to end date
我到处搜索示例以指导我开发日历电子表格。客户有非常具体的指导方针。
- 包含事件详细信息的前 11 列设置为过滤器
- 第 1 行当前为空白,但将用于标题
- 从第 K 列到无穷大 (BXY) 的第 2 行是年份
- 从第 K 列到 BXY 的第 3 行是月份
- 从第 K 列到 BXY 的第 4 行是日期
其他注意事项:
单元格 K6 的日期为 1-Jul-18。
第 4 行中的所有单元格继续为 =K$6+1..等。
周的计算公式为:
=CONCATENATE("WEEK ", IF((IF(MONTH(K6)>=10, WEEKNUM(K6)-WEEKNUM(DATE(YEAR(K6),10,1))+1, 53-WEEKNUM(DATE(YEAR(K6)-1,10,1))+WEEKNUM(K6)))=53,1,(IF(MONTH(K6)>=10, WEEKNUM(K6)-WEEKNUM(DATE(YEAR(K6),10,1))+1,53-WEEKNUM(DATE(YEAR(K6)-1,10,1))+WEEKNUM(K6)))))
计算第 2 行中的所有单元格:
=YEAR($K)
现在让我进退两难。我正在为用户创建一个用户表单,以输入填充电子表格中下一个空行的所有数据。我不能 post 执行此操作的代码,因为它在专有计算机系统上。但是,填充过滤器范围 A 到 J 的代码工作正常。此代码查找下一个空行:
lastRow = ws.Cells.Find(What:="*", LookIn=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
作为表单的一部分,用户输入事件的开始日期和结束日期。我正在尝试在第 4 行中搜索开始日期和结束日期,合并开始日期和结束日期之间的所有单元格,并将事件标题插入合并的单元格中。
到目前为止,这是我搜索第 4 行的代码:
For Each eventDate In .Range("K:BXY)
If IsDate(eventDate.Value) = IsDate(Me.tbStartDate.Value) Then
.Cells(lastRow, eventDate.Address(RowAbsolute:=True, ColumnAbsolute:=False)).Value = Me.tbEventName.Value
End If
Next eventDate
我是 excel 编程的新手,而且真的只是一个业余程序员。我在工作中被赋予了这项任务,并且一直在阅读和研究我正在尝试做的事情的例子......无济于事。
我正在考虑修改此代码段以使其正常工作:
For iCounter = myLastRow To myFirstRow Step -1
If .Cells(iCounter, myCriteriaColumn).Value = myCriteria Then
.Range(.Cells(iCounter, myFirstColumn), .Cells(iCounter, myLastColumn)).Merge
Next iCounter
有了这个:
LastCol = sh.Cells.Find(What:="*", After:=sh.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
我们将不胜感激任何关于如何实现这一点的帮助和指导。
v/r
尘土飞扬
我想出来了,可能不是最好的解决方案,但它有效:
lastRow = .Cells.Find(What:="*",_
LookIn:=xlFormulas,_
LookAt:=xlPart,_
SearchOrder:=xlByRows,_
SearchDirection:=xlPrevious).Row + 1
eventName = Me.tbID.Value + " " +_
Me.tbOpName + " " +_
Me.tbStartDate.Value + "-" +_
Me.tbEndDate.Value
startDate = Format(Me.tbStartDate.Value, "dd-mmm-yyyy;@")
endDate = Format(Me.tbEndDate.Value, "dd-mmm-yyyy;@")
For startCol = 14 to 959
startDateColumn = Format(.Cells(6, startCol).Value, "dd-mmm-yyyy;@")
If StrComp(startDate, startDateColumn, vbTextCompare) = 0 Then
For endCol = 14 to 959
endDateColumn = Format(.Cells(6, endCol).Value, "dd-mmm-yyyy;@")
If StrComp(endDate, endDateColumn, vbTextCompare) = 0 Then
.Range(.Cells(lastRow, startCol), .Cells(lastRow, endCol)).Merge
.Cells(lastRow, startCol).Value = eventName
Exit For
End If
Next endCol
End If
Next startCol
我到处搜索示例以指导我开发日历电子表格。客户有非常具体的指导方针。
- 包含事件详细信息的前 11 列设置为过滤器
- 第 1 行当前为空白,但将用于标题
- 从第 K 列到无穷大 (BXY) 的第 2 行是年份
- 从第 K 列到 BXY 的第 3 行是月份
- 从第 K 列到 BXY 的第 4 行是日期
其他注意事项: 单元格 K6 的日期为 1-Jul-18。 第 4 行中的所有单元格继续为 =K$6+1..等。 周的计算公式为:
=CONCATENATE("WEEK ", IF((IF(MONTH(K6)>=10, WEEKNUM(K6)-WEEKNUM(DATE(YEAR(K6),10,1))+1, 53-WEEKNUM(DATE(YEAR(K6)-1,10,1))+WEEKNUM(K6)))=53,1,(IF(MONTH(K6)>=10, WEEKNUM(K6)-WEEKNUM(DATE(YEAR(K6),10,1))+1,53-WEEKNUM(DATE(YEAR(K6)-1,10,1))+WEEKNUM(K6)))))
计算第 2 行中的所有单元格:
=YEAR($K)
现在让我进退两难。我正在为用户创建一个用户表单,以输入填充电子表格中下一个空行的所有数据。我不能 post 执行此操作的代码,因为它在专有计算机系统上。但是,填充过滤器范围 A 到 J 的代码工作正常。此代码查找下一个空行:
lastRow = ws.Cells.Find(What:="*", LookIn=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
作为表单的一部分,用户输入事件的开始日期和结束日期。我正在尝试在第 4 行中搜索开始日期和结束日期,合并开始日期和结束日期之间的所有单元格,并将事件标题插入合并的单元格中。
到目前为止,这是我搜索第 4 行的代码:
For Each eventDate In .Range("K:BXY)
If IsDate(eventDate.Value) = IsDate(Me.tbStartDate.Value) Then
.Cells(lastRow, eventDate.Address(RowAbsolute:=True, ColumnAbsolute:=False)).Value = Me.tbEventName.Value
End If
Next eventDate
我是 excel 编程的新手,而且真的只是一个业余程序员。我在工作中被赋予了这项任务,并且一直在阅读和研究我正在尝试做的事情的例子......无济于事。
我正在考虑修改此代码段以使其正常工作:
For iCounter = myLastRow To myFirstRow Step -1
If .Cells(iCounter, myCriteriaColumn).Value = myCriteria Then
.Range(.Cells(iCounter, myFirstColumn), .Cells(iCounter, myLastColumn)).Merge
Next iCounter
有了这个:
LastCol = sh.Cells.Find(What:="*", After:=sh.Range("A1"), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
我们将不胜感激任何关于如何实现这一点的帮助和指导。
v/r 尘土飞扬
我想出来了,可能不是最好的解决方案,但它有效:
lastRow = .Cells.Find(What:="*",_
LookIn:=xlFormulas,_
LookAt:=xlPart,_
SearchOrder:=xlByRows,_
SearchDirection:=xlPrevious).Row + 1
eventName = Me.tbID.Value + " " +_
Me.tbOpName + " " +_
Me.tbStartDate.Value + "-" +_
Me.tbEndDate.Value
startDate = Format(Me.tbStartDate.Value, "dd-mmm-yyyy;@")
endDate = Format(Me.tbEndDate.Value, "dd-mmm-yyyy;@")
For startCol = 14 to 959
startDateColumn = Format(.Cells(6, startCol).Value, "dd-mmm-yyyy;@")
If StrComp(startDate, startDateColumn, vbTextCompare) = 0 Then
For endCol = 14 to 959
endDateColumn = Format(.Cells(6, endCol).Value, "dd-mmm-yyyy;@")
If StrComp(endDate, endDateColumn, vbTextCompare) = 0 Then
.Range(.Cells(lastRow, startCol), .Cells(lastRow, endCol)).Merge
.Cells(lastRow, startCol).Value = eventName
Exit For
End If
Next endCol
End If
Next startCol