我有两个表:汉字和词汇表。想象一下汉字表是这样的:
目
一
人词汇表如下所示:
目的
一番目
一人
二人
人々
注目
目標
一匹我想生成一个表,找到汉字表中包含汉字的所有词汇表,并将它们一起列出。因此,最终结果如下所示:
人 一人
二人
人々
一 一人
一番目
一匹
目 目的
一番目
注目
目標我不知道该怎么做。如果我只有一个汉字,我可以使用查询函数生成包含这个汉字的所有词汇表。但是,我是否可以创建一个动态表,将“汉字”和“词汇”表内部连接起来,查找“词汇”包含“汉字”的每个实例?
我尝试使用查询来合并这两个表,但它不起作用,因为这两个表的大小不匹配:
=QUERY({C1:C296,D1:D224}, "SELECT Col2 WHERE Col1 contains Col2")在上面的示例中,C列/ Col2是词汇,D列/ Col1是汉字。
有没有办法使用Google Sheets来做到这一点?
发布于 2019-09-26 22:47:43
最简单的解决方法是按1个值获取交叉点:
=FILTER(D:D;REGEXMATCH(D:D;"目"))

图中显示了如何使用此函数的副本获取所有交叉点
另一种方法是使用大的数组公式,比如:
=TRANSPOSE(SPLIT(TEXTJOIN(",";1;TRANSPOSE(ARRAYFORMULA(IF(REGEXMATCH(A1:A8;TRANSPOSE(B1:B3));A1:A8;))));","))

发布于 2019-09-27 05:14:16
=ARRAYFORMULA(SORT(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(REGEXEXTRACT(IFERROR(REGEXEXTRACT(C1:C, REPT("(.)", LEN(C1:C)))),
TEXTJOIN("|", 1, A1:A)))<>"", "♦"&IFERROR(REGEXEXTRACT(IFERROR(
REGEXEXTRACT(C1:C, REPT("(.)", LEN(C1:C)))), TEXTJOIN("|", 1, A1:A)))&"♣"&C1:C, ))
,,999^99)),,999^99), "♦")), "♣"))))

发布于 2020-06-30 02:23:34
说真的,更好的方法就是添加一个自定义函数:
/**
* inner join on equality
*
* @param {Range} items1 Table 1
* @param {Range} items2 Table 2
* @param {Integer} ix1 0-based index of key in Table1
* @param {Integer} ix2 0-based index of key in Table2
*
* @customfunction
* @author marc meyer (marqueymarc)
*/
function innerJoinEQ(items1 = [[]], items2 = [[]], ix1= 0, ix2= 0) {
var res = [];
var item2ix = 0;
var map = new Map();
items1 = Array.isArray(items1)? items1: [[items1]];
items2 = Array.isArray(items2)? items2: [[items2]];
items2.forEach((item2) => {
let entries = map.get(item2[ix2]) || [];
entries.push(item2);
map.set(item2[ix2], entries);
});
items1.forEach((item1) => {
let entries = map.get(item1[ix1]) || [];
entries.forEach((rightPart) => {
let cp = rightPart.slice();
cp.splice(ix2, 1);
res.push([...item1, ...cp]);
})
});
return res;
}https://stackoverflow.com/questions/58116794
复制相似问题