英文:
Is there a process in Excel that can automate reading through a column containing TRUE/FALSE values and can add numbers incrementally in a new column?
问题
我有一个非常大的电子表格,包含超过50,000行。它们是来自摄像陷阱的事件记录。我有一列名为“NewEvent”的列,其中只包含TRUE或FALSE的值,这些值是基于摄像陷阱是否作为新事件触发而设置的。然而,现在我需要按事件发生的顺序对事件进行编号,并将这些值记录在一个新的列中。例如,第一个TRUE将在新列中标记为事件1,其后的所有FALSE值仍然属于事件1,直到再次出现TRUE,然后它将成为事件2,依此类推。我开始手动操作,但意识到这将花费我相当多的时间。是否有办法在Excel中使用VBA或宏等自动化此过程?请参见下面的示例:
NewEvent | EventNum |
---|---|
TRUE | 1 |
FALSE | 1 |
FALSE | 1 |
FALSE | 1 |
TRUE | 2 |
FALSE | 2 |
FALSE | 2 |
TRUE | 3 |
FALSE | 3 |
FALSE | 3 |
FALSE | 3 |
FALSE | 3 |
我尝试在宏的代码编辑器中进行实验,但我对此非常陌生,发现它对我来说有点复杂。非常感谢!
英文:
I have a very large spreadsheet containing over 50,000 rows. They are records of events from a camera trap. I have a column called "NewEvent" which contains only TRUE or FALSE values, which was based on whether the camera trap was triggered as a new event. However now I need to number the events in the order that they happened and record these values in a new column. For example, the very first TRUE would be marked as event 1 in the new column, and all FALSE values following it would also still be part of event 1, until there is another TRUE which would then be event 2 and so on. I started doing this manually but realized it will take me a considerable amount of time. Is there any way to automate this using VBA or macro etc in Excel? Please see the example below:
NewEvent | EventNum |
---|---|
TRUE | 1 |
FALSE | 1 |
FALSE | 1 |
FALSE | 1 |
TRUE | 2 |
FALSE | 2 |
FALSE | 2 |
TRUE | 3 |
FALSE | 3 |
FALSE | 3 |
FALSE | 3 |
FALSE | 3 |
I tried experimenting with the code editor in Macro but I am very new to this and found it a little complex for me. Thank you so much!
答案1
得分: 6
更新:这个帖子变成了一种代码竞赛。最短的答案似乎是:
=N(B1)+A2
原始答案:
使用混合范围引用的 COUNTIFS
。如果你有数以万计的行,可能会导致工作表变慢!
=COUNTIFS(A$2:A2,TRUE)
另一个性能更好的选项:
=IF(A2,SUM(B1,1),B1)
还有另一种选项(感谢Mayukh Bhattacharya):
=IF(A2,N(B1)+1,B1)
英文:
UPDATE: This thread turned into a bit of Code Golf. The shortest answer appears to be:
=N(B1)+A2
ORIGINAL ANSWER:
Using COUNTIFS
with a mixed range reference. May bog down the worksheet if you have tens of thousands of rows!
=COUNTIFS(A$2:A2,TRUE)
Another (more performant) option:
=IF(A2,SUM(B1,1),B1)
Yet another option (credit to Mayukh Bhattacharya)
=IF(A2,N(B1)+1,B1)
答案2
得分: 5
除了**BigBen**先生提供的解决方案外,您可以使用<kbd>SCAN( )</kbd>来溢出。
• 在单元格B2
中使用的公式
=SCAN(0,--A2:A13,LAMBDA(x,y,IF(y,x+1,x)))
编辑:用于Spill Array!
• 在单元格B1
中使用的公式
=SCAN(0,--A2:A13,LAMBDA(x,y,(y+N(x))))
另一种替代方法。不使用<kbd>IF( )</kbd>,仅使用<kbd>N( )</kbd>
• 在单元格B1
中使用的公式
=N(A2)+N(B1)
当然,这个公式需要向下填充!!
上述公式可以根据@BigBen先生的建议更短。
=A2+N(B1)
强制性注意事项:上述显示的公式都假定范围以TRUE
开头,如果不是,则可以使用以下方法:
• 在单元格B1
中使用的公式
=(A2+N(B1))+1
英文:
Other than the solution provided by BigBen Sir, you can use <kbd>SCAN( )</kbd> to spill.
• Formula used in cell B2
=SCAN(0,--A2:A13,LAMBDA(x,y,IF(y,x+1,x)))
Edit: For the Spill Array!
• Formula used in cell B1
=SCAN(0,--A2:A13,LAMBDA(x,y,(y+N(x))))
Another alternative approach. Without <kbd>IF( )</kbd> and using only <kbd>N( )</kbd>
• Formula used in cell B1
=N(A2)+N(B1)
OfCourse the formula needs to fill down!!
The above formula can be made more shorter as proposed by @BigBen Sir.
=A2+N(B1)
A mandatory caveat : Formulas shown above all assumes, that the range starts with TRUE
, if it isn't then one could use as below:
• Formula used in cell B1
=(A2+N(B1))+1
答案3
得分: 3
For fun:
B2
中的公式:
=MAP(A2:A13,LAMBDA(x,SUM(--A2:x)))
或者,使用 SCAN()
:
=SCAN(0,A2:A13,LAMBDA(x,y,x+y))
英文:
For fun:
Formula in B2
:
=MAP(A2:A13,LAMBDA(x,SUM(--A2:x)))
Or, with SCAN()
:
=SCAN(0,A2:A13,LAMBDA(x,y,x+y))
答案4
得分: 2
请看这个老式的技巧:
假设您在列“A”中有您的“TRUE”/“FALSE”值,并且您想要在列“B”中进行计数,那么您可以从1开始填充列“B”(因为您始终从“TRUE”开始),然后列“B”的以下单元格使用以下公式:
=IF(A2=TRUE,B1+1,B1)
这将检查“A”列中的值。如果为TRUE,则进行递增(B1+1),否则使用正常值(B1)。
结果如下所示:
英文:
What about this old-fashioned trick:
Imagine you have your "TRUE"/"FALSE" values in column "A" and you want your counter in column "B", then you start column "B" with 1 (as you always start with a TRUE"), and the following cell in column "B" gets following formula:
=IF(A2=TRUE,B1+1,B1)
This checks the value in the "A" column. In case of TRUE, an increase (B1+1
) is done, otherwise the normal value (B1
) is used.
The result looks as follows:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论