Formatting 条件格式:最大值,将行与特定数据进行比较

Formatting 条件格式:最大值,将行与特定数据进行比较,formatting,google-sheets,conditional,highlight,Formatting,Google Sheets,Conditional,Highlight,我正在用Google Sheets制作一个练习跟踪表,遇到了一个问题。工作表中有一个表格,用于存储原始数据,如日期、从已验证列表中选择的运动类型,以及设置、重复次数、体重等。为了找到有用的信息进行分析,我设置了一个透视表。我想找到每种类型的最大值 例如,比较D列中“DL-m BB”的所有三个实例,表格应突出显示它们之间的最高值:H9为记录重量,F5为记录体积,依此类推,“SQ-lb BB箱”H12为最大重量,F3为最大体积。最终,该表每年将有几百行,查找每个属性的每个练习的最大值将是一项太多的

我正在用Google Sheets制作一个练习跟踪表,遇到了一个问题。工作表中有一个表格,用于存储原始数据,如日期、从已验证列表中选择的运动类型,以及设置、重复次数、体重等。为了找到有用的信息进行分析,我设置了一个透视表。我想找到每种类型的最大值


例如,比较D列中“DL-m BB”的所有三个实例,表格应突出显示它们之间的最高值:H9为记录重量,F5为记录体积,依此类推,“SQ-lb BB箱”H12为最大重量,F3为最大体积。最终,该表每年将有几百行,查找每个属性的每个练习的最大值将是一项太多的任务,时间最好花在其他地方。

对于上面给出的两个示例,条件格式可以设置如下。为每一项设置单独的规则。它们是从同一单元格(H1)中设置的,添加了一个附加规则

适用于范围

H1:H1000

自定义公式是

=$H1=最大值(过滤器($D:$H,$D:$D=“DL-m BB”))

添加另一条规则

适用于范围

H1:H1000

自定义公式是

=$H1=最大值(过滤器($D:$H,$D:$D=“SQ-lb-box-BB”))

将其放在透视表页面上(尝试M1-它必须在PT之外) 它正确地列出了max

=UNIQUE(query($D2:$K,"SELECT D,Max(F),Max(G),Max(H),Max(I),Max(J), Max(K) Where D !=''  Group By D Label Max(F) 'Max F', Max(G) 'Max G', Max(H) 'Max H', Max(I) 'Max I',Max(J) 'Max J',Max(K) 'Max K'"))
下面的查询列出了F的最大值

=query($D2:$F,"SELECT Max(F) Where D !='' Group By D label Max(F)''")
我一直在尝试使用条件格式,它几乎可以工作。也许你会看到一些我看不到的东西。还在努力

这很有效

function onOpen(){
 keepUnique()
}

 function keepUnique(){ //create array og unique non black values to find max for
  var col = 4 ; // choose the column you want to use as data source (0 indexed, it works at array level)
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheets()[1];
  var data = sh.getRange(2, col, sh.getLastRow()-2).getValues();
  var newdata = new Array();
  for(nn in data){
    var duplicate = false;
    for(j in newdata){
       if(data[nn][0] == newdata[j][0] || data[nn][0]==""){
        duplicate = true;
      }
    }
    if(!duplicate){
      newdata.push([data[nn][0]]);
    }}
    colorMax(newdata)
  }

  function colorMax(newdata){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheets()[1];
  lc=sh.getLastColumn()
  var data = sh.getRange(2, 4, sh.getLastRow()-2,lc).getValues(); //get col 4 to last col
  for(k=2;k<lc;k++){ 
     for(i=0;i<newdata.length;i++){
       var maxVal=0
       for(j=0;j<data.length;j++){
        if(data[j][0]==newdata[i][0]){
        if(data[j][k]>maxVal){maxVal=data[j][k];var row=j+2} //find max value and max value row number
    }}
   var c =sh.getRange(row,k+4,1,1)//get cell to format
   var cv=c.getValue()
   c.setFontColor("red")  //set font red
  }}
  }
函数onOpen(){ 基普尼克 } 函数keepUnique(){//创建数组og唯一非黑色值以查找最大值 var col=4;//选择要用作数据源的列(0索引,它在数组级别工作) var ss=SpreadsheetApp.getActiveSpreadsheet(); var sh=ss.getSheets()[1]; var data=sh.getRange(2,col,sh.getLastRow()-2).getValues(); var newdata=newarray(); 用于(数据中的nn){ var duplicate=false; 对于(新数据中的j){ 如果(数据[nn][0]==newdata[j][0]| |数据[nn][0]==“”){ 重复=正确; } } 如果(!重复){ newdata.push([data[nn][0]]); }} colorMax(新数据) } 函数colorMax(newdata){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sh=ss.getSheets()[1]; lc=sh.getLastColumn() var data=sh.getRange(2,4,sh.getLastRow()-2,lc).getValues();//将第4列设置为最后一列
对于(k=2;k谢谢你的回答。只有一个问题:目前,我列出了1040个包含变化的练习,即使我减少了跟踪练习的数量,仍然会有很多。我在一张表格中列出了练习。有没有办法用这个公式解决它们?我尝试了DGET,但它只给了我t循环依赖性错误$F2=max(过滤器($D:$F,$D:$D=“liikkeet!a2:q255”)(公式针对我的工作表进行了调整,因此产生了差异,工作表被命名为liikkeet)啊,我复制了错误的测试公式。这里是DGET公式:=$F2=max(过滤器($D:$F,$D:$D=(DGET(liikkeet!),A:Q“))我不知道如何将变量值放入条件格式公式中。您可以在另一个工作表中引用单元格,但我认为这对您没有帮助。我确实有几个问题。从您的示例中,您是否只需要H列或F-K列的最大值?您是否尝试过向数据透视表中添加一个由max汇总的新值列?即m这对你来说很有用。如果不是,我可以向你展示如何使用应用程序脚本。如果它足够简单,可以有一个最大的F-K列,那就更好了。我尝试添加另一个体积值列,由max总结,但它只会给我每天每个移动的最大值,这相当愚蠢,因为只有一个值可供选择。理论上格式化函数读取此值所指的移动,然后使用该字符串搜索同一列中的其他移动,并将其值与原始移动进行比较,这听起来很简单。答案可能在筛选函数的条件中,但我一直无法找到。我仍在看这个。Co您是否可以共享电子表格?查看原始数据可能会有所帮助。