web-dev-qa-db-ja.com

セルに取り消し線形式があるかどうかを検出する

取り消し線形式がセルのコンテンツに適用されているかどうかをチェックする機能はありますか? (=IF(HAS_STRIKETHROUGH(C5), 1,0)に似た式を使用したい

6
Saul

スプレッドシートの数式はセルの書式設定にアクセスできないため、これにはカスタム関数が必要と思われます。参照セルに取り消し線がある場合はTrueを返し、そうでない場合はFalseを返す関数を作成しました。たとえば、=has_strikethrough(B2:C10)と入力して、True/False値の配列を取得できます。 (これはカスタム関数を使用することで、各セルに個別に適用するよりもはるかに効率的です。)

スクリプトは、[ツール]メニューの[スクリプトエディター]に配置する必要があります。 このページ を参照して、スクリプトを開始してください。

/** 
 * Returns True if the referenced cell has strikethough, False otherwise
 * Supports ranges
 * @param {A1}  reference Cell reference
 * @customfunction
 */
function has_strikethrough(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }
  var lines = range.getFontLines();
  var output = [];
  for (var i = 0; i < lines.length; i++) {
    output.Push(lines[i].map(function(a) {return a == 'line-through';}));
  }
  return output;
}
7
user79865