XMATCH

Excel XMATCH는 조회를 수행하고 세로 또는 가로 범위 내 위치를 반환하는 함수로, MATCH 함수의 더욱 강력하고 유연한 후속 함수입니다. XMATCH는 유사 일치 및 정확히 일치를 둘 다 지원하며 부분 일치에 와일드카드(* ?)를 사용할 수 있습니다.

구문 인수 설명 lookup_value (필수) 조회 값 lookup_array (필수) 검색할 배열 또는 범위 [match_mode] (선택 사항) 다음 일치 유형을 지정합니다.0 - 정확히 일치. 정확히 일치하는 항목이 없으면 #N/A를 반환합니다. 이 유형이 기본값입니다.-1 - 정확히 일치. 일치 항목이 없는 경우 다음으로 작은 항목을 반환합니다.1 - 정확히 일치. 일치 항목이 없는 경우 다음으로 큰 항목을 반환합니다.2 - *, ? 및 ~ 기호에 특별한 의미가 있는 와일드카드 일치 [search_mode] (선택 사항) 사용할 검색 모드를 지정합니다.1 - 첫 번째 항목에서 시작하는 검색을 수행합니다. 이 유형이 기본값입니다.1 - 마지막 항목부터 시작하는 역방향 검색을 수행합니다.2 - 오름차순으로 정렬된 lookup_array를 사용하는 이진 검색을 수행합니다. 정렬되지 않은 경우 잘못된 결과가 반환됩니다.2 - 내림차순으로 정렬된 lookup_array를 사용하는 이진 검색을 수행합니다. 정렬되지 않은 경우 잘못된 결과가 반환됩니다. 사용법 참고 사항 Excel XMATCH 함수는 조회를 수행하고 위치를 반환합니다. XMATCH는 세로 또는 가로 범위에서 조회를 수행하며, 더욱 유연하고 강력한 MATCH 후속 함수입니다. XLOOKUP은 유사 일치 및 정확히 일치를 둘 다 지원하며 부분 일치에 와일드카드(* ?)를 사용할 수 있습니다. XLOOKUP 함수와 마찬가지로 XMATCH는 데이터 검색을 첫 번째 값부터 또는 마지막 값부터(즉, 역방향 검색) 수행할 수 있습니다. 마지막으로, XMATCH는 검색 속도를 높이기 위해 특별히 최적화된 이진 검색을 수행할 수 있습니다. 정책 XMATCH는 세로 및 가로 배열을 둘 다 사용할 수 있습니다. XMATCH는 조회 값이 없는 경우 #N/A를 반환합니다.
window.onload = function() { var spread = new GC.Spread.Sheets.Workbook(_getElementById("ss")); spread.options.allowDynamicArray = true; initStyles(spread); initSpread(spread); }; function initSpread(spread) { spread.setSheetCount(4); spread.suspendPaint(); spread.suspendCalcService(); initSheet1(spread.getSheet(0)); initSheet2(spread.getSheet(1)); initSheet3(spread.getSheet(2)); initSheet4(spread.getSheet(3)); spread.resumeCalcService(); spread.resumePaint(); } function initStyles(spread) { var introStyle = new GC.Spread.Sheets.Style(); introStyle.name = 'intro'; introStyle.font = 'normal bold 16px Segoe UI'; introStyle.foreColor = "#172b4d"; spread.addNamedStyle(introStyle); var introStyle1 = new GC.Spread.Sheets.Style(); introStyle1.name = 'intro1'; introStyle1.font = 'normal bold 14px Calibri'; introStyle1.hAlign = 0; introStyle1.vAlign = 1; introStyle1.foreColor = "#172b4d"; spread.addNamedStyle(introStyle1); var formulaStyle = new GC.Spread.Sheets.Style(); formulaStyle.name = 'formula'; formulaStyle.font = 'normal bold 12px Consolas'; formulaStyle.foreColor = "#c00000"; introStyle1.vAlign = 1; spread.addNamedStyle(formulaStyle); var tableHeaderStyle = new GC.Spread.Sheets.Style(); tableHeaderStyle.name = 'tableHeader'; tableHeaderStyle.font = "normal bold 14.7px Calibri"; tableHeaderStyle.hAlign = 1; tableHeaderStyle.backColor = "#d9e1f2"; spread.addNamedStyle(tableHeaderStyle); var tableContentStyle = new GC.Spread.Sheets.Style(); tableContentStyle.name = 'tableContent'; tableContentStyle.font = "normal normal 14.7px Calibri"; tableContentStyle.hAlign = 1; spread.addNamedStyle(tableContentStyle); var sourceStyle = new GC.Spread.Sheets.Style(); sourceStyle.name = 'source'; sourceStyle.hAlign = 0; sourceStyle.backColor = "#fce8ce"; spread.addNamedStyle(sourceStyle); var resultStyle = new GC.Spread.Sheets.Style(); resultStyle.name = 'result'; resultStyle.hAlign = 0; resultStyle.backColor = "#e2efda"; spread.addNamedStyle(resultStyle); } function initSheet1(sheet) { sheet.name('Use Case'); var table1Source = { name: 'Quarterly Employee Commissions', data: [ { salesRap: 'Jim', quarter: 'Q1', revenue: 351 }, { salesRap: 'Jim', quarter: 'Q2', revenue: 210 }, { salesRap: 'Kevin', quarter: 'Q1', revenue: 687 }, { salesRap: 'Sarah', quarter: 'Q1', revenue: 300 }, { salesRap: 'Sarah', quarter: 'Q2', revenue: 809 }, { salesRap: 'Kevin', quarter: 'Q2', revenue: 285 }, { salesRap: 'Bob', quarter: 'Q1', revenue: 110 } ] }; sheet.addSpan(1, 1, 1, 6); sheet.setValue(1, 1, table1Source.name); sheet.getCell(1, 1).hAlign(1).font("normal bold 15px Calibri"); sheet.setColumnWidth(1, 83); sheet.setColumnWidth(2, 73); sheet.setColumnWidth(3, 77); sheet.setColumnWidth(4, 122); sheet.setColumnWidth(5, 134); sheet.setColumnWidth(6, 98); var table1 = sheet.tables.add('Table1', 2, 1, 7, 6); table1.style(GC.Spread.Sheets.Tables.TableThemes.medium2); var table1Column1 = new GC.Spread.Sheets.Tables.TableColumn(1, "salesRap", "Sales Rap"); var table1Column2 = new GC.Spread.Sheets.Tables.TableColumn(2, "quarter", "Quarter"); var table1Column3 = new GC.Spread.Sheets.Tables.TableColumn(3, "revenue", "Revenue"); var table1Column4 = new GC.Spread.Sheets.Tables.TableColumn(4, null, "Comm Category"); var table1Column5 = new GC.Spread.Sheets.Tables.TableColumn(5, null, "Comm Percentage", "0%"); var table1Column6 = new GC.Spread.Sheets.Tables.TableColumn(6, null, "Commission"); table1.autoGenerateColumns(false); table1.bind([table1Column1, table1Column2, table1Column3, table1Column4, table1Column5, table1Column6], 'data', table1Source); var table2Source = { name: "Commissions Table", data: [ { category: 1, sales: 100, percentage: 0.05 }, { category: 2, sales: 200, percentage: 0.1 }, { category: 3, sales: 400, percentage: 0.15 }, { category: 4, sales: 800, percentage: 0.20 } ] }; sheet.addSpan(1, 8, 1, 3); sheet.setValue(1, 8, table2Source.name); sheet.getCell(1, 8).hAlign(1).font("normal bold 15px Calibri"); sheet.setColumnWidth(8, 88); sheet.setColumnWidth(9, 57); sheet.setColumnWidth(10, 91); var table2 = sheet.tables.add('Table2', 2, 8, 4, 3); table2.style(GC.Spread.Sheets.Tables.TableThemes.medium2); var table2Column1 = new GC.Spread.Sheets.Tables.TableColumn(1, "category", "Category"); var table2Column2 = new GC.Spread.Sheets.Tables.TableColumn(2, "sales", "Sales"); var table2Column3 = new GC.Spread.Sheets.Tables.TableColumn(3, "percentage", "Percentage", "0%"); table2.autoGenerateColumns(false); table2.bind([table2Column1, table2Column2, table2Column3 ], 'data', table2Source); table1.setColumnDataFormula(3, '=XMATCH([@Revenue],Table2[Sales],-1,1)'); table1.setColumnDataFormula(4, '=XLOOKUP([@[Comm Category]],Table2[Category],Table2[Percentage],0,0,1)'); table1.setColumnDataFormula(5, '=[@Revenue]*[@[Comm Percentage]]'); } function initSheet2(sheet) { sheet.name('basic exact match'); var intro = '#1 - basic exact match'; var formula = '=XMATCH(H5,B6:B10)'; sheet.setValue(1, 1, intro); sheet.setStyle(1, 1, 'intro'); sheet.setValue(2, 1, formula); sheet.setStyle(2, 1, 'formula'); var data = [ ["Movie","Year","Rank","Sales"], ["Fargo",1996,5,61], ["L.A. Confidential",1997,4,126], ["The Sixth Sense",1999,1,673], ["Toy Story",1995,2,362], ["Unforgiven",1992,3,159] ]; sheet.setArray(4, 1, data); for (var i = 0; i < data.length; i++) { for (var j = 0; j < data[i].length; j ++) { var styleName; if (i === 0) { styleName = 'tableHeader'; } else { styleName = 'tableContent'; } sheet.setStyle(4 + i, 1 + j, styleName); } } sheet.setColumnWidth(1, 126); sheet.setValue(4, 6, 'Movie'); sheet.setStyle(4, 6, 'source'); sheet.setValue(5, 6, 'Position'); sheet.setStyle(5, 6, 'result'); sheet.setValue(4, 7, 'Toy Story'); sheet.setFormula(5, 7, formula); } function initSheet3(sheet) { sheet.name('basic approximate match'); var intro = '#2 - basic approximate match'; var formula = '=XMATCH(H5,E6:E10,1)'; sheet.setValue(1, 1, intro); sheet.setStyle(1, 1, 'intro'); sheet.setValue(2, 1, formula); sheet.setStyle(2, 1, 'formula'); var data = [ ["Movie","Year","Rank","Sales"], ["Fargo",1996,5,61], ["L.A. Confidential",1997,4,126], ["The Sixth Sense",1999,1,673], ["Toy Story",1995,2,362], ["Unforgiven",1992,3,159] ]; sheet.setArray(4, 1, data); for (var i = 0; i < data.length; i++) { for (var j = 0; j < data[i].length; j ++) { var styleName; if (i === 0) { styleName = 'tableHeader'; } else { styleName = 'tableContent'; } sheet.setStyle(4 + i, 1 + j, styleName); } } sheet.setColumnWidth(1, 126); sheet.setValue(4, 6, 'Sales'); sheet.setStyle(4, 6, 'source'); sheet.setValue(5, 6, 'Position'); sheet.setStyle(5, 6, 'result'); sheet.setValue(4, 7, 400); sheet.setFormula(5, 7, formula); } function initSheet4(sheet) { sheet.name('multiple values'); var intro = '#3 - multiple values'; var formula = '=XMATCH({5,4,1},D6:D10)'; sheet.setValue(1, 1, intro); sheet.setStyle(1, 1, 'intro'); sheet.setValue(2, 1, formula); sheet.setStyle(2, 1, 'formula'); var data = [ ["Movie","Year","Rank","Sales"], ["Fargo",1996,5,61], ["L.A. Confidential",1997,4,126], ["The Sixth Sense",1999,1,673], ["Toy Story",1995,2,362], ["Unforgiven",1992,3,159] ]; sheet.setArray(4, 1, data); for (var i = 0; i < data.length; i++) { for (var j = 0; j < data[i].length; j ++) { var styleName; if (i === 0) { styleName = 'tableHeader'; } else { styleName = 'tableContent'; } sheet.setStyle(4 + i, 1 + j, styleName); } } sheet.setColumnWidth(1, 126); sheet.setValue(4, 6, 'Rank'); sheet.setStyle(4, 6, 'source'); sheet.setValue(5, 6, 'Position'); sheet.setStyle(5, 6, 'result'); sheet.setValue(4, 7, '{5,4,1}'); sheet.setFormula(5, 7, formula); } function _getElementById(id) { return document.getElementById(id); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="spreadjs culture" content="ko-kr" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-resources-ko/dist/gc.spread.sheets.resources.ko.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> </div> </body> </html>
input[type="text"] { width: 200px; margin-right: 20px; } label { display: inline-block; width: 110px; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; } input[type=button] { margin-top: 6px; display: block; width:216px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } code { border: 1px solid #000; }