=IF(COUNTIF(B:B,A1)>0,A1,"")
公式说明:B列的数据中如果含有A1,显示A1单元格内容,否则显示空白。
-------a列,填写内容的最后一行
endRow = Sheet24.Range("a65536").End(xlUp).Row
----取sheet最后一行,包括格式,
Sheet1.UsedRange.Rows.Count
-----弹出窗口
MsgBox shtMessage.Range("B5").Value, vbExclamation
=IF(COUNTIF(B:B,A1)>0,A1,"")
公式说明:B列的数据中如果含有A1,显示A1单元格内容,否则显示空白。
-------a列,填写内容的最后一行
endRow = Sheet24.Range("a65536").End(xlUp).Row
----取sheet最后一行,包括格式,
Sheet1.UsedRange.Rows.Count
-----弹出窗口
MsgBox shtMessage.Range("B5").Value, vbExclamation
转载于:https://www.cnblogs.com/cancelbug/p/7234413.html
自定义函数VBA
输出相同函数:
按alt+f11 右键新建一个模块
查找相同
Function 查找相同(rg1 As Range, rg2 As Range)
For i = 1 To Len(rg1.Value)
If InStr(rg2, Mid(rg1.Value, i, 1)) > 0 Then
a = a & Mid(rg1, i, 1)
End If
Next
查找相同 = a
End Function
判断是否一致:
=IF(OR(ISERROR(FIND(A1,B1,1)),ISERROR(FIND(B1,A1,1))),"一样","不一样")
=IF(OR(ISNUMBER(FIND(A1,B1,1)),ISNUMBER(FIND(B1,A1,1))),"一样","不一样")
FIND(A1,B1,1)左边是否包含右边
FIND(B1,A1,1)右边是否左边
ISNUMBER(FIND(A1,B1,1)
提取第一个汉字及其之后的所有内容:
1.数组公式:=MID(A2,MATCH(1=1,LENB(MID(A2,ROW($1:$25),1))=2,),25)
使用组合键Ctrl+Shrift+Enter
2.VBA函数:
Sub CommandButton1_Click()
Dim arr, brr(), str$, mr%
mr =Range("a65536").End(xlUp).Row
arr = Range("a2:a" &mr)
ReDim brr(1 To UBound(arr))
For i = 1 To UBound(arr)
For j = 1 To Len(arr(i, 1))
str = Mid(arr(i, 1), j,1)
If VBA.Asc(str) < 0Then
brr(i) = Mid(arr(i, 1), j,Len(arr(i, 1)))
Exit For
End If
Next j
Next i
Range("e2:e" &mr).ClearContents
Range("e2").Resize(UBound(brr), 1) =Application.Transpose(brr)
End Sub
接触VBA第一天,写了个闵可夫斯基距离
当r=1时,距离为曼哈顿距离当r=2时,距离为欧几里得距离距离(直线距离)
当r→∞时,距离为切比雪夫距离
根据闵可夫斯基距离距离公式,在VBA写出以下代码
Public Function distance(a As Range, b As Range, Optional r As Integer = 2) Dim i As Integer '为支持横向数组和纵向数组的距离计算,数组长度设为“行长度和列长度两者中较大的数值” If a.Rows.Count > a.Columns.Count Then i = a.Rows.Count Else i = a.Columns.Count End If Dim j As Single j = 0 Dim k As Integer If r = 1 Then '当r=1时,距离为 For k = 1 To i j = j + Abs(a(k) - b(k)) Next k ElseIf r = 999 Then '当r→∞时(这里用999表示),距离为 Dim t As Single For k = 1 To i t = 0 t = Abs(a(k) - b(k)) If t > j Then j = t End If Next k ElseIf r = 2 Then '当r=2时,距离为 For k = 1 To i j = j + (a(k) - b(k)) ^ 2 Next k j = Sqr(j) End If distance = j End Function
由于设置了支持横向数组和纵向数组,所以横竖数组都能运用此函数,
函数和其参数为: distance(a, b, r) 其中a和b类型为范围(即a,b两点的坐标),r的类型为整数(选择范围为1, 2, 999),下面看个例子
有一说一,感觉在VBA里写Minkowski距离实际用处不太大
学习杨老师的全民一起vba课程内容整理:
Find语法:
Range.Find(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SearchFormat)()
What:唯一一个必选参数,含义为需要查询的内容,特点为变体类型,可以接受数字,字符串,日期等数据类型
此外,该参数可以接受通配符。
常用通配符
?一个任意字符,比如?a?可以表示bac aaa等
!任意多个任意字符(包括0个),比如*a*可以表示123aadd23, ade,a等
MatchCase: 是否匹配大小写字母,True-大小写视作不同,False-大小写视作相同
LookAt:匹配单元格,取值:1代表单元格的内容必须与欲查找内容长度相同,不能多出字符
2单元格的内容只需包含欲查找的字符串即可
SearchFormat:是否按照格式查找 true是,false否
其他参数因为不常用就不一一介绍啦