所有,我问了一个问题“Excel VBA:排序,然后复制和粘贴”,并收到了两个很好的答案。但是,因为我未能提供足够的用户需求,所以它们无法工作:我要求修复我创建的现有解决方案,而不是指定实际的业务需求,看看是否有人有更好的方法。
(叹气)这里:
我的老板让我创建一个ss来记录问题。他想要一个复合ID,它将“已分配日期”与一个数字联系起来,该数字表示当天只有的数字问题。新的一天,计数必须重新开始1.例如:
Assigned Issue Concatenated Date & Count = ID 5/11/2011 & 1 = 5112011-1 5/11/2011 & 2 = 5112011-2 5/11/2011 & 3 = 5112011-3 5/12/2011 & 1 = 5122011-1
我用计算= IF(D2<> D1,1,C1 + 1)的隐藏列C解决了这个问题,因此如果D列中的指定日期相同,则通过递增先前的发布计数来计算问题计数作为上一个日期,并在日期更改时从1开始。另一列连接指定的日期和问题计数,我有我的问题ID。
快速,简单,优雅,进出,完成。对?但是当我交付ss时,他指出如果你(也就是说,他)对电子表格的任何部分进行排序,那么问题ID就会失序。当然---如果行按照“分配日期”顺序排序,则每个公式都不会依次引用上一个日期。
我的直接想法,即提示我之前的问题,是首先正确地重新排序分配日期顺序,然后复制并粘贴计算的问题计数的值以将其锁定,从而保留连接的ID。
我能看到的另一种方法(在VBA,natch中)是:
- 评估“分配日期”列中的所有日期
- 评估“问题计数”列中的所有数字
- 计算在给定的指定日期分配的新项目的最新顺序问题计数
- 将该顺序问题计数分配给新项目
- 然后很好然后将光标放入用户通常会去的下一个单元格中,该单元格恰好与刚输入的指定日期相邻;但是,这不是必要的
醇>
这样可以避免重新排序物理ss的需要。然而,除了一个朦胧的猜测,这将涉及VLOOKUP,我一无所获。我通过搜索找不到任何东西。
有人可以帮忙吗?或建议去的地方?感谢!!!
答案 0 :(得分:0)
听起来您只想自动执行“粘贴特殊”操作。以下内容将a1:a100中的公式替换为其计算值:
Set src = ActiveSheet.Range("a1:a100")
src.Copy
src.Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
答案 1 :(得分:0)
我认为公式=IF(D2<>D1,1,C1+1)
可以改进,因为这取决于日期的顺序。以下内容将保留任何已排序的订单的计数
假设
ColA ColB ColC
Row1 Assigned_Date Issue Count Concatenate
Row2 05/11/2011 =COUNTIF($A$1:A2,A2) =TEXT(A2,"ddmmyyyy")&"-"&B2
Row3 05/11/2011 =COUNTIF($A$1:A3,A3) =TEXT(A3,"ddmmyyyy")&"-"&B3
Row4 05/12/2011 =COUNTIF($A$1:A4,A4) =TEXT(A4,"ddmmyyyy")&"-"&B4
Row5 05/11/2011 =COUNTIF($A$1:A5,A5) =TEXT(A5,"ddmmyyyy")&"-"&B5
基本上输入B2和C2公式并向下拖动。您可能需要将ddmmyyyy交换为mmddyyyy,因为我们首先使用日期而不是几个月:)
另外,请注意仅使用$ - $ A $ 1 锁定范围的第一部分:Ax
这适用于您当前的问题,但如果按日期的时间顺序分配了问题计数,则无效。
答案 2 :(得分:0)
使用程序怎么样?只需单击按钮即可添加下一个条目。
我假设这些条目将在今天的日期给出,并且表单布局是: 行:1 =标题/ 2 =左空白/ 3 =数据块的标题 列:A =日期/ B =发行计数/ C =组合ID / D等=其他数据
Sub AddEntry()
Dim iDayRef As Long, iNumRows As Long, n As Long
With Range("A3")
iNumRows = .CurrentRegion.Rows.Count
For n = 2 To iNumRows
If .Cells(n, 1).Value = Date Then
If .Cells(n, 2).Value > iDayRef Then iDayRef = .Cells(n, 2).Value
End If
Next
.Cells(iNumRows + 1, 1).Value = Date
.Cells(iNumRows + 1, 2).Value = iDayRef + 1
.Cells(iNumRows + 1, 3).Value = Format(Date, "mm/dd/yyyy") & " - " & iDayRef + 1
.Cells(iNumRows + 1, 4).Select
End With
End Sub
你真的需要三列Date,Count和Combined ID吗?如果你去了
yyyy / mm / dd - xx
ID格式,一列可以替换所有三种,您可以轻松对其进行排序。