ใน Google Spreadshets คุณจะวนซ้ำแผ่นงานทั้งหมดที่มีอยู่โดยไม่ทราบจำนวนทั้งหมดได้อย่างไร


10

ฉันเก็บสถิติสำหรับทีมเบสบอลของลูกสาว ฉันมีแผ่นสำหรับแต่ละเกมแต่ละอันมีโครงสร้างเหมือนกัน ฉันต้องการสร้างแผ่นสรุปที่รวมตัวเลขจากแผ่นงานอื่น ฉันจะสร้างสูตรเพื่ออ้างอิงจำนวน N ชีตได้อย่างไร

ตัวอย่าง:

=G1!C2+G2!C2+G3!C2

ฉันไม่ต้องการย้อนกลับและเปลี่ยนแปลงแต่ละสูตรเมื่อมีการเพิ่มชีตใหม่

อัปเดต: การค้นหาเพิ่มเติมบางอย่างด้วยความช่วยเหลือของ Google ฉันไม่คิดว่านี่จะได้รับการสนับสนุน สิ่งที่ฉันกำลังทำเรียกว่าช่วง 3D และแม้ว่าจะได้รับการสนับสนุนใน Excel แต่ก็ไม่ได้รับการสนับสนุนใน Google Spreadsheet


1
คำถาม & คำตอบที่ฉันให้อาจเป็นที่สนใจเช่นกัน: webapps.stackexchange.com/a/42960/29140
Jacob Jan Tuinstra

คำตอบ:


18

หากคุณไม่สนใจใช้แมโครคุณสามารถทำสิ่งต่อไปนี้ เพิ่มสคริปต์นี้ในสเปรดชีตของคุณ (เครื่องมือ -> สคริปต์ -> ตัวแก้ไขสคริปต์):

function getTotalSum(cell) {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i++ ) {
        var sheet = sheets[i];
        var val = sheet.getRange(cell).getValue();

        if (typeof(val) == 'number') {
            sum += val;   
        }       
    }

    return sum;
}

และใช้สูตร= getTotalSum ("A1")โดยที่ "A1" เป็นเซลล์ที่คุณต้องการสรุปในแผ่นงานทั้งหมด (ยกเว้นที่คุณใส่สูตรไว้)

ฉันสร้างสคริปต์ทดสอบซึ่งคุณสามารถดูได้ที่: https://spreadsheets.google.com/ccc?key=0Ao3E95ou1MgbdG45blRvWlVaYkxFY01PQUhvZkZQcEE&hl=th&authkey=CPyZqxk


นี่คือสิ่งที่ฉันกำลังมองหา แต่ทุกครั้งที่สคริปต์รันสคริปต์จะเพิ่มมูลค่าที่มีอยู่ในเซลล์ดังนั้นฉันจึงได้รับผลรวมมากกว่าชีตในเซลล์ทุกครั้งที่เรียกใช้ ฉันจะทำให้มันเป็นลบ / แทนที่ค่าปัจจุบันและเพียงเพิ่มผลรวมของแผ่นงานอื่น ๆ ได้อย่างไร
Keith

คุณใช้ตำแหน่งเซลล์เดียวกันเพื่อทำสรุปหรือไม่ ถ้าเป็นเช่นนั้นก็อาจเพิ่มที่รวม และเมื่อคุณเรียกใช้อีกครั้งมันจะเพิ่มผลรวมใหม่ให้กับผลรวมเก่า ฯลฯ หากคุณเพิ่งใส่ไว้ในอีกเซลล์หนึ่งมันควรจะทำงานได้ หากคุณไม่ต้องการคุณจะต้องเปลี่ยนสคริปต์เพื่อรับ ID ของชีตปัจจุบันแล้วเพิ่มการตรวจสอบในคำสั่ง if เพื่อไม่ให้รวมไว้ เพิ่มคำสั่งแรกข้างบนสำหรับลูป: var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();จากนั้นให้เปลี่ยนคำสั่ง if อย่างเช่น:if (typeof(val) == 'number') && (i != thissheet)
goodship11

อุ๊ปส์ไวยากรณ์ผิดในคำสั่ง if ใช้สิ่งนี้:if (typeof(val) == 'number' && i != thissheet)
goodship11

1
หากค่าของเซลล์อื่นเปลี่ยนไปค่าที่ส่งคืนจะไม่ถูกอัพเดตเนื่องจากฟังก์ชันที่กำหนดเองจะทำงานเฉพาะเมื่อพารามิเตอร์เปลี่ยนแปลง
Rubén

0

หากใครก็ตามที่สะดุดกับคำถามนี้และมีปัญหาเดียวกันมีAdd-On อ้างอิงสามมิติสำหรับ Google ชีตที่ให้คุณกำหนดช่วงผ่านแผ่นงานหลายแผ่นและสามารถใช้กับฟังก์ชั่นดั้งเดิมเช่น = SUM ()

คำอธิบายบางอย่างในหน้าผู้เขียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.