Возврат значения следующей ячейки из диапазона на основе выбранной ячейки - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть несколько рабочих листов, и каждый лист содержит сведения о навыках.

Образцы данных

Skills                       Name
Programs(C#, VB, Python)     C#
OS(Windows, Linux)      
DB(Oracle, SQL)              Oracle

Мое требование заключается в том, чтобы пользователь указывал навыки как "Программы (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

1 Ответ

0 голосов
/ 28 февраля 2020

Я полагаю, что это даст вам все с небольшим редактированием номеров листов и предполагаемых значений ячеек отчета.

Существует разница между листами и листами. Листы также включают диаграммы. Поэтому для ваших целей используйте рабочие листы. Кроме того, вы должны пропустить отчеты и рабочие листы администратора для оценки в l oop. Если ваш отчет и рабочие листы администратора равны (1) и (2), тогда начните l oop с 3. Если вы l oop, также оценивает эти листы и если он находит имя навыка в диапазоне, чтобы найти (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...