vlookupとApp Scriptでのペースト?

-1
2021.12.31

可能かどうかはわかりませんが、アプリのスクリプトを使ってセルのデータを指定したエリアに移動させる方法をご存知の方はいらっしゃいませんか?逆Vlookupのようなものでしょうか?Vlookupがタイトルにマッチしたセルからデータを引き出すのと同じように、セルのデータをセルのタイトルにマッチしたエリアに送信したいのですが...。しかし、逆です。

ご協力ありがとうございました。)

更新:以下は、スクリプトなしのhttps://docs.google.com/spreadsheets/d/1ie8k6a9gcOg06tVVc1bCFhandIH7vy2LUgk2_vusOAc/edit?usp=sharingの練習用セルへのリンクです。

アイデアとしては、£300を含むセル(D7)は、セルのタイトル(両方とも02/01/22)を介してB7に指示されるというものです。

回答
1
2022.01.01

なぜスクリプトを使用する必要があるのか不明ですが、これは次のようなプレーンバニラhlookup()式で行うことができます。

=arrayformula( iferror( hlookup(A6:A15, D6:F7, rows(D6:F7), false) ) )

サンプルスプレッドシートの新しいSolutionシートをご覧ください。別のスプレッドシートファイルからデータを読み取るには、D6:F7の代わりにimportrange()を、rows(D6:F7)の代わりに2を使用します。

ご質問にお答えすると、次のようにSpreadsheetApp.openById()を使って別のスプレッドシートファイルからデータを読み取り、Array.indexOf()でルックアップを行うことができます。

function transverseLookup() {
  const sourceRange = SpreadsheetApp
    .openById('1ie8k6a9gcOg06tVVc1bCFhandIH7vy2LUgk2_vusOAc')
    .getRange('Sheet1!D6:F7');
  const targetRange = SpreadsheetApp
    .getActive()
    .getRange('Sheet1!A6:B15');
  const sourceKeys = sourceRange
    .offset(0, 0, 1)
    .getDisplayValues().flat();
  const sourceValues = sourceRange
    .offset(1, 0, 1)
    .getValues().flat();
  const values = targetRange.getDisplayValues()
    .map(row => row[0])
    .map(key => [sourceValues[sourceKeys.indexOf(key)] ?? null]);
  targetRange.offset(0, 1, values.length, values[0].length)
    .setValues(values);
}