Excel怎样加密多表查找数据列表
1、在EXCEL中实现输入名字即可查询该员工12个月工资明细,并且因为薪资保密,员工本人打开只能查询到员工本人的12个月明细,而不能看到其他的,怎样处理? (百度知道问题)




2、解题思路:
方法一函数公式处理:
1、名字查询该员工每月工资明细,用函数VLOOKUP可以做到。
2、薪资保密,员工本人打开只能查询到员工本人的12个月明细,用名字查询是不能保密,要加入每个员工本人密码(已设定,只告知该本人),然后把12个月工资工作表和密码表隐藏,设置工作表簿保护(加密),查询表设置工作表保护(加密,不显示公式和不能修改)
3、方法二VBA处理:
用工作表事件Change和内置函数VLOOKUP。
1、例文件中增加一表命名mm,填写姓名(所有员工)和密码。
在C1填写公式:
=IF(ISNA(VLOOKUP(查询表!$B$1,mm!$A$2:$B$1001,1,FALSE)),1,IF(VLOOKUP(查询表!$B$1,mm!$A$2:$B$1001,2,FALSE)=查询表!$B$2,2,3))

2、在表“查询表”中,A2输入:密码
下面5行单元格输入公式:
B5:=IF(OR($B$1="",$B$2=""),"",CHOOSE(mm!$C$1,"无此员工",IF(ISNA(VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,1,FALSE)),"",$B$1),"密码不正确"))
C5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,2,FALSE),"")
D5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,3,FALSE),"")
E5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,4,FALSE),"")
F5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,5,FALSE),"")
G5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,6,FALSE),"")
H5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,7,FALSE),"")
I5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,8,FALSE),"")
J5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,9,FALSE),"")
K5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,10,FALSE),"")
L5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,11,FALSE),"")
M5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,12,FALSE),"")
N5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,13,FALSE),"")
O5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,14,FALSE),"")
P5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,15,FALSE),"")
Q5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,16,FALSE),"")
R5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,17,FALSE),"")
S5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,18,FALSE),"")
T5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,19,FALSE),"")
U5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,20,FALSE),"")
V5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,21,FALSE),"")
W5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,22,FALSE),"")
X5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,23,FALSE),"")
Y5:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1,'2020-1'!$B$4:$Z$1003,24,FALSE),"")
6行单元格输入(由行字数限制不能全列出,参考规律处理)如下:
B6:=IF(OR($B$1="",$B$2=""),"",CHOOSE(mm!$C$1,"无此员工",IF(ISNA(VLOOKUP($B$1, '2020-2'!$B$4:$Z$1003,1,FALSE)),"",$B$1),"密码不正确"))
C6:=IF(AND(mm!$C$1=2,$B5<>""),VLOOKUP($B$1, '2020-2'!$B$4:$Z$1003,2,FALSE),"")

3、B1、B2单元格设置不“锁定”,公式单元格设置“锁定”和“隐藏”。该工作表设置密码保护(密码:AAA888)。

4、除“查询表”外其它表全隐藏,该工作簿设置密码保护(密码:AAA888)(结构打勾,窗口不要打勾)。

5、通过以上可以达到保密(不是绝对保密码,知到密码或破解密码或通过公式引用表和VBA可以查看到其它数据),输入查询结果如下:


1、例文件中增加一表命名mm,填写姓名(所有员工)和密码。

2、在表“查询表”中,A2输入:密码,如下图。

3、鼠标移到当前工作表标签栏“材料查询”表,右键,弹出快捷菜单,如下图。

4、在快捷菜单找到【查看代码】并单击,打开VBA(宏)编辑界面,如下图。

5、在左边代码框中复制下面代码到该框中,如下图。
Private Sub Worksheet_Change(ByVal Target As Range)
'2020-6-5 22:16:23
Dim xmmm, xm, mm1, mt As Worksheet, r As Long, i As Long, k As Long, m
If Target.Row = 1 And Target.Column = 2 Then Range("b2").Value = ""
If Target.Row = 2 And Target.Column = 2 Then
xm = Range("b1").Value
xmmm = Target.Value
On Error Resume Next
If xm <> "" And xmmm <> "" Then
mm1 = Application.WorksheetFunction.VLookup(xm, Sheets("mm").Range("$A$2:$B$1001"), 1, False)
If mm1 = "" Then
Range("B5:Y16").ClearContents
Range("B5:B16").Value = "无此员工"
Else
mm1 = Application.WorksheetFunction.VLookup(xm, Sheets("mm").Range("$A$2:$B$1001"), 2, False)
If mm1 <> xmmm Then
Range("B5:Y16").ClearContents
Range("B5:B16").Value = "密码不正确"
Else
Range("B5:Y16").ClearContents
For Each mt In Worksheets
If mt.Name <> ActiveSheet.Name Or mt.Name <> "mm" Then
r = mt.Range("B" & Rows.Count).End(xlUp).Row
k = 0
For i = 4 To r
If mt.Range("B" & i).Value = xm Then
k = i
Exit For
End If
Next i
If k <> 0 Then
m = mt.Range("Z4").Value
If m = "1月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B5")
ElseIf m = "2月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B6")
ElseIf m = "3月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B7")
ElseIf m = "4月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B8")
ElseIf m = "5月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B9")
ElseIf m = "6月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B10")
ElseIf m = "7月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B11")
ElseIf m = "8月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B12")
ElseIf m = "9月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B13")
ElseIf m = "10月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B14")
ElseIf m = "11月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B15")
ElseIf m = "12月" Then
mt.Range("B" & k & ":Y" & k).Copy Range("B16")
End If
End If
End If
Next mt
End If
End If
End If
End If
End Sub


6、以上步骤操作过程如下动画图。

7、除“查询表”外其它表全隐藏,该工作簿设置密码保护(密码:AAA888)(结构打勾,窗口不要打勾)。

8、VBE窗口代码加密,设置密码:AAA888

9、输入查询结果如下:

