右侧
黑客技术
当前位置:网站首页 > 网站入侵 > 正文

vba中查找人数_vba实现查找功能

作者:hacker发布时间:2022-07-11分类:网站入侵浏览:109评论:1


导读:导航:1、vba关于获取查找个数?2、vba的countif函数3、VBA查找并复制旁边的内容4、利用VBA实现excel查找功能5、用vba如何统计优秀...

导航:

vba关于获取查找个数?

VBA删行,必须逆向删,从下向上处理。

咱们假设身份证号是从A2到A100。

这段代码的效果,是从最后一行向第2行,逐行进行判断。

先用IF判断A2至A列第i行中,含有多少个Ai的身份证号,

如果第2行至第i行含有Ai这个身份证号的数量大于1个,说明Ai这个身份证号是重复的,

满意这个条件的话,再用另一个IF继续判断,

如果Bi是空值或者等于0,

那么第i行删除。

代码如下,你复制吧:

Sub ShanChong()

  Dim i

  For i = 100 To 2 Step -1 '逆向遍历第100至第2

      If WorksheetFunction.CountIf(Range("A2:A" i), Range("A" i)) 1 Then '如果Ai在A2:Ai中的个数大于1个

          If Range("B" i) = "" Or Range("B" i) = 0 Then '如果Bi等于空或者等于0

              Rows(i).Delete '那么删除第i行

          End If

      End If

  Next

  MsgBox "处理完毕!", , "提示" '完毕时弹窗提醒

End Sub

vba的countif函数

许多EXCEL问题都涉及数据计数,对于一些简单的计数,通常使用COUNT函数或COUNTA函数就可以解决。然而,在实际的业务处理当中,往往存在诸多条件的限制,仅仅使用简单的统计函数是无法满足人们的实际需求的,例如多条件计数、统计不重复个数等。

例如,在一个EXCEL表格中,D列是考生的数学考试成绩,我们想统计数学成绩及格的人数。可以使用“=COUNTIF(D:D,"=60")”来实现。

本例中,COUNTIF函数可以对区域中满足单个条件的单元格区域进行计数。语法如下:

COUNTIF(参数一,参数二),其中参数一为需要计算其中满足条件的单元格数目的单元格区域,参数二是用于定义将对哪些单元格进行计数的数字、表达式、单元格引用或文本字符串。

COUNTIF函数的常见用法如下:(假如数据所在单元格区域命名为“ Data ”)

说 明

=COUNTIF(Data,"=") 返回真空单元格个数(真空单元格是指什么都没有的单元格)

=COUNTIF(Data,"") 返回真空+假真空单元格个数(假真空是指0字符的空文本)

=COUNTIF(Data,"")

返回非真空单元格个数

=COUNTIF(Data,"*")

返回文本型单元格个数

=COUNTIF(Data,"9.99E+307")

返回数值型单元格个数

=COUNTIF(Data,"""") 返回区域内所有单元格个数

=COUNTIF(Data,"0") 返回偶包含负值的单元格个数

=COUNTIF(Data,"0") 返回真不等于零的单元格个个数

=COUNTIF(Data,60)

返回值等于60的单元格个数

=COUNTIF(Data,"60") 返回值大于60的单元格个数

=COUNTIF(Data,"60") 返回值小于60的单元格个数

=COUNTIF(Data,"=60")

返回值大于等于60的单元格个数

=COUNTIF(Data,"=60")

返回值小于等于60的单元格个数

=COUNTIF(Data,A1)

返回值与A1单元格内容相同的单元格个数

=COUNTIF(Data,""A1) 返回值大于A1单元格内容的单元格个数

=COUNTIF(Data,""A1) 返回值小于A1单元格内容的单元格个数

=COUNTIF(Data,"???")

返回字符等于3的单元格个数

=COUNTIF(Data,"YDL")

返回值等于YDL的单元格个数

=COUNTIF(Data,"YDL?")

返回以字母YDL开头且字符数等于4的单元格个数

=COUNTIF(Data,"YDL*")

返回以字母YDL开头的文本单元格的个数

=COUNTIF(Data,"?YDL*")

返回第2,3,4字符为YDL的单元格个数

=COUNTIF(Data,"*YDL*")

返回含的YDL字符的单元格个数

=COUNTIF(Data,"*"A1"*")

返回包含A1单元格内容的文本单元格个数

=COUNTIF(Data,TODAY()) 返回值等于当前日期的单元格个数

=COUNTIF(Data,""AVERAGE(Data)) 返回大于均值的单元格个数

=SUM(COUNTIF(Data,""{10,15})*{1,-1})

返回大于10小于等于15的单元格个数

=SUM(COUNTIF(Data,{TRUE,FALSE}))

返回包含逻辑值的单元格个数

特别指出的是,在EXCEL2010中,新增了一个多条件计数函数,那就是“COUNTIFS” ,假如在一个EXCEL表格中,D3:D50单元格的内容是职工的年龄,E3:E50单元格的内容是是否有房,F3:F50单元格的内容是是否有车,那么统计职工中35岁以上有房有车的人数应该用如下公式:

COUNTIFS(D3:D50,"35",E3:E50,"是",F3:F50,"是")

VBA查找并复制旁边的内容

使用方法:

[如果您知道如何使用宏,可以跳过这一节]

1.为了防止宏被禁用,需要修改安全性设置。具体方法为,在 Excel 中打开“工具”菜单,依次指向 宏 - 安全性,打开“安全性”对话框,并在“安全级”选项卡中选择“中”。这样您就可以在打开文档时选择是否禁用宏。如果安全级为“高”,那么没有经过签署的宏会被禁用〔就包括自己使用 VBA 编写的函数(宏)〕。

2.打开“工具”菜单,依次指向 宏 - Visual Basic 编辑器,在出现的 Visual Basic 编辑器中新建一个模块,并在模块中输入代码

全部代码如下:

'注意:由于 VBA 对文档的修改有不可逆转性,因此请注意备份!

Sub AutoFillMarks()

On Error GoTo ErrHandle

Dim shtNames As Worksheet '表 1

Dim shtMarks As Worksheet '表 2

Dim strTemp As String

Dim I As Long

Dim ColMarks As Collection

Dim strSTAT As String

Dim lngRecMiss As Long

Dim strName As String

10

strTemp = InputBox("请输入姓名表(表 1)的名称:")

If strTemp = Empty Then Exit Sub

Set shtNames = ActiveWorkbook.Worksheets.Item(strTemp)

strTemp = InputBox("请输入成绩表(表 2)的名称:")

If strTemp = Empty Then Exit Sub

Set shtMarks = ActiveWorkbook.Worksheets.Item(strTemp)

DoEvents

strSTAT = "姓名表:" shtNames.Name vbCrLf "成绩表:" shtMarks.Name vbCrLf

If MsgBox(strSTAT, vbOKCancel + vbInformation, "确认") = vbCancel Then GoTo 10

Set ColMarks = New Collection

Application.StatusBar = "正在载入成绩表……"

For I = 1 To shtMarks.Rows.Count

strName = Trim(shtMarks.Cells(I, 1)) '从成绩表中提取一个姓名,并删除姓名前后的空格

If strName Empty Then

50 ColMarks.Add shtMarks.Cells(I, 2), strName '将姓名作为关键字,把相应的分数放入集合中

End If

If I Mod 500 = 0 Then Application.StatusBar = "正在载入成绩表…… " I "/" shtMarks.Rows.Count: DoEvents

Next I

strSTAT = strSTAT "已载入的成绩数量(重名的按照一个计算):" ColMarks.Count vbCrLf

Application.StatusBar = "正在填写姓名表……"

For I = 1 To shtNames.Rows.Count

'由于 Excel 2003 中每个工作表有 65536 行,因此 Rows.Count 始终为 65536

strName = Trim(shtNames.Cells(I, 1)) '从姓名表中提取一个姓名,并删除姓名前后的空格

If strName Empty Then '如果这一行的第一列有姓名

If ColExist(ColMarks, strName) Then '检查姓名是否存在

shtNames.Cells(I, 2) = ColMarks.Item(strName) '填写姓名

Else

shtNames.Cells(I, 3) = "未找到"

lngRecMiss = lngRecMiss + 1

End If

End If

If I Mod 250 = 0 Then Application.StatusBar = "正在填写姓名表…… " I "/" shtNames.Rows.Count: DoEvents

Next I

strSTAT = strSTAT "未找到成绩的人数:" lngRecMiss

Application.StatusBar = ""

MsgBox strSTAT, vbInformation, "统计信息"

Exit Sub

ErrHandle:

Select Case Erl

Case 50 '如果出现重名

strSTAT = strSTAT "重名:成绩表,行:" I ",姓名:" strName vbCrLf

ColMarks.Item(strName) = "#重名#"

Resume Next

Case Else

Select Case MsgBox("Error:" Err.Number vbCrLf Err.Description, 16 + vbAbortRetryIgnore)

Case vbAbort

Case vbRetry

Resume

Case vbIgnore

Resume Next

End Select

End Select

End Sub

利用VBA实现excel查找功能

我刚才也写了一个,你下载解压出来(共2个文件)。

然后打开VBA编辑器,在工程资源管理窗口内点鼠标右键,

再点“导入文件……”,把UserForm1导入你要实现查找功能的那个文档中。

运行就行了。

查找结果列表框中全部列出。

单击列表中的条目,就会跳转到相应工作表,选定对应单元格。

用vba如何统计优秀人数

优秀人数:"

a

msgbox

")

if

rng

=

80

then

a

=

a

+

1

if

rng

,

c

as

byte,

i

as

byte;良好人数:"

b

msgbox

"=

60

then

j

=

j

+

1

next

b

=

i

-

a

c

=

j

-

i

msgbox

"表格没截图,不知道从公式如何引用数据

你提到的vba,其实使用公式函数就能轻松解决了

截个图补充一下吧,注意行号列标一起截好

补充回答代码如下,当然也可以引用工作表函数countif:

sub

test()

dim

a

as

byte,

b

as

byte,

j

as

byte

dim

rng

as

range

a

=

0:

i

=

0:

j

=

for

each

rng

in

range("e2;=

70

then

i

=

i

+

1

if

rng

:e100"

标签:vba中查找人数


已有1位网友发表了看法:

  • 访客

    访客  评论于 2022-07-11 11:37:33  回复

    ksheet '表 2Dim strTemp As StringDim I As LongDim ColMarks As CollectionDim strSTAT As StringDim l

欢迎 发表评论:

网站入侵排行
最近发表
标签列表