【发布时间】:2019-10-17 01:42:21
【问题描述】:
如何让 Google 表格根据以下条件自动添加当前行的序号“此特定行上的新条目?
即使数据不是连续输入的,如何使其工作(例如,第 1 行的第一个条目(例如单元格 B1),第 2 行的第 2 个条目(在 B2 中),第 3 行的第 3 个条目( B3),然后是第 9 行 (B9) 的第 4 个条目,第 11 行 (B11) 的第 5 个条目,(B7) 行的第 6 个条目?
并且不向中间空行添加序数(例如,当 B5/row5、B6/row6、B8/row8、B10/row10 等为空白时,不要向 A5/row5、A6/row6、A8 添加序数/row8、A10/row10 等)?
这是预期的结果:
工作表: Ordinals to non-contiguous rows based on data entry timestamps
到目前为止,我已经想出了这个下拉公式(在 A2 中预先设置并向下拖动到 A12):
=IF(B2<>"",MAX($A$2:$A)+1,"") [in A2]
=IF(B3<>"",MAX($A$2:$A)+1,"") [in A3]
=IF(B4<>"",MAX($A$2:$A)+1,"") [in A4]
=IF(B5<>"",MAX($A$2:$A)+1,"") [in A5]
=IF(B6<>"",MAX($A$2:$A)+1,"") [in A6]
=IF(B7<>"",MAX($A$2:$A)+1,"") [in A7]
=IF(B8<>"",MAX($A$2:$A)+1,"") [in A8]
=IF(B9<>"",MAX($A$2:$A)+1,"") [in A9]
=IF(B10<>"",MAX($A$2:$A)+1,"") [in A10]
=IF(B11<>"",MAX($A$2:$A)+1,"") [in A11]
=IF(B12<>"",MAX($A$2:$A)+1,"") [in A12]
但是当我在 B2、B3、B4、B7、B9 和 B12 中逐一输入数据时得到的结果是,它使用新的最大值更新所有先前的单元格,因此不会发生继承达到了。
这是一个显示实时结果的 gif:
https://i.imgur.com/1I1Dk8f.gifv
如何锁定之前的结果,使得序数在连续出现时可以进行到下一个条目?
我查阅了那些与我正在寻找的内容接近的帖子:
How do you replace a formula with its result?
使用这个脚本:
function freezeOutput(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SummarySheet");
var range = sheet.getRange("A1:A10");
range.copyTo(range, {contentsOnly:true});
}
Stop Excel from updating formula after a criteria is matched
使用这个公式:
=IF(NOW() < C1,2*A1,A2)
或者这个 VBA 代码:
Function EvaluateIf(expression As String, condition As Boolean) As Variant
Application.Volatile
Dim myText As String
Dim myVal As Variant
If condition Then
myVal = Application.Evaluate(expression)
Else
myText = Application.Caller.Text
If IsNumeric(myText) Then
myVal = Val(myText)
Else
myVal = myText
End If
End If
EvaluateIf = myVal
End Function
Function FreezeAfter(expression As String, deadline As Date) As Variant
Application.Volatile
Dim myText As String
Dim myVal As Variant
If Now > deadline Then
myText = Application.Caller.Text
If IsNumeric(myText) Then
myVal = Val(myText)
Else
myVal = myText
End If
Else
myVal = Application.Evaluate(expression)
End If
FreezeAfter = myVal
End Function
How do I copy cell values programatically?
使用这个脚本:
function getRangeValues() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A2:B4");
var values = range.getValues();
return values;
};
这里有工作表: Copy cell values programmatically (72539)
最后:
使用这个脚本:
/**
* Creates a Date Stamp if a column is edited.
* https://yagisanatode.com/2018/02/21/add-the-current-date-to-a-sheet-when-data-is-added-so-that-the-date-does-not-changestatic-google-sheets/
*/
//CORE VARIABLES
// The column you want to check if something is entered.
var COLUMNTOCHECK = 6;
// Where you want the date time stamp offset from the input location. [row, column]
var DATETIMELOCATION = [0,-5];
// Sheet you are working on
var SHEETNAME = 'Sheet3'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
//checks that we're on the correct sheet.
if( sheet.getSheetName() == SHEETNAME ) {
var selectedCell = ss.getActiveCell();
//checks the column to ensure it is on the one we want to cause the date to appear.
if( selectedCell.getColumn() == COLUMNTOCHECK) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[8]);
dateTimeCell.setValue(new Date());
}
}
}
但我不知道如何使它工作。
在B列对应单元格输入数据后,预期结果应该是简单地将序数添加到A列对应单元格。
我们如何做到这一点?
【问题讨论】:
标签: excel google-apps-script google-sheets excel-formula