Ситуация: у меня есть код, который просматривает некоторые данные на листе и, учитывая то, что находится в определенной ячейке, вставляет что-то в другой столбец (та же строка).
Пример: если мой A5 является "Bond", он объединяет содержимое A5 и B5 и вставляет его в J5.
Obs1: существуют десятки подусловий для первого, второго, третьего и четвертого столбцов данных.
Что я пробовал до сих пор: мне удалось создать очень длинную вложенную цепочку "если" и учесть все условия. Я также смог использовать Select case для учета условий первого столбца.
Проблема. Теперь я пытаюсь использовать вложенный выбор регистра для учета этих условий (учитывая, что цепочка If огромна и слишком длинна, чтобы быть эффективной). Проблема в том, что я не могу правильно учитывать вложенные выборочные случаи для нескольких условий.
Вопрос. Как лучше всего работать с вложенным выбором варианта при наличии нескольких условий?
Obs2: Из предыдущего исследования я нашел здесь сообщения о вложенных if, особенно когда есть значение true или false. У меня это не работает, потому что у каждого слоя гораздо больше условий.
Код 1: вот что я получил, используя Select Case:
Function fxr2()
Dim lRow As Long, LastRow As Long
Dim w As Workbook
Dim ws As Worksheet
Set w = ThisWorkbook
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
LastRow = Worksheets("Fixer").Cells(Rows.Count, "A").End(xlUp).Row
For lRow = 7 To LastRow
Dim type1 As String, result As String
type1 = w.Worksheets("Fixer").Cells(lRow, 1).Text
Select Case type1
Case Is = "Bail-in"
result = w.Worksheets("Fixer").Cells(lRow, 1)
Case Is = "Basel"
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " & w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3) & " " & w.Worksheets("Fixer").Cells(lRow, 4) & " " & w.Worksheets("Fixer").Cells(lRow, 5)
Case Is = "Collateral"
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " & w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3)
Case Is = "Design"
result = w.Worksheets("Fixer").Cells(lRow, 1)
Case Is = "General"
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " & w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3)
Case Is = "Investment"
result = w.Worksheets("Fixer").Cells(lRow, 1)
Case Is = "Lower"
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " & w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3)
Case Is = "Recapitalization"
result = w.Worksheets("Fixer").Cells(lRow, 1)
Case Is = "Refinance"
result = w.Worksheets("Fixer").Cells(lRow, 1)
Case Is = "Upper"
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " & w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3)
Case Else
result = w.Worksheets("Fixer").Cells(lRow, 1) & " " &
w.Worksheets("Fixer").Cells(lRow, 2)
End Select
w.Worksheets("Fixer").Cells(lRow, 10).Value = result
Next lRow
End Function
Код 2. Это небольшая часть кода, где я использовал вложенные операторы If:
ElseIf w.Worksheets("Fixer").Cells(lRow, 1) = "General" Then
w.Worksheets("Fixer").Cells(lRow, 10) =
w.Worksheets("Fixer").Cells(lRow, 1) & " " &
w.Worksheets("Fixer").Cells(lRow, 2) & " " & w.Worksheets("Fixer").Cells(lRow, 3)
If w.Worksheets("Fixer").Cells(lRow, 4) = "Base" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inte" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Tier" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "v" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Ba" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Bas" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Int" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inte" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inter" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Tie" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Tier-" Then
w.Worksheets("Fixer").Cells(lRow, 11) = ""
ElseIf w.Worksheets("Fixer").Cells(lRow, 4) = "" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Upp" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Uppe" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Upper" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "I" Or w.Worksheets("Fixer").Cells(lRow, 4) = "L" Or w.Worksheets("Fixer").Cells(lRow, 4) = "T" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "U" Then
w.Worksheets("Fixer").Cells(lRow, 11) = ""
ElseIf w.Worksheets("Fixer").Cells(lRow, 4) = "Design" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inve" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inv" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Low" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Lowe" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Proj" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Pro" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Ref" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Refi" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Stock" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Inve" Then
w.Worksheets("Fixer").Cells(lRow, 11) =
w.Worksheets("Fixer").Cells(lRow, 4)
ElseIf w.Worksheets("Fixer").Cells(lRow, 4) = "LBO" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Working" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Work" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Wor" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Gre" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Gree" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Green" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Interc" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Intercom" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Intercompany" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Intermed" Then
w.Worksheets("Fixer").Cells(lRow, 11) =
w.Worksheets("Fixer").Cells(lRow, 4)
ElseIf w.Worksheets("Fixer").Cells(lRow, 4) = "Low" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Lower" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "Lowe" Or
w.Worksheets("Fixer").Cells(lRow, 4) = "No" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Pen" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Pens" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Pension" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Projec" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Project" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Refin" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Refina" Then
w.Worksheets("Fixer").Cells(lRow, 11) = w.Worksheets("Fixer").Cells(lRow, 4)
ElseIf w.Worksheets("Fixer").Cells(lRow, 4) = "Refinanc" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Refinance" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Stoc" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Sto" Or w.Worksheets("Fixer").Cells(lRow, 4) = "w" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Wor" Or w.Worksheets("Fixer").Cells(lRow, 4) = "W" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Tier-1" Or w.Worksheets("Fixer").Cells(lRow, 4) = "Tier-2" Then
w.Worksheets("Fixer").Cells(lRow, 11) = w.Worksheets("Fixer").Cells(lRow, 4)
End If
Obs3: чтобы лучше объяснить, как организованы мои данные, вот небольшая их часть.
Case "Collateral", "General", "Lower"
- person jsheeran   schedule 13.04.2017With
или назначив свой лист переменной. - person SJR   schedule 13.04.2017Select Case
в том, что он приятнее для глаз. Я сомневаюсь, что есть какое-либо преимущество в скорости, о котором можно было бы говорить (хотя другие здесь знают лучше). Уж точно не стоит связывать себя узлами, чтобы избежать Если! - person SJR   schedule 13.04.2017