2

我在 L 到 V 列中有一个零(0 = 否)和一个(1 = 是)的 Excel 文件。根据他们在这些列中的答案,我想在 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

4 回答 4

1

您可以将答案连接成一个字符串,并根据该字符串选择您的输出。

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

编辑:根据您的规则的复杂程度,您最好使用 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
于 2011-05-12T19:10:37.367 回答
0

如果 1s 的总和很重要,那么你可以这样做:

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
于 2011-05-12T19:22:05.870 回答
0

Use the CHOOSE function on the SUM, which will return a number between 1-11 that will pick from your list of names. Fill in the numbers below for your categories:

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

Then copy the formula down through all of the rows.

于 2011-05-12T19:13:56.807 回答
0

使用 SUM 对所有行求和。然后根据总和适合的范围发布您的答案。

于 2011-05-12T19:08:56.147 回答