EXCEL常用公式:
8位随机码
=CONCATENATE(IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*3)=0,CHAR(INT(RAND()*10+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))))
多条件查找(在1个单位格内应用数组公式然后下拉)
SUMPRODUCT
SUM
同 SUMPRODUCTif + vlookup
index + match
在查找结果为字符时用 SUMPRODUCT、SUM 是报错的,它们只认数字
=INDEX(数据表!$C$1:$C$100,MATCH($A1&$B1,数据表!$A$1:$A$100&数据表!$B$1:$B$100,0))
伪公式:
index(引用字段,行号) 显示引用字段中的第N行
MATCH( 条件, 目标字段,0)) 在目标字段中找到满足条件的数据,返回行号
=INDEX(最终要显示的数据列, MATCH( 条件1&条件2, 条件1对应的字段&条件2对应的字段,Match_type用0))
Match_type |
行为 |
1 或省略 |
MATCH 查找小于或等于 lookup_value 的最大值。lookup_array 参数中的值必须以升序排序,例如:...-2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE。 |
0 |
MATCH 查找完全等于 lookup_value 的第一个值。lookup_array 参数中的值可按任何顺序排列。 |
-1 |
MATCH 查找大于或等于 lookup_value 的最小值。lookup_array 参数中的值必须按降序排列,例如:TRUE, FALSE, Z-A, ...2, 1, 0, -1, -2, ... 等等。 |
官方帮助:
如果需要可以添加数据源
可以返回一个 A2:A变动 的范围引用。
(A2:INDEX(A:A,COUNTA(A:A))
这样找到A:A有内容的最大范围,然后返回A2到此位置的范围。(注意段返回的竟然是个范围)
反向查找(从右向左查找)
VLOOKUP 虽然好用,但是有个弱点,条件列只能在左边。如果想 按B字段的内容 找 A 字段就不支持了。下面是网上比较常见的解决方案:
IF 配合 VLOOKUP
=VLOOKUP( "条件XXX" , IF( {1,0}, B1:B6, A1:A6) , 2 ,0)
=VLOOKUP( "条件XXX" , IF( {0,1}, A1:A6, B1:B6) , 2 ,0)
这里的 if 用一个数组做条件,所以返回的也是数组。 上面两种定法都一样,目的就是把 A1:A6, B1:B6 两列的位置调换。
OFFSET 配合 MATCH (这个其实往哪个方向都可以查找)
=OFFSET($A$1,MATCH("条件XXX" , B:B)-1,0)
OFFSET :用于引用 以$A$1为原点, 偏移N行,偏移N列 的单元格。(因为 OFFSET 的偏移是从 0 开始的 )
MATCH :用返回 条件 在B:B 的第几行出现。
自定义公式
连接字符串公式
Function ConTxt(m As String, ParamArray args() As Variant) As Variant
Dim tmptext As Variant, i As Variant, cellv As Variant
Dim cell As Range
tmptext = ""
For i = 0 To UBound(args)
If Not IsMissing(args(i)) Then
Select Case TypeName(args(i))
Case "Range"
For Each cell In args(i)
tmptext = tmptext & cell & m
Next cell
tmptext = Mid(tmptext, 1, Len(tmptext) - Len(m))
Case "Variant()"
For Each cellv In args(i)
tmptext = tmptext & cellv & m
Next cellv
tmptext = Mid(tmptext, 1, Len(tmptext) - Len(m))
Case Else
tmptext = tmptext & args(i) & m
End Select
End If
Next i
ConTxt = tmptext
End Function