需要基于某个选定范围的范围内的右下一个单元格值

问题描述 投票:0回答:1

我在VBA中还很陌生,目前正在寻找解决方案。我有多张基于候选人姓名的表格,每张表格都包含技能详细信息(末尾给出的示例数据)。在管理表中,用户将输入技能名称并创建报告。假设用户输入C#,并且将具有技能名称作为C#的所有人都添加到报告中。我正在放置我的代码,但是它不起作用。请帮助。

Private Sub BtnReport_Click()
Dim SkillName As String
Dim SkillRng As Range
Dim rng As Range
'Dim nextblankrow As Long
'Dim lastrow As Long
Dim x As Long
Dim y As Long
Dim val As String

SkillName = ActiveWorkbook.Worksheets("Admin").Range("L4")

If SkillName = "" Then
    MsgBox "Select a skill name"
    Exit Sub
End If

'Sheets(2).Select
'Set rng = Sheets(2).Range("B14:B100").Find(What:=SkillName)
'MsgBox rng.Value

Sheets("Report").Select
Sheets("Report").Cells.ClearContents
Sheets("Report").Cells(1, 1) = "Skill Name"
Sheets("Report").Cells(1, 2) = "Resource"

'''''For i = 1 To Sheets.Count - 1
'''''    Set rng = Sheets(i).Range("B14:C100")
'''''    Set SkillRng = rng.Find(What:=SkillName)
'''''    If Not SkillRng Is Nothing Then
'''''        Sheets("Report").Cells(i + 1, 1) = SkillRng.Value
'''''        MsgBox rng.Cells.Value
''''''        Sheets("Report").Cells(i + 1, 2) = rng.Offset(RowoffSet = 1, Columnoffset = 2).Value
''''''        Sheets("Report").Cells(i + 1, 2) = SkillRng.Cells(Selection.Row, Selection.Column + 1).Value
'''''        Sheets("Report").Cells(i + 1, 3) = ActiveWorkbook.Worksheets(i).name
'''''    End If
'''''Next i
    Set rng = Sheets(2).Range("B14:C100")
    Set SkillRng = rng.Find(What:=SkillName)

    For x = 1 To rng.Rows.Count
        For y = 1 To rng.Columns.Count
            If rng.Cells(x, y) = SkillRng Then
'                Sheets("Report").Cells(2, 2) = rng.Cells(x, y + 1)
                MsgBox SkillRng
                MsgBox x
                MsgBox y
                val = Cells(x, y).Value
 '               val = SkillRng
                MsgBox val
            End If
        Next y
    Next x

样本数据

Skills                       Name
Programs(C#, VB, Python)     C#
OS(Windows, Linux)      
DB(Oracle, SQL)              Oracle   
excel vba report
1个回答
0
投票

工作表和工作表之间有区别工作表还包括图表。因此,为您的目的使用工作表。另外,您还必须跳过“报告”和“管理工作表”以进行循环评估。如果您的报告和管理工作表分别为(1)和(2),则从3开始循环,如下所示

如果您必须评估除第一张纸以外的所有纸,然后从第二张开始循环

Private Sub BtnReport_Click()
Dim SkillName As String
Dim SkillRng As Range
Dim rng As Range

SkillName = ActiveWorkbook.Worksheets("Admin").Range("L4")

If SkillName = "" Then
MsgBox "Select a skill name"
Exit Sub
End If

Sheets("Report").Select
Sheets("Report").Cells.ClearContents
Sheets("Report").Cells(1, 1) = "Skill Name"
Sheets("Report").Cells(1, 2) = "Resource"

For i = 2 To Worksheets.Count - 1
Set rng = Worksheets(i).Range("B14:C100")
Set SkillRng = rng.Find(What:=SkillName)
If Not SkillRng Is Nothing Then
Sheets("Report").Cells(i, 1) = SkillName
Sheets("Report").Cells(i, 2) = SkillRng.Value
Sheets("Report").Cells(i, 3) = SkillRng.offset(0,1)
Sheets("Report").Cells(i, 4) = Worksheets(i).name
End If
Next i

End sub
© www.soinside.com 2019 - 2024. All rights reserved.