Tôi đã làm việc trên tất cả các buổi sáng và thấy bằng chứng về những gì những người không trả lời trên thảo luận. Senseful và tôi đều muốn ĐỊA CHỈ của ô đã qua, không phải giá trị. Và câu trả lời là rất dễ dàng. Nó không thể được thực hiện.
Tôi tìm thấy một số cách giải quyết dựa trên việc tìm ra ô nào chứa công thức. Thật khó để nói nếu điều này sẽ giúp Senseful ở trên. Vậy tôi đã làm gì?
The data.
[A] [B] [C] [D] [E] [F] [H]
[1] Name Wins Losses Shots Points Fouls Most recent
WL Ratio
[2] Sophia 4 2 15 7 1 0
[3] Gloria 11 3 11 6 0 0
[4] Rene 2 0 4 0 0 0
[5] Sophia 7 4 18 9 1 1.5
Cột H là Sophia (Thắng - PrevWins) / (Mất - PrevLosses)
(7 - 4) / (4 - 2) = 1,5
Nhưng chúng tôi không biết Sophia đã xuất hiện hàng nào trước đây.
Tất cả có thể được thực hiện bằng cách sử dụng VLOOKUP nếu bạn mã cứng A làm cột tên. Sau VLOOKUP, tôi đã nhận được một số #NA (không tìm thấy tên) và # DIV0 (mẫu số 0) và bọc nó bằng = IF (IF (...)) để hiển thị văn bản hợp lý hơn trong các điều kiện này. Bây giờ tôi đã có một biểu hiện lớn khủng khiếp, khó sử dụng và không thể bảo trì. Vì vậy, tôi muốn mở rộng macro (không tồn tại) hoặc các chức năng tùy chỉnh.
Nhưng khi tôi tạo một trình trợ giúp SubtractPrevValue (ô), nó đã nhận được "7" thay vì B5. Không có cách dựng sẵn để lấy các đối tượng ô hoặc phạm vi từ các đối số được truyền.
Nếu tôi bắt người dùng nhập tên ô trong dấu ngoặc kép thì tôi có thể làm điều đó ... SubtractPrevValue ("B5"). Nhưng điều đó thực sự cản trở việc sao chép / dán và các tính năng di động tương đối.
Nhưng sau đó tôi tìm thấy một cách giải quyết.
Bảng tínhApp.getActiveRange () LÀ GÓI có chứa công thức. Đó là tất cả những gì tôi thực sự cần biết. Số hàng. Hàm sau lấy số cột SỐ và trừ đi sự xuất hiện trước đó trong cột đó.
function SubtractPrevValue(colNum)
{
var curCell = SpreadsheetApp.getActiveRange();
var curSheet = curCell.getSheet();
var curRowIdx = curCell.getRowIndex();
var name = curSheet.getRange(curRowIdx, 1).getValue(); // name to match
var curVal = curSheet.getRange(curRowIdx, colNum).getValue();
var foundRowIdx = -1;
for (var i=curRowIdx-1;i>1;i--)
{
if (curSheet.getRange(i, 2).getValue() == name)
{
return curVal - curSheet.getRange(i, colNum).getValue();
}
}
return curVal; //default if no previous found
}
Nhưng sau đó tôi phát hiện ra rằng điều này thực sự chậm. Một và hai giây chậm trễ trong khi nó hiển thị "Suy nghĩ ..." Vì vậy, tôi trở lại công thức bảng tính không thể đọc được, không thể nhầm lẫn.