首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用双循环处理股票价格数据&将预期结果复制到汇总表

用双循环处理股票价格数据&将预期结果复制到汇总表
EN

Stack Overflow用户
提问于 2022-08-13 09:29:54
回答 1查看 100关注 0票数 -1

目的是比较两张纸片的价格数据,并在单张名称“列表”中附加输出结果。

步骤一-如图1所示,表名为“Rank”的表范围为Scrip-1和Scrip-2。

步骤II -初始化Scrip 1,并在工作表名“对查找器”'B13‘单元格中设置值。计数器初始值设置为表-1中的工作表名称‘等级’。用计数器I&j进行迭代的基础计算设置

“I”柜台是指“等级”表中的一张表。'j‘计数器是用于“等级”表中的2张表的。

第三步--这将导致在工作表名“协整”中设置值。它们的计算已经完成,输出值被概括为“J2:Q2”范围。将检查这些输出值的条件,如下所示。在单张名“合成”中

第四步-

在最终范围值转移之前,将检查下列条件

  1. 如果'J2:K2‘是“加载”,那么等待完成所有的计算。再次检查'J2:K2‘中的非空白单元格。
  2. 如果'P2:Q2‘不等于文本值'no’。
  3. 如果'R2‘是'TRUE’。
  4. 如果R2为真范围,则在“List”选项卡中追加范围。 “标签”

步骤V-然后在计算之后,范围值'J2:Q2‘以工作表名“协整”复制到“列表”工作表中,并分别附加到下一个I&j(不超过执行限制)计数器,以满足所有条件。

第六步-为了解决执行时间限制问题,I&J被记录在“B9&D9”中的“结对查找器”中,并用于宏的下一轮运行。

在努力提高效率的同时,我犯了一些错误,导致脚本在最后几步之前完成。

链接到谷歌工作表如下所示。oHLTcT9tmTJPgKVgkGwGWhooBM8uluwmWcC92eOk/edit?usp=sharing

气体代码如下。

代码语言:javascript
复制
function matchnsort() {
  var wb        = SpreadsheetApp.getActiveSpreadsheet();  
  var rank      = wb.getSheetByName('Rank');
  var pf_sheet  = wb.getSheetByName('Pair finder');
  var checking  = wb.getSheetByName('Cointergration');
  var list      = wb.getSheetByName('List');

  var countA  = rank.getRange('S9:S');                                      // Scirp-1 Table Range  
  var lenA    = countA.getDisplayValues().flat().filter(String).length;     // Scirp-1 Table length  
  var countB  = pf_sheet.getRange('D13:D');                                 // Scirp-2 Table Range   
  var lenB    = countB.getDisplayValues().flat().filter(String).length;     // Scirp-2 Table length  
  
  var rowA  = countA.getRowIndex();                                         // Scrip-1 Starting Row - 1st (scrip-1) to start Macro run  `
  var rowB  = countB.getRowIndex();                                         // Scrip-2 Starting Row - 1st (scrip-2) to start Macro run
  var col1    = countA.getColumn();                                         // Range identification for Scrip-1
  var col2    = countB.getColumn();                                         // Range identification for Scrip-2  
  var cellA   = pf_sheet.getRange('B9');                                    // Scrip-1 counter record - for next cycle - execution time limits  
  var cellB   = pf_sheet.getRange('D9');                                    // counter recording for Scrip-2
  var cellAVal  = cellA.getDisplayValue();                                  // Scrip-1 counter initialization 
  var cellBVal  = cellB.getDisplayValue();                                  // Scrip-2 counter initialization 
  // Logger.log(cellAVal);
  //if(cellAVal === "" || cellBVal === ""){                                   // setting up Scrip-1 & 2 counter for 1st run   
    
    //cellA.setValue(rowA);
    cellB.setValue(rowB);
    // SpreadsheetApp.flush();      
  //}

  var scrip1  = pf_sheet.getRange('B16');                                   // Scrip-1 setting Range Value 
  var scrip2  = checking.getRange('H4');                                    // Scrip-2 setting Range Value 
  var rows_lenA  = lenA + 9;
  var rows_lenB  = lenB + 14;
    
  if(cellAVal === ""){                                                      // final Check Scrip-1 values copied to desired cell for 1st run 
  
    SpreadsheetApp.flush();
    Logger.log(cellAVal);
    Logger.log(rowB);
  }
  else{                                                                       
    for (i=cellAVal; i<rows_lenA; i++){                                      // Loop-1 for Scirp-1 
      // set the number i on the sheet  into the cell 'Pair finder!B16'    
      var dataOutRang1  = rank.getRange(i,col1);
      var dataOut1      = dataOutRang1.getDisplayValue();
      scrip1.setValue(dataOut1);
      
      for (j=cellBVal; j<rows_lenB; j++){                                    // Loop-2 for Scirp-2 
        // set the number j on the sheet  into the cell 'Coint!H4'
        var dataOutRang2 = pf_sheet.getRange(j,col2);
        var dataOut2 = dataOutRang2.getValue();                              // *** Array Values for appending in 'List' Sheet
        Logger.log(dataOut2) 
        
        scrip2.setValue(dataOut2);
                  
        var dataOutRang3  = checking.getRange('J2:Q2');                   // Output Range to be appended & stored 
        var condition1 = checking.getRange('P2').getDisplayValue();       // Scrip -1
        var condition2 = checking.getRange('Q2').getDisplayValue();       // Scrip -2
        var condition3 = checking.getRange('J2').getDisplayValue();       // ADF Value
        var condition4 = checking.getRange('K2').getDisplayValue();       // KPSS Value
        var condition5 = checking.getRange('R2').getDisplayValue();       // Check for Data Repeation 

        if(scrip1 !== scrip2){ 
          if((condition3 === "Loading" || condition4 === "Loading")){
            SpreadsheetApp.flush();
          }
          else{
            if((condition1 !== "no" || condition2 !== "no") && ( condition3 !== "" || condition4 !== "") && condition5 === "TRUE"){
              Logger.log(condition1)
              Logger.log(condition2)
              Logger.log(condition3)
              Logger.log(condition4)  
              var dataOut3  = dataOutRang3.getValues();
              dataOut3  = dataOut3.flat();
              // Logger.log(dataOut3);       
              list.appendRow(dataOut3);
            }
          }
          
          cellB.setValue(j);                                              // Record last j value - to used in next cycle
          Logger.log(dataOut3);
        }
      
      cellA.setValue(i);                                                  // Record last i value - to used in next cycle 
      }
      
    }        
  }
}

第3行到第7行-定义了电子表格名称的初始引用。

第9行至第12行

第14行到第21行-初始化计数器I& j、行索引和Col号。

第23至28行记录I& j的计数器值。

第30至33行定义了计算设置所需的范围。

第38至42行检查计算和值在相关单元格中,然后再继续。

第44行到第49行开始第一圈的计数器i。

第51至57行开始计数器j的第2st循环。

第59至75行条件放置和检查。

如果条件满足“List”工作表,则第76至79行附加输出数据。

第83至87行记录下一个周期的计数器I&j值。

Pl。建议消除错误和提高效率/运行时。

执行日志按建议附后。样本数据执行日志

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-14 14:45:27

代码的一个问题是表达式scrip1 !== scrip2,因为它总是返回true,因为这两个变量都分配了类范围对象。在Google脚本/ JavaScript中仅使用原语(1'hello world'等)可以直接比较。

也许应该用dataOut1 !== dataOut2代替它,因为这个表达式的操作数之上的几行行被用来分别设置scrip1scrip2的值(Range.setValue())。

相关

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73343081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档