Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA:检查一列中的奇数/偶数,然后检查另一列中的值是否正确_Vba_Excel - Fatal编程技术网

VBA:检查一列中的奇数/偶数,然后检查另一列中的值是否正确

VBA:检查一列中的奇数/偶数,然后检查另一列中的值是否正确,vba,excel,Vba,Excel,我需要你的帮助: 我在D(9)列有出生号码(11或10位)。我有一列N(9)和sex(M和F)。我想根据出生号码检查N列中的文本是否正确。如果出生号码的最后第三个数字包含偶数,则为女性。如果第三个数字是奇数,则为男性。 如果N列中的M或F错误,我想使用条件格式(将单元格标记为红色) 有人对此有vba代码吗?提前谢谢。你能不能用一个excel公式作为例子,并引用ID=IF(ISODD(MID(D3,9,1)),“M”,“F”) 如果单元格D3中的第9个值为奇数,则为阳性,否则为阴性检查: Opti

我需要你的帮助:

我在D(9)列有出生号码(11或10位)。我有一列N(9)和sex(M和F)。我想根据出生号码检查N列中的文本是否正确。如果出生号码的最后第三个数字包含偶数,则为女性。如果第三个数字是奇数,则为男性。 如果N列中的M或F错误,我想使用条件格式(将单元格标记为红色)


有人对此有vba代码吗?提前谢谢。

你能不能用一个excel公式作为例子,并引用ID=IF(ISODD(MID(D3,9,1)),“M”,“F”)

如果单元格D3中的第9个值为奇数,则为阳性,否则为阴性检查:

Option Explicit

Public Sub FormatConditionally()
    Dim i As Integer
    Dim birthNumbers As String
    Dim gender As String
    Dim genderCell As Range

    For i = 1 To Range("Table1").Rows.Count
        birthNumbers = Range("Table1[Birth number]")(i).Value
        Set genderCell = Range("Table1[F/M]")(i)
        gender = genderCell.Value

        If GenderIsValid(birthNumbers, gender) Then
            Call FormatAsValid(genderCell)
        Else
            Call FormatAsNotValid(genderCell)
        End If

    Next i

End Sub

Private Function GenderIsValid(birthNumbers As String, gender As String) As Boolean

    Dim lengthOfBirthNo As Integer
    Dim posOfGenderIdentifier As Integer
    Dim genderIdenfier As Integer
    Dim validGender As String

    lengthOfBirthNo = Len(birthNumbers)
    posOfGenderIdentifier = lengthOfBirthNo - 3

    genderIdenfier = Mid(birthNumbers, posOfGenderIdentifier, 1)

    If WorksheetFunction.IsEven(genderIdenfier) Then
        validGender = "F"
    Else
        validGender = "M"
    End If

    If (validGender = gender) Then
        GenderIsValid = True
    Else
        GenderIsValid = False
    End If

End Function

Private Sub FormatAsValid(rng As Range)
    rng.Interior.Color = RGB(255, 0, 0)
    'sets fill color to RED
End Sub
Private Sub FormatAsNotValid(rng As Range)
    rng.Interior.Color = RGB(255, 255, 255)
    'sets fill color to WHITE
End Sub
不要介意代码的大小。公共子例程(格式有条件地)是需要运行的,并且列名应保持原样,并保留在所附标题中(或根据需要进行更改)

它也适用于最后第三位数字


我希望你会觉得它有用。谢谢。

是的,我找到了这个公式:“=MOD(INT(MOD(RC[-1],1000)/100),2)”。0=F og 1=M,但我很难将它与条件格式等结合起来。@TinMan。我如何将您的公式或(和(LEN(B9)=11,N9=“M”)和(LEN(B9)=9,N9=“F”)更改为基于第3个最后数字?很抱歉,我以前没有看到这个问题。我误读了这个问题。你也许应该用詹姆斯·库克的答案来解决这个问题。当我的出生号码有11位数时,你的公式运行得很好。但在某些情况下,我可以看到当出生号码从0开始时只有10位数字(0被跳过)。那么我如何修改你的公式来考虑这个问题呢?我想我必须看最后的第三个数字(当总共有11个数字时是第9个数字)。詹姆斯·库克的回答也会给我同样的问题。
LEN(TEXT(B9,“00000000000”)
将返回一个带前导零的11位字符串。@user99971您知道。。。从技术上讲,stackoverflow的政策是把你的问题放在最简单的问题上。它应该与您迄今为止亲自完成的工作(大多数情况下——代码示例)一起提供。但是你在你的评论中提供了大部分内容,如果你编辑你的问题并添加它们,那会很有帮助。好的,我理解。这是我第一次使用这个网页。我有很多东西要学=)@user9997971好的。我想知道你是否觉得我的答案有用。如果在这方面有任何挑战,我很乐意帮忙。