Макрос Excel - выбор случаев - PullRequest
2 голосов
/ 02 мая 2011

У меня пока нет вопросов на этот вопрос, не стреляйте в меня, если я ошибаюсь! : P

У меня есть монстр, если еще структура около 300-400 линий. Со структурой корпуса я смог бы сократить ее до 100 или меньше. Проблема в том, что вы находите только выбранные случаи с фиксированными значениями, а не значениями ячеек.

Что делает код?

C17-C22 может быть присвоено значение 1 или 0. Если значение равно 1, текст копируется в рабочую таблицу, если значение равно 0, ничего не происходит.

Select case ???
   Case "C17" = 1
      show me text!!
   Case "C18" = 1
      show me text!!
   ...
End select

Я знаю, что могу сделать это с разными вариантами выбора

Select case "C17".value
   Case 1
      show me text!!
End select
...

Но я думаю, что это возможно сделать в одном БОЛЬШОМ случае выбора, а не в нескольких случаях выбора.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Звучит так, как будто вы усложняете свою жизнь, пытаясь вставить свою проблему в Select Case конструкцию.Select Case, кстати, почти точно так же, как If Else;разница в основном косметическая, и вы можете в принципе использовать их взаимозаменяемо .

Почему бы не что-то вроде этого:

Dim i As Long
Dim varFlags As Variant
Dim varText As Variant

' Load flags from sheet.
varFlags = Range("C17:C22")

' Load text associated with each flag. Here I'll just hardcode them. 
varText = Array("Text17", "Text18", "Text19", "Text20", "Text21", "Text22")

For i = LBound(varFlags, 1) To UBound(varFlags, 1)
    If varFlags(i, 1) = 1 Then
        'It's a 1. Copy the relevant text. 
        'Here I just MsgBox it.
        MsgBox varText(i - 1) 'Sorry for the i-1, my varText array is zero-based!
    Else
        'It's not a 1. Do nothing.
    End If
Next i
1 голос
/ 02 мая 2011

Оператор выбора должен различать некоторые различные значения, которые может иметь переменная.Т.е. Select Case - это левая часть уравнения, а следующие case Уставы - это разные правые части уравнения.Я думаю, что ваша задача не является работой для Select case

Если случаи одинаковы для каждой ячейки, прокрутите диапазон и сделайте выбор для каждой ячейки.Но если вы проверите только, является ли ячейка 0 или 1, тогда используйте if

Что-то вроде:

For each c in SourceRange
  if c.value Then
      ...
  end if
Next c
...