- 
יש לי קוד שכבר כתוב, שמעביר נתונים מגיליון 1 לגיליון 2 
 בגיליון 1 זה נמחק ובגליון 2 זה נשאר תמיד
 אבל פה יש בעיה, כל פעם שהוא כותב את הנתונים בגיליון 2,
 הוא הולך לאותו תא (A2),
 ואני רוצה שילך לתא הריק הראשון בעמודה A
 ככה נראה הקוד:function nisui2() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true); spreadsheet.getRange('A2').activate(); spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true); spreadsheet.getRange('D7:E35').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3:I3').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3').activate(); };מה שרלוונטי לשאלה זה בין שורה 4 לחמש אני רוצה להכניס שורה כזו: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0)כשהכוונה היא שיספור את מספר השורות בעמודה A פחות מספר התאים הריקים יוצא מספר התאים המלאים + 1 אז הגענו לראשון הריק, הכל טוב ויפה, אבל כשאני מפעיל אותו אני מקבל הודעה ש ROWS אינו מוגדר, וכאן אני שואל: - מה רע באיך שכתבתי?
- איך כותבים את זה נכון?
 
- 
יש לי קוד שכבר כתוב, שמעביר נתונים מגיליון 1 לגיליון 2 
 בגיליון 1 זה נמחק ובגליון 2 זה נשאר תמיד
 אבל פה יש בעיה, כל פעם שהוא כותב את הנתונים בגיליון 2,
 הוא הולך לאותו תא (A2),
 ואני רוצה שילך לתא הריק הראשון בעמודה A
 ככה נראה הקוד:function nisui2() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true); spreadsheet.getRange('A2').activate(); spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true); spreadsheet.getRange('D7:E35').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3:I3').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3').activate(); };מה שרלוונטי לשאלה זה בין שורה 4 לחמש אני רוצה להכניס שורה כזו: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0)כשהכוונה היא שיספור את מספר השורות בעמודה A פחות מספר התאים הריקים יוצא מספר התאים המלאים + 1 אז הגענו לראשון הריק, הכל טוב ויפה, אבל כשאני מפעיל אותו אני מקבל הודעה ש ROWS אינו מוגדר, וכאן אני שואל: - מה רע באיך שכתבתי?
- איך כותבים את זה נכון?
 @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: מה רע באיך שכתבתי? הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) == OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורותאיך כותבים את זה נכון? אפשרות א: 
 תשנה את הפונקציה clear כך שהתאים יימחקו לגמריאפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה function getFirstEmptyRowByColumnArray() { var spr = SpreadsheetApp.getActiveSpreadsheet(); var column = spr.getRange('A:A'); var values = column.getValues(); // get all data in one call var ct = 0; while ( values[ct] && values[ct][0] != "" ) { ct++; } return (ct+1); }עכשיו תכתוב: OFFSET(getFirstEmptyRowByColumnArray(),0)
- 
@מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: מה רע באיך שכתבתי? הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) == OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורותאיך כותבים את זה נכון? אפשרות א: 
 תשנה את הפונקציה clear כך שהתאים יימחקו לגמריאפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה function getFirstEmptyRowByColumnArray() { var spr = SpreadsheetApp.getActiveSpreadsheet(); var column = spr.getRange('A:A'); var values = column.getValues(); // get all data in one call var ct = 0; while ( values[ct] && values[ct][0] != "" ) { ct++; } return (ct+1); }עכשיו תכתוב: OFFSET(getFirstEmptyRowByColumnArray(),0)@OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: מה רע באיך שכתבתי? הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) == OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורותאיך כותבים את זה נכון? אפשרות א: 
 תשנה את הפונקציה clear כך שהתאים יימחקו לגמרידבר ראשון, תודה!! 
 דבר שני לא זאת הסיבה כי אני רוצה תא ריק ראשון בגיליון 2 המחיקה היא בגיליון 1@OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: אפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה 
 function getFirstEmptyRowByColumnArray() { var spr = SpreadsheetApp.getActiveSpreadsheet(); var column = spr.getRange('A:A'); var values = column.getValues(); // get all data in one call var ct = 0; while ( values[ct] && values[ct][0] != "" ) { ct++; } return (ct+1); }
 עכשיו תכתוב:
 OFFSET(getFirstEmptyRowByColumnArray(),0)לקחתי את הפונקציה הזאת והיא לא עשתה שום דבר 
 גם אחרי ששמתי את ה- OFFSET
 למה?
- 
@OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: @מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: מה רע באיך שכתבתי? הניחוש שלי היא שבגלל אופן הפעולה שתיארת למעלה, התאים בגליון 1 שנמחקו - לא נחשבים ריקים, (ניקוי ערך לא הופך תא לריק, הוא הופך אותו לתא שמכיל מחרוזת ריקה) ואז הפונקציה COUNTBLANK מחזירה 0, מה שגורם לכך ש: OFFSET(ROWS('A:A')-COUNTBLANK('A:A')+1,0) == OFFSET(ROWS('A:A')-0+1,0) // זליגת תחום שורותאיך כותבים את זה נכון? אפשרות א: 
 תשנה את הפונקציה clear כך שהתאים יימחקו לגמרידבר ראשון, תודה!! 
 דבר שני לא זאת הסיבה כי אני רוצה תא ריק ראשון בגיליון 2 המחיקה היא בגיליון 1@OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: אפשרות ב: תשתמש בפונקציה אחרת לחישוב השורה הראשונה הריקה: יש פונקציה מאוד מהירה שכתבו ב StackOverflow שמחזירה את השורה הראשונה הריקה, או הראשונה עם מחרוזת ריקה 
 function getFirstEmptyRowByColumnArray() { var spr = SpreadsheetApp.getActiveSpreadsheet(); var column = spr.getRange('A:A'); var values = column.getValues(); // get all data in one call var ct = 0; while ( values[ct] && values[ct][0] != "" ) { ct++; } return (ct+1); }
 עכשיו תכתוב:
 OFFSET(getFirstEmptyRowByColumnArray(),0)לקחתי את הפונקציה הזאת והיא לא עשתה שום דבר 
 גם אחרי ששמתי את ה- OFFSET
 למה?@מאסטר-באקסל תוכל לרשום בדיוק את כל הקוד שעשית? 
- 
function nisui2() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true); spreadsheet.getRange('A2').activate(); spreadsheet.getCurrentCell().offset(rows('A:A')-countblank('A:A')+1,0), 0).activate(); spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true); spreadsheet.getRange('D7:E35').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3:I3').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3').activate(); };
- 
function nisui2() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 2'), true); spreadsheet.getRange('A2').activate(); spreadsheet.getCurrentCell().offset(rows('A:A')-countblank('A:A')+1,0), 0).activate(); spreadsheet.getRange('\'גיליון 1\'!B7:L35').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('גיליון 1'), true); spreadsheet.getRange('D7:E35').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3:I3').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('D3').activate(); };@מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: spreadsheet.getCurrentCell().offset(rows('A:A')-countblank('A:A')+1,0), 0).activate();תנסה במקום spreadsheet.setActiveCell(spreadsheet.getDataRange().offset(spreadsheet.getLastRow()-1, 0, 1, 1));
- 
@OdedDvir אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: spreadsheet.setActiveCell(spreadsheet.getDataRange().offset(spreadsheet.getLastRow()-1, 0, 1, 1)); מדהים!! 
 עובד יפי!!
 תודה!!
- 
סליחה על הבורות, 
 אבל אפשר הסבר על השוני בנוסחאות,
 ועל צורת הפעולה שלו?
 (של ה- OFFSET)
 בכדי שאני ידע להיזהר משגיאות בהפעלה שלו,
 תודה
- 
סליחה על הבורות, 
 אבל אפשר הסבר על השוני בנוסחאות,
 ועל צורת הפעולה שלו?
 (של ה- OFFSET)
 בכדי שאני ידע להיזהר משגיאות בהפעלה שלו,
 תודה@מאסטר-באקסל אמר בעזרה בכתיבת SKRIPT לגוגל שיטס.: אבל אפשר הסבר על השוני בנוסחאות, 
 ועל צורת הפעולה שלו?
 (של ה- OFFSET)שני הפרמטרים האחרונים הם אופציונאליים, ומציינים את טווח היעד הנבחר (כמה שורות וכמה עמודות) 
 אם משמיטים אותם, הפונקציה תחזיר טווח הזהה לטווח הפעיל.
 למשל:
 אם הטווח הפעיל הוא לא תא אחד, אלא קבוצת תאים, למשל A1:B2 (=4 תאים) הפונקציה מחזירה טווח של 4 תאים:offset(1,1) // == B2:C3אלא אם כן תציין בפירוש שברצונך לקבל רק תא אחד offset(1,1,1,1) // == B2ציינתי אותם בקוד לייתר ביטחון, למרות שבמקרה שלך הם מיותרים, כי התא הפעיל הוא יחיד A1 וממילא התוצאה שתתקבל היא גם תא אחד. 
- 
תודה 
 אבל התכוונתי לדעת על הפרמטר הראשון של ירידת שורות,
 איך הוא מוצא את התא הראשון הריק?
- 
תודה 
 אבל התכוונתי לדעת על הפרמטר הראשון של ירידת שורות,
 איך הוא מוצא את התא הראשון הריק?@מאסטר-באקסל 
 מסתבר שיש פונקציה מובנית ()getLastRow שמחזירה את מספר השורה האחרונה הריקה. הפחתתי 1 כי אתה משתמש בהיסט (offset) וצריך לזוז שורה פחות
- 
 D dovid העביר נושא זה מ-תכנות ב- D dovid העביר נושא זה מ-תכנות ב-
 
