我在不同的Excel工作表中有一组数据。
两张纸都有一个共同的列。列名:表1中的名称和表2中的名称(类)
表1:列名:
表2:列名:
我希望能够点击任何工作表中的单元格并将我引导至sheet3,其中显示与所选单元格相关的相关数据。例如,如果我要单击工作表1中的名称,该名称和该名称的相关数据将显示在工作表3中。工作表1和工作表2中名称的行号不同。
CODES:
DetailsUsedRange = ThisWorkbook.Sheets("Sheet1").UsedRange.Rows.Count
With ActiveCell
Name = ThisWorkbook.Sheets("Sheet1").Cells(.Row, 9)
NoName = InStr(1, "(" & ThisWorkbook.Sheets("Sheet2").Cells(.Row, 1) & ")", (Name))
MsgBox NoName
MsgBox Name
For i = DetailsUsedRows To 1 Step -1
If (NoName <> 0) Then ThisWorkbook.Sheets("Student Viewer").Cells(2, 3).Value = ThisWorkbook.Sheets("Sheet1").Cells(.Row, 1).Value
.....
end if
next i
我希望它像这样显示。但名称(IC)阻止我以相同的名称和ic
获取各种数据答案 0 :(得分:0)
我的想法是在动态范围的vba中使用vlookup。
Dim i As Long, k As Long
i = Sheets("sheet2").UsedRange.Rows.Count
k = 1
With ActiveCell
Sheets("Sheet3").Range("A2") = ActiveCell & "(" & ActiveCell.Offset(0, 1) & ")"
For J = 2 To i
k = WorksheetFunction.Match(Sheets("Sheet3").Range("A2"), Sheets("sheet2").Range("A2:A9"), 0) + k
If k > i Then
Exit For
End If
Sheets("sheet3").Range("A" & J) = Sheets("Sheet3").Range("A2")
Sheets("Sheet3").Range("B" & J) = WorksheetFunction.VLookup(Sheets("sheet3").Range("A2"), Sheets("Sheet2").Range("A" & k & ":C" & i), 2, 0)
Sheets("Sheet3").Range("C" & J) = WorksheetFunction.VLookup(Sheets("sheet3").Range("A2"), Sheets("Sheet2").Range("A" & k & ":C" & i), 3, 0)
Next
End With
Sheets("sheet3").activate
您需要更改对工作表的引用和可能使用的范围。但是我的代码是做什么的,它将采用activecell。取名称和班级,并将其格式化为&#34;名称(班级)&#34;然后粘贴到sheet3上(&#34; A2&#34;)。然后在sheet2上执行vlookup以找到与该名称匹配的任何内容,然后在Sheet3的下一列中给出主题和成绩。
编辑更新代码以修复计数问题
答案 1 :(得分:0)
假设:
这是一个常规模块(例如Module1
)
Sub Get_Data(val As String, source1 As Worksheet, _
source2 As Worksheet, dest As Worksheet)
Dim lr As Long
With source1
lr = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A3:C" & lr)
.AutoFilter 1, val
.SpecialCells(xlCellTypeVisible).Copy dest.Range("A1")
End With
.AutoFilterMode = False
End With
With source2
lr = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A3:C" & lr)
.AutoFilter 1, val
.Offset(0, 1).Resize(, 2).SpecialCells( _
xlCellTypeVisible).Copy dest.Range("D1")
End With
.AutoFilterMode = False
End With
End Sub
这将转到 Sheet1 代码模块。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo halt
Application.EnableEvents = False
Dim r As Range, lr As Long
With Me
lr = .Range("A" & .Rows.Count).End(xlUp).Row
Set r = .Range("A4:A" & lr)
Sheet3.Cells.ClearContents
If Not Intersect(Target, r) Is Nothing _
And Len(Target.Value2) <> 0 Then
Get_Data Target.Value2, Me, Sheet2, Sheet3
Sheet3.Activate ' Just to view Sheet3
End If
End With
moveon:
Application.EnableEvents = True
Exit Sub
halt:
MsgBox Err.Description
Resume moveon
End Sub
现在,如果您想在 Sheet2 中获得相同的效果,您还需要在其中添加相同的事件。
请注意,您只需添加Get_Data
sub中的参数,如下所示:
Get_Data Target.Value2, Sheet1, Me, Sheet3
顺便说一下,Sheet1, Sheet2 and Sheet3
是工作表代号
这是您创建新工作簿时的默认设置
现在要检查您是否使用了正确的代号,您需要在属性窗口中进行检查。
每当选择名称时都会发生这种情况。如果您想要进行更多控制,可以在Selection_Change
事件中转移Double_Click
代码。因此,只有双击名称才能查看记录。