And here's a replacement for the earlier total_ calculation, that is more efficient.       const     all_skills   = {          trading  :     'cool'  ,           concentration  :     'willpower'  ,           concealreveal  :     'intelligence'  ,           lipreading  :     'intelligence'  ,           perception  :     'intelligence'  ,          tracking  :     'intelligence'  ,           athletics  :     'dexterity'  ,           contortionist  :     'dexterity'  ,           dance  :     'dexterity'  ,          endurance  :     'willpower'  ,           torturedrugs  :     'willpower'  ,           stealth  :     'dexterity'  ,                   driveland  :     ''  ,          pilotsea  :     ''  ,           riding  :     ''  ,           accounting  :     ''  ,           animalhandling  :     ''  ,          bureaucracy  :     ''  ,           business  :     ''  ,           composition  :     ''  ,           criminology  :     ''  ,          cryptography  :     ''  ,           deduction  :     ''  ,           education  :     ''  ,           gamble  :     ''  ,          streetslang  :     ''  ,          languagea  :     ''  ,          languageb  :     ''  ,          librarysearch  :     ''  ,          yourhome  :     ''  ,           localexperta  :     ''  ,           localexpertb  :     ''  ,           sciencea  :     ''  ,          scienceb  :     ''  ,          tactics  :     ''  ,          wilderness  :     ''  ,          brawling  :     'dexterity'  ,          evasion  :     ''  ,          melee  :     'dexterity'  ,          acting  :     ''  ,          instrumenta  :     ''  ,          instrumentb  :     ''  ,          archery  :     ''  ,          handgun  :     'reflex'  ,          shoulderarms  :     'reflex'  ,          bribery  :     ''  ,          conversation  :     ''  ,           humanperception  :     ''  ,           interrogation  :     ''  ,          persuasion  :     ''  ,           personalgrooming  :     ''  ,           streetwise  :     ''  ,           wardrobe  :     'cool'  ,          avtech  :     'technique'  ,           basictech  :     'technique'  ,           cybertech  :     'technique'  ,           firstaid  :     'technique'  ,          forgery  :     'technique'  ,           lvtech  :     'technique'  ,           paintdrawsculpt  :     'technique'  ,           photographyfilm  :     'technique'  ,          picklock  :     'technique'  ,          pickpocket  :     'technique'  ,          svtech  :     'technique'  ,          weaponstech  :     'technique'  ,           pilotair  :     ''  ,           martial  :     'dexterity'  ,           autofire  :     'reflex'  ,           heavyarms  :     'reflex'  ,          demolitions  :     'technique'  ,           electronicssecurity  :     'technique'  ,           paramedic  :     'technique'  ,           charismaticimpact  :     ''  ,          interface  :     ''  ,          fieldexpertise  :     ''  ,          upgradeexpertise  :     ''  ,          fabricationexpertise  :     ''  ,          inventionexpertise  :     ''  ,          surgery  :     ''  ,          pharmaceuticals  :     ''  ,          cryosystem  :     ''  ,          credibility  :     ''  ,          teamwork  :     ''  ,          backup  :     ''  ,          operator  :     ''  ,          moto  :     ''  ,    };   const     all_skills_lvl_misc   = [];    Object  .  keys  (  all_skills  ).  forEach  (  skill     =>     all_skills_lvl_misc  .  push  (              "lvl_"   +   skill  ,              "misc_"   +   skill    ));    const     all_skills_lvl_misc_changes   =   all_skills_lvl_misc  .  map  (  skill     =>     `change:  ${  skill  }  `  ).  join  (  ' '  );    const     stats_lower   = [  "intelligence"  ,  "reflex"  ,  "dexterity"  ,  "technique"  ,  "cool"  ,  "willpower"  ,  "luck"  ,  "movement"  ,  "body"  ,  "empathy"  ];    const     stats_changes   =   stats_lower  .  map  (  stat     =>     `change:  ${  stat  .  toLowerCase  ()  }  `  ).  join  (  ' '  );    on  (  `  ${  all_skills_lvl_misc_changes  }     ${  stats  _changes}   sheet:opened`  ,   function  () {          getAttrs  ([...  stats  _lower.  map  (  stat     =>     stat  .  toLowerCase  ()), ...  all_skills_lvl_misc  ],   function  (  values  ) {              const     output   = {};              Object  .  keys  (  all_skills  ).  forEach  (  skill     =>   {                  // create the variables for the relevant attributes                  const     base   =   parseInt  (  values  [  "lvl_"   +   skill  ]) ||   0  ;                  const     misc   =   parseInt  (  values  [  "misc_"   +   skill  ]) ||   0  ;                  const     stat   =   parseInt  (  values  [  all_skills  [  skill  ]]) ||   0  ;                  const     total   =   base   +   misc   +   stat  ;                  output  [  'total_'   +   skill  ] =   total  ;            });              setAttrs  (  output  );        });    });          This assumes you have followed one previous requirement: changed all the total_ attributes from disable=true to readonly.  It also requires that you fill in the attribute for each skill in that first all_skills variable. I've done a bunch of them. Some skills have no stat (like cryosystem and credibility). Leave the value: ''. This will calculate the stat at 0.   Note that any skill you dont change disabled="true" to readonly will still work as an autocalc, so if you only changed the weapon skills listed in the previous post, this would work fine for getting the repeating section worker to work properly, and you could update the worker above with other skills as and when you have time.