在实际工作中,我们经常需要从某列返回数据,该数据对应于另一列满足一个或多个条件的数据中的最大值。 如下图1所示,需要返回指定序号(列A)的最新版本(列B)对应的日期(列C)。 ?...IF子句,不仅在生成参数lookup_value的值的构造中,也在生成参数lookup_array的值的构造中。...原因是与条件对应的最大值不是在B2:B10中,而是针对不同的序号。而且,如果该情况发生在希望返回的值之前行中,则MATCH函数显然不会返回我们想要的值。...B10,0)) 转换为: =INDEX(C2:C10,MATCH(4,B2:B10,0)) 转换为: =INDEX(C2:C10,MATCH(4,{4;2;5;3;1;3;4;1;2},0)) 很显示,数组中的第一个满足条件的值并不是我们想要查找的值所在的位置...: =INDEX(C2:C10,1) 得到: 2013-2-21 这并不是满足我们的条件对应的值。
标签:VBA,自定义函数 如下图1所示,查找列A中值为“figs”的行,并返回该行中内容为“X”的单元格对应的该列中首行单元格的内容,即图1中红框所示的内容。...图1 在单元格B20中输入公式: =lookupFruitColours(A20,"X",A2:J17,A1:J1) 这个公式使用了自定义函数lookupFruitColours。...这个自定义函数的代码如下: Option Compare Text Function lookupFruitColours(ByVal lookup_value As String, _ ByVal...lookupFruitColours = Left(result_set, Len(result_set) - 1) End Function 其中,参数lookup_value代表要在指定区域第一列中查找的值...,参数intersect_value代表行列交叉处的值,参数lookup_vector代表指定的查找区域,参数result_vector代表返回值所在的区域。
Q:在工作表中有一些数据,如下图1所示,我想要获取“参数3”等于“A”、”参数4“等于”C1“对应的”参数5”中的最大值,能够使用公式解决吗? ? 图1 A:这种情况用公式很容易解决。...我们看看公式中的: (参数3=D13)*(参数4=E13) 将D2:D12中的值与D13中的值比较: {"A";"B";"A";"B";"A";"A";"B";"A";"B";"A";"A"}=”A”...得到: {TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE} 将E2:E12中的值与E13中的值比较: {"C1";"C2";"C1"...代表同一行的列D和列E中包含“A”和“C1”。...D和列E中包含“A”和“C1”对应的列F中的值和0组成的数组,取其最大值就是想要的结果: 0.545 本例可以扩展到更多的条件。
本次的练习是:如下图1所示,单元格区域A1:E25中存放着数据,列D中是要查找的值需满足的条件,列I和列J中显示查找到的结果,示例中显示的是1月份南区超市销售的蔬菜及其数量。 ?...图1 要求在I2中输入公式,向右向下拖拉以获取全部满足条件的数据。 先不看答案,自已动手试一试。...公式解析 公式中的: COUNTIFS($A:$A,$G$6,$B:$B,$G$9,$C:$C,$G$3)<ROWS($I$2:I2) 用来计算符合条件的结果数(本例中为5),并与已放置值的单元格数(已返回的值...)相比较,以确定在单元格中输入相应的值还是输入空。...FALSE;TRUE;TRUE;FALSE;TRUE}=3 转换为: {1;1;2;2;1;2;0;0;1;1;0;1;2;2;3;3;2;3;1;1;3;3;1;2}=3 数组中有5个3,表明有5条数据满足条件
我们可能熟悉使用INDEX、SMALL等在给定单列或单行数组的情况下,返回满足一个或多个条件的值的列表。这是一项标准的公式技术。...可以很容易地验证,在该公式中的单个条件可以扩展到多个条件,因此,我们现在有了从一维数组和二维数组中生成单列列表的方法。 那么,可以更进一步吗?...本文提供了一种方法,在给定一个或多个相同布局的工作表的情况下,可以创建另一个“主”工作表,该工作表仅由满足特定条件的所有工作表中的数据组成。并且,这里不使用VBA,仅使用公式。...D2:D10"),"Y")) 然后,将这组代表工作表名称的文本字符串的两端连接,在后面是所使用的工作表区域(D2:D10),在前面用单个撇号连接。...实际上,该技术的核心为:通过生成动态汇总小计数量的数组,该小计数量由来自每个工作表中符合条件(即在列D中的值为“Y”)的行数组成,然后将公式所在单元格相对行数与该数组相比较,以便有效地确定公式所在行中要指定的工作表
如下图1所示的工作表,在主工作表MASTER中存放着从数据库下载的全部数据。...现在,要根据列E中的数据将前12列的数据分别复制到其他工作表中,其中,列E中数据开头两位数字是61的单元格所在行前12列数据复制到工作表61中,开头数字是62的单元格所在行前12列数据复制到工作表62中...,同样,开头数字是63的复制到工作表63中,开头数字是64或65的复制到工作表64_65中,开头数字是68的复制到工作表68中。...ReDim Data6465(1 To UBound(x, 1), 1 To 12) ReDim Data68(1 To UBound(x, 1), 1 To 12) '遍历数据并将第5列符合条件的数据存储到相应的数组中...个人觉得,这段代码的优点在于: 将数据存储在数组中,并从数组中取出相应的数据。 将数组数据直接输入到工作表单元格,提高了代码的简洁性和效率。 将代码适当修改,可以方便地实现类似的需求。
一个含有多个元素的数组,有多种排序方式。它可以升序排列,可以降序排列,也可以像我们以前章节说过的,以波浪形方式排序,现在我们要看到的一种是绝对值排序。...对于数组A,绝对值排序满足以下条件:|A[i]| 中存在下标j,满足A[j] == m 那么我们就可以直接返回配对(i,j),这种做法在数组元素全是正数,全是负数,以及是绝对值排序时都成立,只是在绝对值排序的数组中,进行二分查找时...因此在查找满足条件的元素配对时,我们先看看前两种情况是否能查找到满足条件的元素,如果不行,那么我们再依据第三种情况去查找,无论是否存在满足条件的元素配对,我们算法的时间复杂度都是O(n)。..." and " + this.sortedArray[this.indexJ]); } } } 类FindPairInAbsoluteSortedArray用于在绝对值排序的数组中查找满足条件的元素配对
图1 现在,我要将以60至69开头的行放置到另一个名为“OutputFile.csv”的文件中。...图1中只是给出了少量的示例数据,我的数据有几千行,如何快速对这些数据进行查找并将满足条件的行复制到新文件中?..." ") '判断数组的第1个值是否处于60至69之间 '如果是则将其写入文件号指定的文件 If buf(0) >= 60 And buf(0) 的文件中逐行读取其内容并将其赋值给变量ReadLine。 5.Split函数将字符串使用指定的空格分隔符拆分成下标以0为起始值的一维数组。...6.Print语句将ReadLine变量中的字符串写入文件号#2的文件。 7.Close语句关闭指定的文件。 代码的图片版如下: ?
元素节点 DOM节点-主要包括元素节点(标签),文本节点(文本内容),属性节点(标签属性) setAttribbute(attrname.attrvalue)--用来设置元素节点的属性名和属性值,可以替代属性节点的设置...selector选择对应的标签,但是该操作只会返回满足条件的第一个节点 //querySelectorAll(selector)-根据标签选择器selecor选择所有满足条件的节点,并且以数组的形式返回..., // 注意:全局变量中的值在程序运行过程中可能随时发生变化,因此使用时一定小心 // 数组:数组本质上是一个容器,可以帮助开发人员快速提供多个相同的变量,只不过多个变量之间为了区分,每一个变量都会对应一个下表...答:querySelector 根据指定的选择器获取第一个满足条件的元素节点, 返回结果是一个元素节点类型 querySelectorAll 根据指定的选择器获取满足条件的所有元素节点,返 回结果是一个数组类型...--根据指定的选择器获取第一个满足条件的元 素节点 document.querySelectorAll 根据指定的选择器获取满足条件的所有元 素节点 8、常用的元素节点属性有哪些?
document.getElementsByClassName():返回一个对象数组(HTMLCollection类型的对象),包括了所有class名字符合指定条件的元素(搜索范围包括本身),元素的变化实时反映在返回结果中...返回值是一个HTMLCollection对象,也就是说,搜索结果是一个动态集合,任何元素的变化都会实时反映在返回的集合中。这个方法不仅可以在document对象上调用,也可以在任何元素节点上调用。...ES5的方法: document.querySelector():返回匹配指定的CSS选择器的元素节点。如果有多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回null。...如何判断一个元素的 class 列表中是否包含某个 class?如何添加一个class?如何删除一个class?...toString():将class的列表转为字符串。
() 返回文档中匹配指定的CSS选择器的第一元素 document.querySelectorAll() document.querySelectorAll() 是 HTML5中引入的新方法,返回文档中匹配的...CSS选择器的所有元素节点列表 document.removeEventListener() 移除文档中的事件句柄(由 addEventListener() 方法添加) document.renameNode...如果有多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回 null。...返回值是一个 HTMLCollection 对象,也就是说,搜索结果是一个动态集合,任何元素的变化都会实时反映在返回的集合中。...createTextNode() 用来生成文本节点,参数为所要生成的文本节点的内容 // 新建一个div节点和一个文本节点,文本节点插入div节点 var newDiv = document.createElement
ECMAScript 运行在浏览器中然后再结合 Web APIs 才是真正的 JavaScript,Web APIs 的核心是 DOM 和 BOM。...扩展阅读:ECMAScript 规范在不断的更新中,存在多个不同的版本,早期的版本号采用数字顺序编号如 ECMAScript 3、ECMAScript 5,后来由于更新速度较快便采用年份做为版本号,如...DOM 节点 节点是文档树的组成部分,每一个节点都是一个 DOM 对象,主要分为元素节点、属性节点、文本节点等。...【属性节点】是指 HTML 标签中的属性,如上图中 a 标签的 href 属性、div 标签的 class 属性。 【文本节点】是指 HTML 标签的文字内容,如 title 标签中的文字。...querySelector () 满足条件的第一个元素 querySelectorAll () 满足条件的元素集合 返回伪数组(有长度有索引号的数组,但是没有 pop () push () 等数组方法)
posts = document.querySelectorAll('li:not(header li)'); // 获取文章列表,返回他们的文本内容(标题)列表并且输出。..."reducer" 函数有两个参数:累积器和当前值。在每次迭代中,累积器的值是上一次调用 "reducer" 函数的结果,当前值则是数组中正在处理的元素。...const tagLists = posts.values().flatMap((x) => x.querySelectorAll('.tag').values()); // 获取列表中每个标签的文本内容...// 从博客存档页面中选择博客文章列表 const posts = document.querySelectorAll('li:not(header li)'); // 查找任何博客文章的文本内容(标题...然后其会返回迭代器中第一个使函数返回 true 的元素,如果没有任何一个元素满足条件,那么返回 undefined。
() 返回所有class名字符合指定条件的元素,返回值是一个类似数组的HTMLCollection对象;匹配失败,返回[] 参数为 标签的class属性的值 var p = document.getElementsByClassName...() document.querySelector方法接受一个CSS选择器作为参数,返回匹配该选择器的元素节点; 如果有多个节点满足匹配条件,则返回第一个匹配的节点。...('.p'); p[1].style.background = 'yellow'; 多个参数值,使用,(英文逗号)隔开,而querySelector()返回第一个选中的节点; var p = document.querySelectorAll...//选中 id 属性值为p1的元素 // var p = document.querySelectorAll('[id="p1"]'); //选中div元素的class属相值为p的元素 // var p...= document.querySelectorAll('div.p'); //选中所有的p标签,但是class值为p的除外 var p = document.querySelectorAll('p:
) { //true } 元素遍历 ---- Element Traversal API 为 DOM 元素添加了以下 5 个属性: childElementCount: 返回子元素(不包括文本节点和注释...传入多个类名时,类名的先后顺序不重要。...此外,这个新类型还定义如下方法: add(value): 将给定的字符串值添加到列表中,如果值已经存在,就不添加了 contains(value): 表示列表中是否存在给定的值,如果存在则返回 true...,否则返回 false remove(value): 从列表中删除给定的字符串 toggle(value): 如果列表中已经存在给定的值,删除它,如果列表中没有给定的值,添加它 //删除"disabled...innerHTML 属性返回与调用元素的所有子节点(包括元素、注释和文本节点)对应的 HTML 标记 outerHTML 属性返回调用它的元素及所有子节点的 HTML 标签 scrollIntoView
修改元素内容: textContent: 获取或设置元素的文本内容。...修改元素属性: getAttribute(): 获取元素的属性值。...setAttribute(): 设置元素的属性值。...删除元素: removeChild(): 从父元素中删除指定的子元素。...它首先通过 querySelectorAll 获取所有的列表项,并为每个列表项添加点击事件处理程序。当列表项被点击时,会弹出一个警告框显示点击的是哪个列表项。
document对象包含了文档的基本信息,我们可以通过JavaScript对HTML页面中的所有元素进行访问、修改。...() 返回一个类似数组的对象(HTMLCollection),包括了所有class名字符合指定条件的元素 ?...6、querySelectorAll() 和querySelector()类似,不过querySelectorAll()返回的是满足条件的所有元素,也就是一个NodeList类型的对象 elementList...= document.querySelectorAll(selectors) querySelectorAll方法的参数,可以是逗号分隔的多个CSS选择器,返回所有匹配其中一个选择器的元素 四、创建元素...(" ")创建了一个文本节点 用来生成文本节点,参数为所要生成的文本节点的内容 var newDiv = document.createElement("div"); var newContent =
== true) { // ... } element = element.parentNode } 假如存在一个条件满足,就可以 skip: const skipChecks = (...element) => { return skip && skipCompare.some((compare) => compare(element)) // 调用 skipCompare 看是否满足条件...== 'function') { return (element) => element === entry // 满足条件就跳过 } return entry }) ignore 的逻辑...获取多个元素的 CSS Selector 其实在 select.js 中,有个 getQuerySelector 的方法,会根据传入的值进行不同的方法的调用,假如是传入的是多个 Node 的时候,就会自动调用...其中会做一些优化(见 optimize.js 文件),优化后会使用 querySelectorAll 方法,确定其正确性 通过先获取到元素列表公共祖先元素的 CSS Selector,并获取到元素列表的公共属性
,用于生成节点的一个临时父节点(下边会说的); 第三个是一些属性值,是一个json结构的,但要注意为驼峰命名法,因为zepto的精简,所以不想jQuery那样的宽容。...会有多个,所以css的值必须为一个json*/ 完成以后就可以返回该dom元素了。...对象就算是通过ID选择器也会返回一个length为1的数组的原因,如果没有获取到该元素,则返回一个空数组; 如果不满足该条件,则判断上下文是否为一个标签节点,文档对象节点或一个文档片段节点。...直接返回空数组(任性~); 但如果满足条件了,继续进行判断,选择器为不包含子选择器的(get√),并且不是通过ID选择的(get√),而且支持getElementsByClassName的(...来取;(的确只有这两种了) 然后这里是不满足条件的处理 直接通过上下文调用querySelectorAll()方法,这个是支持子选择器的。
HTML集合(HTML Collection)是元素节点的集合由 'getElementsByClassName' 和 'getElementsByTagName' 返回包含所有类型的节点:元素节点、文本节点等节点列表...(NodeList)包含所有类型的节点:元素节点、文本节点等由 'querySelectorAll' 返回通过 querySelectorAll 返回的节点列表是静态的。...静态意味着如果添加、删除或修改与查询匹配的更多项目,它不会更新。但这并不意味着更新节点列表内项目的属性不会被反映出来。...(document.createElement('p'))console.log(pEls) // {p, p , p}所以它没有被添加到节点列表中,但如果我们使用 getElementsByTagName...做同样的事情,它将被反映出来,我们将看到第四个 被添加到了 HTML 集合中。