Как заполнить ячейку, когда все ячейки верны - PullRequest
2 голосов
/ 12 мая 2011

У меня есть файл Excel с нулями (0 = нет) и единицами (1 = да) в столбцах L - V. В зависимости от их ответов в этих столбцах, я хочу поместить некоторый текст в столбец Z. Например,:

0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 

Если все эти ячейки равны 0, поместите «Начинающий» в Z

1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

будет «Учащийся» - на всем протяжении:

1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1

будет "Эксперт".

Я пробовал разные варианты IF-THEN-ELSE и функции SELECT CASE, но я не могу заставить что-либо работать правильно.Я знаю, что мне придется циклически проходить по строкам (их около 500), но как мне сообщить Excel, что я хочу?

Забыл упомянуть, данные также могут выглядеть следующим образом

0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1

У меня есть около 50 различных сценариев, которые появляются.

Ответы [ 4 ]

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

Вы можете объединить ответы в строку и выбрать свой вывод на основе этого.

For r = 1 To 500
Answers = ""

For c = 12 To 22
    Answers = Answers & Cells(r, c)
Next c

Select Case Answers
    Case "00000000000"
        Cells(r, 26) = "Beginner"
    Case "10000000000"
        Cells(r, 26) = "Learner"
    Case "11110000000"
        Cells(r, 26) = "Sophomore"
    Case "11111111111"
        Cells(r, 26) = "Expert"
    Case Else
        Cells(r, 26) = "<something else>"
End Select

Next r

Edit: В зависимости от того, насколько сложны ваши правила, вам может быть лучше использовать if-then-elseif-else, потому что тогда вы можете использовать оператор Like, который позволяет вам использовать подстановочные знаки.

If Answers = "00000000000" Then
    output = "Beginner"
ElseIf Answers = "11111111111" Then
    output = "Expert"
ElseIf Answers Like "1111*" Then
    output = "Sophomore"
Else
    output = "other"
End If
0 голосов
/ 12 мая 2011

Если важна общая сумма 1 с, то вы можете просто сделать:

For Each rw in Sheets("Sheet1").UsedRange.Rows
  Select Case Application.Sum(rw.Columns("L:V"))
    Case 0
      rs.Cells(1,26) = "Beginner"
    Case 1
      rs.Cells(1,26) = "Learner"
    Case 11
      rs.Cells(1,26) = "Expert"
  End Select
Next rw

Если значение 1 с в определенных местах имеет значение, то этот код будет работать:

Sub FillZ()

Dim wRange As Range
Dim resultArray As Variant
Dim i As Integer

Set wRange = Sheets("Sheet1").Range("A1:Z" & Range("A65536").End(xlUp).Row)

resultArray = SpecialConcatenate(workingRange)

For i = 1 To wRange.Rows.Count
  Select Case resultArray(i)
    Case "00000000000"
      wRange(i, 26) = "Beginner"
    Case "10000000000"
      wRange(i, 26) = "Learner"
    Case "11111111111"
      wRange(i, 26) = "Expert"
  End Select
Next i

End Sub

Function SpecialConcatenate(wRange As Range) As Variant

Dim j As Integer, k As Integer
Dim resultArray() As Variant

ReDim resultArray(1 To wRange.Rows.Count)

For j = 1 To wRange.Rows.Count
  resultArray(j) = ""
  For k = 1 To 11
    resultArray(j) = resultArray(j) & wRange.Cells(j, k + 11).Value
  Next k
Next j
SpecialConcatenate = resultArray

End Function
0 голосов
/ 12 мая 2011

Используйте функцию CHOOSE на SUM, которая будет возвращать число от 1 до 11, которое будет выбрано из вашего списка имен. Заполните цифры ниже для ваших категорий:

=CHOOSE(SUM(L2:V2), "Beginner", "Learner", "3", "4", "5", "6", "7", "8", "9", "10", "Expert")

Затем скопируйте формулу по всем строкам.

0 голосов
/ 12 мая 2011

Используйте SUM для суммирования всех строк. Затем опубликуйте свой ответ в зависимости от диапазона, в который входит сумма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...