VBA:检查一列中的奇数/偶数,然后检查另一列中的值是否正确
我需要你的帮助: 我在D(9)列有出生号码(11或10位)。我有一列N(9)和sex(M和F)。我想根据出生号码检查N列中的文本是否正确。如果出生号码的最后第三个数字包含偶数,则为女性。如果第三个数字是奇数,则为男性。 如果N列中的M或F错误,我想使用条件格式(将单元格标记为红色)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
有人对此有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好的。我想知道你是否觉得我的答案有用。如果在这方面有任何挑战,我很乐意帮忙。