2017-02-13 5 views
2

Also im Grunde muss ich Liste der Anzahl der Lektionen von Studenten in einer Zelle erstellt exg. (1,10,15,16) erstellen. Die maximale Anzahl der Lektionen beträgt 50. Die Lektion wird an ihrer Nummer erkannt.Excel wenn Zelle enthalten dann schreibe es in einem anderen

Ich möchte eine Formel erstellen, die alle Lektionen zeigt, die in einer anderen Zelle nicht gemacht wurden. Ich meine: In einer Zelle schreibe ich Lektionen, die der Schüler zum Beispiel 1,5,7 gemacht hat, und in einer anderen Zelle wäre das Ergebnis automatisch alle Zahlen bis zu 50 außer demjenigen, der gemacht wurde, damit die Zelle 2,3 wäre. 6,8 ....

ich habe versucht, mit

=ISNUMBER(SEARCH(substring,text)) 

aber dieses nicht mir ein gutes Ergebnis.

+0

so eine Zelle für ex wäre. 1,2,3,4,5,6 und andere wäre automatisch 7,8,9,10,12 ... bis zu 50. –

+1

Excel 2016, die neueste –

Antwort

3

Dazu müssen wir die Zeichenfolge auf die , teilen und dann diese Werte durch nichts ersetzen.

Diese UDF tut, was Sie wollen:

Function LessonsLeft(rng As Range) As String 
If rng.Count > 1 Then Exit Function 
Dim spltStr() As String 
Dim i As Long 
spltStr = Split(rng.Value, ",") 
LessonsLeft = ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50," 
For i = LBound(spltStr) To UBound(spltStr) 
    LessonsLeft = Replace(LessonsLeft, "," & spltStr(i) & ",", ",") 
Next i 
LessonsLeft = Mid(LessonsLeft, 2, Len(LessonsLeft) - 2) 
End Function 

Legen Sie es in einem Modul an der Arbeitsmappe gebunden dann würden Sie es mit einer Formel nennen:

=LessonsLeft(A1) 

enter image description here

+0

Vielen Dank für Ihre Antwort –

3

Dies ist eine andere Option:

Function MissedLessons(str As String) As String 
    Dim resultString As String 
    Dim i As Integer 

    str = "," & str & "," 
    For i = 1 To 50 
     If InStr(str, "," & i & ",") = 0 Then 
      resultString = resultString & i & "," 
     End If 
    Next i 

    MissedLessons = Left(resultString, Len(resultString) - 1) 
End Function 
+0

Nizza Eins, aber meins wird weniger Schleifen machen 8P –

+0

Haha, das habe ich auch schon bemerkt, bevor ich gepostet habe, aber ich dachte, ich könnte es genauso gut auflegen. Gute Antwort :) – CallumDA

2

ein wenig Verbesserung von Scotts Lösung:

  • der Benutzer optional die Gesamtzahl der Unterrichtsstunden (Standard = 50)

  • vermeiden ihr Code

alle Lektionen Zahlen Zeichenfolge hatte angeben lassen

wie folgt:

Function LessonsLeft(rng As Range, Optional nLessons As Long = 50) As String 
    If rng.count > 1 Then Exit Function 
    Dim spltStr() As String 
    Dim i As Long 

    With CreateObject("Scripting.Dictionary") 
     For i = 1 To nLessons 
      .Add i, i 
     Next 
     spltStr = Split(rng.Value, ",") 
     For i = LBound(spltStr) To UBound(spltStr) 
      .Remove CLng(spltStr(i)) 
     Next 
     LessonsLeft = Join(.keys, ",") 
    End With 
End Function 
Verwandte Themen