2

L列からV列にゼロ(0 =いいえ)と1(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関数とSELECTCASE関数のさまざまなバリエーションを試しましたが、何も正しく機能しないようです。行(約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

SUMを使用して、すべての行を合計します。次に、合計が収まる範囲に基づいて回答を投稿します。

于 2011-05-12T19:08:56.147 に答える
0

CHOOSEの関数を使用します。この関数はSUM、名前のリストから選択する1〜11の数値を返します。カテゴリについて、以下の番号を入力してください。

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

次に、数式をすべての行にコピーします。

于 2011-05-12T19:13:56.807 に答える
0

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
于 2011-05-12T19:22:05.870 に答える