【问题标题】:Return next cell value from a range based on selected cell根据所选单元格从范围中返回下一个单元格值
【发布时间】:2020-02-28 06:06:43
【问题描述】:

我有多个工作表,每个工作表都包含技能详细信息。

Sample data

技能名称 程序(C#、VB、Python)C# 操作系统(Windows、Linux) 数据库(甲骨文,SQL)甲骨文

我的要求是,如果用户将技能设置为“程序(C#,VB,Python)”,则返回下一个单元格值,即“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

【问题讨论】:

  • 您的帖子中没有截图。此外,给出的代码不足以完全理解。能贴出完整代码吗?
  • 抱歉,Naresh 造成了混乱,我已重新编辑并重新发布。

标签: excel vba


【解决方案1】:

我相信这将为您提供几乎所有工作表编号和预期报告单元格值的编辑

工作表和工作表之间存在差异。工作表还包括图表。因此,出于您的目的,请使用工作表。此外,您必须跳过报告和管理工作表以在循环中进行评估。如果您的报告和管理工作表是 (1) 和 (2),则从 3 开始循环。如果您循环还评估这些工作表,并且如果它在这些工作表中找到 (rng) 范围内的技能名称,则这些工作表中的值也将出现在你的报告。

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 = 1 To Worksheets.Count
Set rng = Worksheets(i).Range("B14:C100")
Set SkillRng = rng.Find(What:=SkillName)
k = Sheets("Report").Range("A1").CurrentRegion.Rows.Count + 1
If Not SkillRng Is Nothing Then
Sheets("Report").Cells(k, 1) = SkillName
Sheets("Report").Cells(k, 2) = SkillRng.Value
Sheets("Report").Cells(k, 3) = SkillRng.offset(0,1)
Sheets("Report").Cells(k, 4) = Worksheets(i).name
End If
Next i

End sub

【讨论】:

  • 感谢 Naresh,但是报告处于任何位置,因此我包含了“如果不是 SkillRng”。但是如何根据给定的示例数据获取名称对技能的价值?
  • 在您的问题中,您想要skiiname 的工作表名称(资源)?
  • 否,Resource 是报告表的列名
  • 这能回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2015-10-11
  • 2014-10-12
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多