简体   繁体   English

如果单元格包含Excel,则将其写入另一个

[英]Excel if cell contain then write it in another

So basically I need to create list of number of lessons done by students in one cell ex.g (1,10,15,16). 所以基本上我需要创建学生在一个单元格中完成的课程列表(1,10,15,16)。 The maximum number of lessons is 50. Lesson is recognized by its number 课程的最大数量为50.课程由其编号确认

What I want to do is to create a formula that shows all the lessons that arent done in another cell. 我想要做的是创建一个公式,显示在另一个单元格中完成的所有课程。 I mean : In one cell i write lessons that student has accomplished for exemple 1,5,7, and in another cell the result would be automatically all numbers up to 50 except the one which are done so the cell would be 2,3,6,8.... 我的意思是:在一个单元格中,我写了一个学生已完成的课程,例如1,5,7,而在另一个单元格中,结果将自动为所有数字,最多50个除了完成的那个,因此单元格将是2,3, 6,8 ....

I tried with 我试过了

=ISNUMBER(SEARCH(substring,text))

but this doesnt give me good result. 但这并没有给我带来好结果。

To do this we ned to split the string on the , and then replace thos values with nothing. 要做到这一点,我们需要将字符串拆分为,然后用什么都替换thos值。

This UDF does what you want: 这个UDF做你想要的:

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

Put it in a module attached to the workbook then you would call it with a formula: 将它放在工作簿附带的模块中,然后用公式调用它:

=LessonsLeft(A1)

在此输入图像描述

This is another 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

a little enhancement of Scott's solution: 斯科特解决方案的一点改进:

  • let the user optionally specify the total number of lessons (default = 50) 让用户可选择指定课程总数(默认= 50)

  • avoid her to had code all lessons numbers string 避免她有代码所有课程数字字符串

as follows: 如下:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM