2011-05-12 42 views
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種不同的場景,顯示了。

回答

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 
+0

這(第一支的代碼)正是我正在尋找,但無法弄清楚。如果我的代碼空間用完了,我將創建另一個子程序並從前一個子程序中調用它。謝謝! – 2011-05-12 20:15:57

0

使用SUM來總結所有行。然後根據總和適合的範圍發佈您的答案。

0

使用的SUMCHOOSE功能,這將返回1-11之間的數字,會從你的名字的列表中進行選擇。填寫下面的數字爲您的類別:

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

然後將公式向下複製到所有行。

+0

我不介意使用公式,但它不僅僅是行的總和。我可以在前4列或後4列中加1,它們都加到4,但前4列中的1代表這個人是'大二',最後4列中的1代表他們開始於'Silver '現在是'專家'。 – 2011-05-12 19:38:07

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 

如果在特定的地方1S的事情,那麼這段代碼將工作:

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

我嘗試了類似的東西,但它的重要性在哪裏,而不僅僅是它們中的多少。 – 2011-05-12 19:29:45

+0

@Mr_Thomas,好的,開發出一個能夠爲你做到這一點的程序,它實際上可以更好地轉換爲十六進制,但是這應該可以正常工作。 – 2011-05-12 20:24:55

相關問題