見出し画像

GASでスプレッドシートに関数検索を挿入してみた。

スプレッドシートで色々やっていて、関数を忘れることはありませんか?自分はよくあります。
ということで、スプレッドシートにカスタムメニュー → サイドバーで検索できるようにしました。

【準備物】
gsファイル…名前は何でもOK。
htmlファイル…名前を「検索」に設定しています。
コードは下記です。
重複しているものもあるかもしれません。あしからず。

gsファイル

function onOpen() {
  // メニューに「関数検索」を追加
  SpreadsheetApp.getUi().createMenu('カスタムメニュー')
    .addItem('関数検索', 'showFunctionSearchSidebar')
    .addToUi();
}

// サイドバーを表示する関数
function showFunctionSearchSidebar() {
  const html = HtmlService.createHtmlOutputFromFile('検索')
    .setTitle('関数検索');
  SpreadsheetApp.getUi().showSidebar(html);
}

// 関数リスト
const functionsList = [
  { name: 'SUM', description: '指定した範囲の合計を返します。', example: '=SUM(A1:A10)' },
  { name: 'AVERAGE', description: '指定した範囲の平均を返します。', example: '=AVERAGE(A1:A10)' },
  { name: 'VLOOKUP', description: '検索キーで範囲を検索し、指定した列の値を返します。', example: '=VLOOKUP(検索値, 範囲, 列番号, [TRUE|FALSE])' },
  { name: 'HLOOKUP', description: '範囲の最上行を検索し、指定した行の値を返します。', example: '=HLOOKUP(検索値, 範囲, 行番号, [TRUE|FALSE])' },
  { name: 'IF', description: '条件に基づいて値を返します。', example: '=IF(条件, 値が真の場合, 値が偽の場合)' },
  { name: 'COUNT', description: '範囲内の数値の数をカウントします。', example: '=COUNT(A1:A10)' },
  { name: 'COUNTA', description: '範囲内の空でないセルの数をカウントします。', example: '=COUNTA(A1:A10)' },
  { name: 'MAX', description: '範囲内の最大値を返します。', example: '=MAX(A1:A10)' },
  { name: 'MIN', description: '範囲内の最小値を返します。', example: '=MIN(A1:A10)' },
  { name: 'AND', description: 'すべての条件がTRUEの場合にTRUEを返します。', example: '=AND(条件1, 条件2)' },
  { name: 'OR', description: 'いずれかの条件がTRUEの場合にTRUEを返します。', example: '=OR(条件1, 条件2)' },
  { name: 'NOT', description: '論理値を逆転させます。', example: '=NOT(条件)' },
  { name: 'CONCATENATE', description: '複数のテキストを結合します。', example: '=CONCATENATE("Hello", " ", "World")' },
  { name: 'TEXT', description: '数値を指定された形式でテキストに変換します。', example: '=TEXT(1234.56, "$#,##0.00")' },
  { name: 'LEFT', description: 'テキストの左端から指定された文字数を返します。', example: '=LEFT("Hello", 2)' },
  { name: 'RIGHT', description: 'テキストの右端から指定された文字数を返します。', example: '=RIGHT("Hello", 2)' },
  { name: 'MID', description: 'テキスト内の指定位置から指定文字数を返します。', example: '=MID("Hello", 2, 2)' },
  { name: 'LEN', description: 'テキストの文字数を返します。', example: '=LEN("Hello")' },
  { name: 'SEARCH', description: '指定文字がテキスト内で最初に見つかった位置を返します。', example: '=SEARCH("e", "Hello")' },
  { name: 'FIND', description: 'テキスト内の指定文字の位置を返します(大文字小文字を区別)。', example: '=FIND("e", "Hello")' },
  { name: 'DATE', description: '指定した年、月、日の日付を返します。', example: '=DATE(2023, 10, 31)' },
  { name: 'TODAY', description: '現在の日付を返します。', example: '=TODAY()' },
  { name: 'NOW', description: '現在の日付と時刻を返します。', example: '=NOW()' },
  { name: 'YEAR', description: '指定した日付の年を返します。', example: '=YEAR(A1)' },
  { name: 'MONTH', description: '指定した日付の月を返します。', example: '=MONTH(A1)' },
  { name: 'DAY', description: '指定した日付の日を返します。', example: '=DAY(A1)' },
  { name: 'HOUR', description: '指定した時刻の時を返します。', example: '=HOUR(A1)' },
  { name: 'MINUTE', description: '指定した時刻の分を返します。', example: '=MINUTE(A1)' },
  { name: 'SECOND', description: '指定した時刻の秒を返します。', example: '=SECOND(A1)' },
  { name: 'WEEKDAY', description: '指定した日付の曜日を返します。', example: '=WEEKDAY(A1)' },
  { name: 'ISBLANK', description: 'セルが空である場合にTRUEを返します。', example: '=ISBLANK(A1)' },
  { name: 'ISNUMBER', description: 'セルが数値である場合にTRUEを返します。', example: '=ISNUMBER(A1)' },
  { name: 'ISTEXT', description: 'セルがテキストである場合にTRUEを返します。', example: '=ISTEXT(A1)' },
  { name: 'ISLOGICAL', description: 'セルが論理値(TRUEまたはFALSE)である場合にTRUEを返します。', example: '=ISLOGICAL(A1)' },
  { name: 'IFERROR', description: 'エラーが発生した場合に指定した値を返します。', example: '=IFERROR(A1/B1, "エラー")' },
  { name: 'ROUND', description: '数値を指定した小数点以下の桁数に丸めます。', example: '=ROUND(3.14159, 2)' },
  { name: 'ROUNDUP', description: '指定された桁数で数値を切り上げます。', example: '=ROUNDUP(3.14159, 2)' },
  { name: 'ROUNDDOWN', description: '指定された桁数で数値を切り捨てます。', example: '=ROUNDDOWN(3.14159, 2)' },
  { name: 'CEILING', description: '数値を指定した基準に切り上げます。', example: '=CEILING(3.14159, 1)' },
  { name: 'FLOOR', description: '数値を指定した基準に切り捨てます。', example: '=FLOOR(3.14159, 1)' },
  { name: 'ABS', description: '数値の絶対値を返します。', example: '=ABS(-123)' },
  { name: 'SIGN', description: '数値の符号を返します。', example: '=SIGN(-123)' },
  { name: 'POWER', description: '数値のべき乗を計算します。', example: '=POWER(2, 3)' },
  { name: 'SQRT', description: '数値の平方根を返します。', example: '=SQRT(16)' },
  { name: 'RAND', description: '0以上1未満の乱数を返します。', example: '=RAND()' },
  { name: 'RANDBETWEEN', description: '指定した範囲内の乱数を返します。', example: '=RANDBETWEEN(1, 10)' },
  { name: 'PI', description: '円周率の近似値を返します。', example: '=PI()' },
  { name: 'EXP', description: 'ネイピア数の指定したべき乗を返します。', example: '=EXP(1)' },
  { name: 'LN', description: '数値の自然対数を返します。', example: '=LN(10)' },
  { name: 'LOG', description: '指定された底で数値の対数を返します。', example: '=LOG(100, 10)' },
  { name: 'LOG10', description: '数値の常用対数を返します。', example: '=LOG10(100)' },
  { name: 'TRUNC', description: '数値の小数部分を切り捨てます。', example: '=TRUNC(3.14159)' },
  { name: 'MOD', description: '数値の除算の余りを返します。', example: '=MOD(10, 3)' },
  { name: 'GCD', description: '指定した数値の最大公約数を返します。', example: '=GCD(8, 12)' },
  { name: 'LCM', description: '指定した数値の最小公倍数を返します。', example: '=LCM(8, 12)' },
  { name: 'COSH', description: '指定した角度の双曲線余弦を返します。', example: '=COSH(0)' },
  { name: 'ACOS', description: '数値のアークコサインを返します。', example: '=ACOS(1)' },
  { name: 'ASIN', description: '数値のアークサインを返します。', example: '=ASIN(0.5)' },
  { name: 'ATAN', description: '数値のアークタンジェントを返します。', example: '=ATAN(1)' },
  { name: 'ATAN2', description: '指定されたx座標とy座標のアークタンジェントを返します。', example: '=ATAN2(1, 1)' },
  { name: 'COS', description: '指定した角度の余弦を返します。', example: '=COS(PI() / 3)' },
  { name: 'SIN', description: '指定した角度の正弦を返します。', example: '=SIN(PI() / 6)' },
  { name: 'TAN', description: '指定した角度の正接を返します。', example: '=TAN(PI() / 4)' },
  { name: 'COT', description: '指定した角度のコタンジェントを返します。', example: '=1 / TAN(PI() / 4)' },
  { name: 'DEGREES', description: 'ラジアンを度に変換します。', example: '=DEGREES(PI())' },
  { name: 'RADIANS', description: '度をラジアンに変換します。', example: '=RADIANS(180)' },
  { name: 'ISEVEN', description: '数値が偶数ならTRUEを返します。', example: '=ISEVEN(4)' },
  { name: 'ISODD', description: '数値が奇数ならTRUEを返します。', example: '=ISODD(3)' },
  { name: 'PRODUCT', description: '範囲内の数値を掛け合わせた積を返します。', example: '=PRODUCT(A1:A3)' },
  { name: 'QUOTIENT', description: '除算の商を返します。', example: '=QUOTIENT(10, 3)' },
  { name: 'FACT', description: '数値の階乗を返します。', example: '=FACT(5)' },
  { name: 'FACTDOUBLE', description: '数値の二重階乗を返します。', example: '=FACTDOUBLE(5)' },
  { name: 'COMBIN', description: '指定された数の組み合わせの数を返します。', example: '=COMBIN(5, 3)' },
  { name: 'BINOM.DIST', description: '二項分布を計算します。', example: '=BINOM.DIST(3, 10, 0.5, FALSE)' },
  { name: 'POISSON', description: 'ポアソン分布を計算します。', example: '=POISSON(2, 5, FALSE)' },
  { name: 'GAMMA', description: 'ガンマ関数の値を返します。', example: '=GAMMA(5)' },
  { name: 'GAMMALN', description: 'ガンマ関数の自然対数を返します。', example: '=GAMMALN(5)' },
  { name: 'CHIINV', description: 'カイ二乗分布の逆関数を計算します。', example: '=CHIINV(0.05, 10)' },
  { name: 'NORM.DIST', description: '正規分布の値を返します。', example: '=NORM.DIST(2, 0, 1, TRUE)' },
  { name: 'NORM.S.DIST', description: '標準正規分布の値を返します。', example: '=NORM.S.DIST(0, TRUE)' },
  { name: 'CONFIDENCE.T', description: '母平均の信頼区間を返します(t分布)。', example: '=CONFIDENCE.T(0.05, 1.5, 100)' },
  { name: 'FLOOR.MATH', description: '指定した基準で数値を切り捨てます。', example: '=FLOOR.MATH(3.75, 0.1)' },
  { name: 'FLOOR.PRECISE', description: '数値を0に近い方向で切り捨てます。', example: '=FLOOR.PRECISE(3.75, 0.1)' },
  { name: 'CEILING.MATH', description: '指定した基準で数値を切り上げます。', example: '=CEILING.MATH(3.75, 0.1)' },
  { name: 'CEILING.PRECISE', description: '数値を0に遠い方向で切り上げます。', example: '=CEILING.PRECISE(3.75, 0.1)' },
  { name: 'TRIM', description: 'テキストの余分なスペースを削除します。', example: '=TRIM("  Hello  World  ")' },
  { name: 'CLEAN', description: 'テキストから非表示または印刷不能な文字を削除します。', example: '=CLEAN(A1)' },
  { name: 'REPT', description: 'テキストを指定回数繰り返します。', example: '=REPT("Hi", 3)' },
  { name: 'CHAR', description: '数値コードに対応する文字を返します。', example: '=CHAR(65)' },
  { name: 'CODE', description: '文字の数値コードを返します。', example: '=CODE("A")' },
  { name: 'EXACT', description: '2つのテキストが完全に一致する場合TRUEを返します。', example: '=EXACT(A1, B1)' },
  { name: 'UNIQUE', description: '範囲内のユニークな値のリストを返します。', example: '=UNIQUE(A1:A10)' },
  { name: 'FLATTEN', description: '範囲の値を1次元リストに展開します。', example: '=FLATTEN(A1:C3)' },
  { name: 'SPLIT', description: 'テキストを指定の区切り文字で分割します。', example: '=SPLIT("Hello,World", ",")' },
  { name: 'ARRAYFORMULA', description: '配列式を適用します。', example: '=ARRAYFORMULA(A1:A5 * B1:B5)' },
  { name: 'FILTER', description: '条件に一致するデータのサブセットを返します。', example: '=FILTER(A1:A10, B1:B10 > 5)' },
  { name: 'SORT', description: '範囲を並べ替えます。', example: '=SORT(A1:B10, 1, TRUE)' },
  { name: 'SORTN', description: '指定した数の上位または下位の値を返します。', example: '=SORTN(A1:A10, 3)' },
  { name: 'TRANSPOSE', description: '行と列を入れ替えた範囲を返します。', example: '=TRANSPOSE(A1:B3)' },
  { name: 'MMULT', description: '2つの行列の積を返します。', example: '=MMULT(A1:B2, C1:D2)' },
  { name: 'LINEST', description: '最小二乗法を使用してデータの直線を返します。', example: '=LINEST(y値範囲, x値範囲)' },
  { name: 'SLOPE', description: '線形回帰線の傾きを返します。', example: '=SLOPE(A1:A10, B1:B10)' },
  { name: 'INTERCEPT', description: '線形回帰線のy切片を返します。', example: '=INTERCEPT(A1:A10, B1:B10)' },
  { name: 'RSQ', description: '決定係数を返します。', example: '=RSQ(A1:A10, B1:B10)' },
  { name: 'FORECAST', description: '線形回帰を使用して予測値を返します。', example: '=FORECAST(新しいx, y範囲, x範囲)' },
  { name: 'STDEVP', description: '母集団の標準偏差を返します。', example: '=STDEVP(A1:A10)' },
  { name: 'CORREL', description: '2つのデータセット間の相関を返します。', example: '=CORREL(A1:A10, B1:B10)' },
  { name: 'SUBSTITUTE', description: 'テキスト内の指定文字列を置き換えます。', example: '=SUBSTITUTE("Good Morning", "Morning", "Evening")' },
  { name: 'DECIMAL', description: '指定の基数で表現されたテキストを10進数に変換します。', example: '=DECIMAL("1010", 2)' },
  { name: 'BASE', description: '10進数を指定の基数で表現したテキストに変換します。', example: '=BASE(10, 2)' },
  { name: 'WEBSERVICE', description: '指定されたURLからデータを取得します。', example: '=WEBSERVICE("http://example.com")' },
  { name: 'ENCODEURL', description: 'URLの文字列をエンコードします。', example: '=ENCODEURL("Hello World!")' },
  { name: 'IMPORTXML', description: '指定されたURLのXMLデータをインポートします。', example: '=IMPORTXML("http://example.com", "//h1")' },
  { name: 'IMPORTHTML', description: '指定されたURLのHTMLテーブルやリストをインポートします。', example: '=IMPORTHTML("http://example.com", "table", 1)' },
  { name: 'IMAGE', description: '指定したURLの画像をセル内に表示します。', example: '=IMAGE("http://example.com/image.jpg")' },
  { name: 'ENCODEURL', description: 'URLの文字列をエンコードします。', example: '=ENCODEURL("Hello World!")' },
  { name: 'AVERAGEIF', description: '条件を満たす範囲の平均を返します。', example: '=AVERAGEIF(A1:A10, ">5")' },
  { name: 'AVERAGEIFS', description: '複数の条件を満たす範囲の平均を返します。', example: '=AVERAGEIFS(A1:A10, B1:B10, ">5", C1:C10, "<10")' },
  { name: 'COUNTIF', description: '指定された条件に一致するセルの数をカウントします。', example: '=COUNTIF(A1:A10, ">5")' },
  { name: 'COUNTIFS', description: '複数の条件に一致するセルの数をカウントします。', example: '=COUNTIFS(A1:A10, ">5", B1:B10, "<10")' },
  { name: 'LARGE', description: '指定された範囲でn番目に大きい値を返します。', example: '=LARGE(A1:A10, 2)' },
  { name: 'SMALL', description: '指定された範囲でn番目に小さい値を返します。', example: '=SMALL(A1:A10, 2)' },
  { name: 'PERCENTILE', description: '指定した範囲の百分位数を返します。', example: '=PERCENTILE(A1:A10, 0.9)' },
  { name: 'RANK', description: '範囲内の指定された値の順位を返します。', example: '=RANK(A1, A1:A10)' },
  { name: 'MEDIAN', description: '指定した範囲の中央値を返します。', example: '=MEDIAN(A1:A10)' },
  { name: 'MODE', description: '指定した範囲の最頻値を返します。', example: '=MODE(A1:A10)' },
  { name: 'STDEV', description: 'サンプルの標準偏差を返します。', example: '=STDEV(A1:A10)' },
  { name: 'STDEVA', description: 'テキストも含む標準偏差を返します。', example: '=STDEVA(A1:A10)' },
  { name: 'VAR', description: 'サンプルの分散を返します。', example: '=VAR(A1:A10)' },
  { name: 'VARA', description: 'テキストも含む分散を返します。', example: '=VARA(A1:A10)' },
  { name: 'TREND', description: '線形回帰による予測値を返します。', example: '=TREND(A1:A10, B1:B10)' },
  { name: 'LOGEST', description: '指数回帰を行い、予測値を返します。', example: '=LOGEST(A1:A10, B1:B10)' },
  { name: 'GROWTH', description: '指数回帰を行い、将来の値を予測します。', example: '=GROWTH(A1:A10, B1:B10)' },
  { name: 'FTEST', description: '2つのデータセット間の分散の相違を検定します。', example: '=FTEST(A1:A10, B1:B10)' },
  { name: 'TTEST', description: '2つのデータセット間の平均の差を検定します。', example: '=TTEST(A1:A10, B1:B10, 2, 1)' },
  { name: 'ZTEST', description: 'Z検定のp値を返します。', example: '=ZTEST(A1:A10, 5)' },
  { name: 'CHIDIST', description: 'カイ二乗分布の片側確率を返します。', example: '=CHIDIST(18.307, 10)' },
  { name: 'FISHER', description: 'フィッシャーのz変換を返します。', example: '=FISHER(0.5)' },
  { name: 'FISHERINV', description: 'フィッシャーの逆z変換を返します。', example: '=FISHERINV(0.5)' },
  { name: 'LOG10', description: '10を底とする対数を返します。', example: '=LOG10(100)' },
  { name: 'LOG', description: '指定された底の対数を返します。', example: '=LOG(8, 2)' },
  { name: 'IMAGINARY', description: '複素数の虚数部を返します。', example: '=IMAGINARY("5+3i")' },
  { name: 'REAL', description: '複素数の実数部を返します。', example: '=REAL("5+3i")' },
  { name: 'IMDIV', description: '2つの複素数の商を返します。', example: '=IMDIV("3+2i", "1+i")' },
  { name: 'IMPRODUCT', description: '複素数の積を返します。', example: '=IMPRODUCT("3+2i", "1+i")' },
  { name: 'IMSIN', description: '複素数の正弦を返します。', example: '=IMSIN("3+2i")' },
  { name: 'IMCOS', description: '複素数の余弦を返します。', example: '=IMCOS("3+2i")' },
  { name: 'INDEX', description: '範囲から指定された行と列の値を返します。', example: '=INDEX(A1:C10, 2, 3)' },
  { name: 'MATCH', description: '範囲内で指定した検索値の位置を返します。', example: '=MATCH("apple", A1:A10, 0)' },
  { name: 'INDIRECT', description: '文字列で指定されたセル参照を返します。', example: '=INDIRECT("A1")' },
  { name: 'OFFSET', description: '指定した範囲からのオフセットでセル参照を返します。', example: '=OFFSET(A1, 1, 1)' },
  { name: 'XMATCH', description: '範囲内で指定された検索値の位置を返します。', example: '=XMATCH("apple", A1:A10)' },
  { name: 'XLOOKUP', description: '範囲内で検索し、対応する値を返します。', example: '=XLOOKUP("apple", A1:A10, B1:B10)' },
  { name: 'UNIQUE', description: '範囲内のユニークな値を返します。', example: '=UNIQUE(A1:A10)' },
  { name: 'XOR', description: '複数の条件の排他的論理和を返します。', example: '=XOR(TRUE, FALSE)' },
  { name: 'IFNA', description: '式が#N/Aの場合に代替値を返します。', example: '=IFNA(VLOOKUP("x", A1:B10, 2, FALSE), "Not Found")' },
  { name: 'ISEMAIL', description: 'テキストが有効なメールアドレス形式かどうかを判定します。', example: '=ISEMAIL("test@example.com")' },
  { name: 'ISURL', description: 'テキストが有効なURL形式かどうかを判定します。', example: '=ISURL("http://example.com")' },
  { name: 'RUN', description: '外部プログラムを実行します(拡張機能が必要)。', example: '=RUN("script")' },
  { name: 'QUERY', description: '指定した条件に基づいてデータを検索します。', example: '=QUERY(A1:C10, "SELECT A WHERE B > 5")' },
  { name: 'TEXTJOIN', description: '指定した区切り文字でテキストを結合します。', example: '=TEXTJOIN(", ", TRUE, A1:A10)' },
  { name: 'SEQUENCE', description: '指定した範囲で連続する数値のシーケンスを生成します。', example: '=SEQUENCE(5, 1)' },
  { name: 'RAND', description: '0以上1未満の乱数を返します。', example: '=RAND()' },
  { name: 'RANDBETWEEN', description: '指定した範囲内の乱数を返します。', example: '=RANDBETWEEN(1, 10)' },
  { name: 'TRANSPOSE', description: '範囲の行と列を入れ替えます。', example: '=TRANSPOSE(A1:B3)' },
  { name: 'SPLIT', description: '指定した区切り文字でテキストを分割します。', example: '=SPLIT("apple,banana", ",")' },
  { name: 'SORT', description: '指定した範囲のデータを並べ替えます。', example: '=SORT(A1:A10)' },
  { name: 'FILTER', description: '指定した条件に基づいて範囲をフィルタします。', example: '=FILTER(A1:A10, B1:B10 > 5)' },
  { name: 'GOOGLETRANSLATE', description: 'テキストを翻訳します。', example: '=GOOGLETRANSLATE("Hello", "en", "ja")' },
  { name: 'MINVERSE', description: '行列の逆行列を返します。', example: '=MINVERSE(A1:B2)' },
  { name: 'MMULT', description: '2つの行列の積を返します。', example: '=MMULT(A1:B2, C1:D2)' },
  { name: 'CONCATENATE', description: 'テキストを結合します。', example: '=CONCATENATE("Hello", " ", "World")' },
  { name: 'HYPERLINK', description: 'クリック可能なリンクをセルに挿入します。', example: '=HYPERLINK("http://example.com", "Example")' },
  { name: 'SPARKLINE', description: 'スパークライン(セル内グラフ)を表示します。', example: '=SPARKLINE(A1:A10)' },
  { name: 'PROPER', description: '各単語の先頭を大文字に変換します。', example: '=PROPER("hello world")' },
  { name: 'DAYS', description: '2つの日付間の日数を返します。', example: '=DAYS("2024-01-01", "2024-12-31")' },
  { name: 'UNIQUE', description: '範囲内の重複を除いたユニークな値を返します。', example: '=UNIQUE(A1:A10)' },
  { name: 'SUMIF', description: '条件を満たす範囲の合計を返します。', example: '=SUMIF(A1:A10, ">5")' },
  { name: 'SUMIFS', description: '複数の条件を満たす範囲の合計を返します。', example: '=SUMIFS(A1:A10, B1:B10, ">5", C1:C10, "<10")' },
  { name: 'FILTER', description: '指定した条件に基づいて範囲をフィルタします。', example: '=FILTER(A1:A10, B1:B10 > 5)' },
  { name: 'SORT', description: '指定した範囲のデータを並べ替えます。', example: '=SORT(A1:A10, 1, TRUE)' },
  { name: 'TRANSPOSE', description: '範囲の行と列を入れ替えます。', example: '=TRANSPOSE(A1:B3)' },
  { name: 'ARRAYFORMULA', description: '配列を使用して計算を実行します。', example: '=ARRAYFORMULA(A1:A10 + B1:B10)' },
  { name: 'VLOOKUP', description: '検索キーで範囲を検索し、指定した列の値を返します。', example: '=VLOOKUP("apple", A1:B10, 2, FALSE)' },
  { name: 'HLOOKUP', description: '検索キーで行を検索し、指定した列の値を返します。', example: '=HLOOKUP("apple", A1:C2, 2, FALSE)' },
  { name: 'INDEX', description: '範囲から指定された行と列の値を返します。', example: '=INDEX(A1:C10, 2, 3)' },
  { name: 'MATCH', description: '範囲内で指定した検索値の位置を返します。', example: '=MATCH("apple", A1:A10, 0)' },
  { name: 'IFERROR', description: 'エラーが発生した場合に代替値を返します。', example: '=IFERROR(VLOOKUP("x", A1:B10, 2, FALSE), "Not Found")' },
  { name: 'SPLIT', description: '指定した区切り文字でテキストを分割します。', example: '=SPLIT("apple,banana", ",")' },
  { name: 'JOIN', description: '指定した区切り文字で配列を結合します。', example: '=JOIN(", ", A1:A10)' },
  { name: 'UNIQUE', description: '範囲内の重複を除いたユニークな値を返します。', example: '=UNIQUE(A1:A10)' },
  { name: 'COUNTIF', description: '条件を満たすセルの数をカウントします。', example: '=COUNTIF(A1:A10, ">5")' },
  { name: 'COUNTIFS', description: '複数の条件を満たすセルの数をカウントします。', example: '=COUNTIFS(A1:A10, ">5", B1:B10, "<10")' },
  { name: 'AVERAGEIF', description: '条件を満たす範囲の平均を返します。', example: '=AVERAGEIF(A1:A10, ">5")' },
  { name: 'AVERAGEIFS', description: '複数の条件を満たす範囲の平均を返します。', example: '=AVERAGEIFS(A1:A10, B1:B10, ">5", C1:C10, "<10")' },
  { name: 'MAX', description: '指定した範囲の最大値を返します。', example: '=MAX(A1:A10)' },
  { name: 'MIN', description: '指定した範囲の最小値を返します。', example: '=MIN(A1:A10)' },
  { name: 'LARGE', description: '指定された範囲でn番目に大きい値を返します。', example: '=LARGE(A1:A10, 2)' },
  { name: 'SMALL', description: '指定された範囲でn番目に小さい値を返します。', example: '=SMALL(A1:A10, 2)' },
  { name: 'MEDIAN', description: '指定した範囲の中央値を返します。', example: '=MEDIAN(A1:A10)' },
  { name: 'MODE', description: '指定した範囲の最頻値を返します。', example: '=MODE(A1:A10)' },
  { name: 'STDEV', description: 'サンプルの標準偏差を返します。', example: '=STDEV(A1:A10)' },
  { name: 'STDEVA', description: 'テキストも含む標準偏差を返します。', example: '=STDEVA(A1:A10)' },
  { name: 'VAR', description: 'サンプルの分散を返します。', example: '=VAR(A1:A10)' },
  { name: 'VARA', description: 'テキストも含む分散を返します。', example: '=VARA(A1:A10)' },
  { name: 'CHOOSE', description: '指定されたインデックスに基づいて値を返します。', example: '=CHOOSE(2, "Apple", "Banana", "Cherry")' },
  { name: 'RAND', description: '0以上1未満の乱数を返します。', example: '=RAND()' },
  { name: 'RANDBETWEEN', description: '指定した範囲内の乱数を返します。', example: '=RANDBETWEEN(1, 10)' },
  { name: 'NOW', description: '現在の日付と時刻を返します。', example: '=NOW()' },
  { name: 'TODAY', description: '現在の日付を返します。', example: '=TODAY()' },
  { name: 'DATE', description: '指定した年、月、日の日付を作成します。', example: '=DATE(2024, 11, 3)' },
  { name: 'DATEDIF', description: '2つの日付の間の日数、月数、年数を返します。', example: '=DATEDIF(A1, B1, "D")' },
  { name: 'YEAR', description: '日付から年を返します。', example: '=YEAR(A1)' },
  { name: 'MONTH', description: '日付から月を返します。', example: '=MONTH(A1)' },
  { name: 'DAY', description: '日付から日を返します。', example: '=DAY(A1)' },
  { name: 'TEXT', description: '数値を指定した形式のテキストに変換します。', example: '=TEXT(A1, "0.00")' },
  { name: 'TRIM', description: 'テキストの前後の空白を削除します。', example: '=TRIM("  Hello World  ")' },
  { name: 'UPPER', description: 'テキストを大文字に変換します。', example: '=UPPER("hello")' },
  { name: 'LOWER', description: 'テキストを小文字に変換します。', example: '=LOWER("HELLO")' },
  { name: 'PROPER', description: '各単語の先頭を大文字に変換します。', example: '=PROPER("hello world")' },
  { name: 'CONCATENATE', description: 'テキストを結合します。', example: '=CONCATENATE("Hello", " ", "World")' },
  { name: 'TEXTJOIN', description: '指定した区切り文字でテキストを結合します。', example: '=TEXTJOIN(", ", TRUE, A1:A10)' },
  { name: 'SUBSTITUTE', description: 'テキスト内の指定文字列を置き換えます。', example: '=SUBSTITUTE("Good Morning", "Morning", "Evening")' },
  { name: 'FIND', description: 'テキスト内で指定文字列を検索し、位置を返します。', example: '=FIND("o", "Hello World")' },
  { name: 'SEARCH', description: 'テキスト内で指定文字列を検索し、位置を返します(大文字小文字を区別しない)。', example: '=SEARCH("o", "Hello World")' },
  { name: 'LEFT', description: 'テキストの左側の指定された文字数を返します。', example: '=LEFT("Hello", 2)' },
  { name: 'RIGHT', description: 'テキストの右側の指定された文字数を返します。', example: '=RIGHT("Hello", 2)' },
  { name: 'MID', description: 'テキストの指定された位置から指定された文字数を返します。', example: '=MID("Hello", 2, 3)' },
  { name: 'LEN', description: 'テキストの文字数を返します。', example: '=LEN("Hello")' },
  { name: 'CHAR', description: '指定したコード番号の文字を返します。', example: '=CHAR(65)' },
  { name: 'CODE', description: '指定した文字のコード番号を返します。', example: '=CODE("A")' },
  { name: 'ISBLANK', description: 'セルが空であるかどうかを判断します。', example: '=ISBLANK(A1)' },
  { name: 'ISTEXT', description: 'セルがテキストかどうかを判断します。', example: '=ISTEXT(A1)' },
  { name: 'ISNUMBER', description: 'セルが数値かどうかを判断します。', example: '=ISNUMBER(A1)' },
  { name: 'ISEVEN', description: '数値が偶数かどうかを判断します。', example: '=ISEVEN(A1)' },
  { name: 'ISODD', description: '数値が奇数かどうかを判断します。', example: '=ISODD(A1)' },
  { name: 'ERROR.TYPE', description: 'エラーの種類を返します。', example: '=ERROR.TYPE(A1)' },
  { name: 'ISERR', description: 'エラーが発生したかどうかを判断します。', example: '=ISERR(A1)' },
  { name: 'ISERROR', description: 'エラーが発生したかどうかを判断します。', example: '=ISERROR(A1)' },
  { name: 'EOMONTH', description: '指定した日付から指定した月数の末日を返します。', example: '=EOMONTH(A1, 1)' },
  { name: 'WORKDAY', description: '指定した日付から指定した営業日数後の日付を返します。', example: '=WORKDAY(A1, 10)' },
  { name: 'NETWORKDAYS', description: '2つの日付間の営業日数を返します。', example: '=NETWORKDAYS(A1, B1)' },
  { name: 'WEEKDAY', description: '日付の曜日を返します。', example: '=WEEKDAY(A1)' },
  { name: 'WEEKNUM', description: '日付の週番号を返します。', example: '=WEEKNUM(A1)' },
  { name: 'YEARFRAC', description: '2つの日付間の年の小数部分を返します。', example: '=YEARFRAC(A1, B1)' },
  { name: 'CHOOSE', description: '指定されたインデックスに基づいて値を返します。', example: '=CHOOSE(2, "Apple", "Banana", "Cherry")' },
  { name: 'INDIRECT', description: '文字列で指定された範囲を返します。', example: '=INDIRECT("A1")' },
  { name: 'R1C1', description: 'R1C1形式でセルを参照します。', example: '=R1C1' },
  { name: 'GETPIVOTDATA', description: 'ピボットテーブルからデータを取得します。', example: '=GETPIVOTDATA("Sales", A3)' },
  { name: 'IMPORTDATA', description: '外部データをスプレッドシートにインポートします。', example: '=IMPORTDATA("http://example.com/data.csv")' },
  { name: 'IMPORTHTML', description: 'HTMLテーブルをスプレッドシートにインポートします。', example: '=IMPORTHTML("http://example.com", "table", 1)' },
  { name: 'IMPORTXML', description: 'XMLデータをスプレッドシートにインポートします。', example: '=IMPORTXML("http://example.com/data.xml", "//name")' },
  { name: 'GOOGLEFINANCE', description: 'Google Financeから株価データを取得します。', example: '=GOOGLEFINANCE("GOOG")' },
  { name: 'IMAGE', description: '画像をスプレッドシートに挿入します。', example: '=IMAGE("http://example.com/image.png")' },
  { name: 'SPARKLINE', description: 'スパークライン(セル内グラフ)を表示します。', example: '=SPARKLINE(A1:A10)' },
  { name: 'FLOOR', description: '数値を指定した基準値で切り捨てます。', example: '=FLOOR(A1, 1)' },
  { name: 'CEILING', description: '数値を指定した基準値で切り上げます。', example: '=CEILING(A1, 1)' },
  { name: 'ROUND', description: '数値を指定した桁数に四捨五入します。', example: '=ROUND(A1, 0)' },
  { name: 'ROUNDUP', description: '数値を切り上げます。', example: '=ROUNDUP(A1, 0)' },
  { name: 'ROUNDDOWN', description: '数値を切り捨てます。', example: '=ROUNDDOWN(A1, 0)' }
];

// 検索関数
function searchFunctions(keyword) {
  const results = functionsList.filter(func =>
    func.name.toLowerCase().includes(keyword.toLowerCase()) ||
    func.description.includes(keyword)
  );
  return results;
}

// 選択された関数の詳細を取得
function getFunctionDetails(name) {
  const func = functionsList.find(f => f.name === name);
  return func || {};
}

検索.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <input type="text" id="keyword" placeholder="キーワードを入力">
    <button onclick="search()">実行</button>
    <div id="results"></div>
    <div id="details"></div>
    <script>
      // 検索実行
      function search() {
        const keyword = document.getElementById('keyword').value;
        google.script.run.withSuccessHandler(displayResults).searchFunctions(keyword);
      }

      // 検索結果をボタンで表示
      function displayResults(results) {
        const resultsDiv = document.getElementById('results');
        resultsDiv.innerHTML = '';
        const detailsDiv = document.getElementById('details');
        detailsDiv.innerHTML = '';

        if (results.length === 0) {
          // 検索結果がない場合のメッセージ
          resultsDiv.innerHTML = '該当する関数が見つかりませんでした。';
        } else {
          results.forEach(func => {
            const button = document.createElement('button');
            button.textContent = func.name;
            button.onclick = function() { showDetails(func.name); };
            resultsDiv.appendChild(button);
            resultsDiv.appendChild(document.createElement('br'));
          });
        }
      }

      // 関数の詳細を表示
      function showDetails(name) {
        google.script.run.withSuccessHandler(displayDetails).getFunctionDetails(name);
      }

      // 関数の説明と使用例を表示
      function displayDetails(func) {
        const detailsDiv = document.getElementById('details');
        detailsDiv.innerHTML = `<h3>${func.name}</h3><p>${func.description}</p><em>${func.example}</em>`;
      }
    </script>
  </body>
</html>

この記事が気に入ったらサポートをしてみませんか?