ここから本文です

マクロの内容の解読をしています。 内容は以下の通りです。

hon********さん

2019/8/2517:21:47

マクロの内容の解読をしています。
内容は以下の通りです。

--------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Set tar = Range("A8:Q99").Find(What:="法人番号")
x = tar.Column
y = tar.Row
xx = Target.Column
yy = Target.Row
If Not Intersect(Range(Cells(y + 1, x), Cells(y + 9999, x)), Target) Is Nothing Then
Target.Font.Color = RGB(0, 0, 0)
If CorpNum(Target) Then Target.Font.Color = RGB(255, 0, 0)
End If
End Sub
Function CorpNum(t)
On Error GoTo err
If Len(t) <> 13 Then
CorpNum = 1
Exit Function
End If
w = 0
For i = 1 To 6
If IsNumeric(Mid(t, 2 * i, 1)) = False Then Exit Function
If IsNumeric(Mid(t, 2 * i + 1, 1)) = False Then Exit Function
w = w + Val(Mid(t, 2 * i, 1)) * 2 + Val(Mid(t, 2 * i + 1, 1))
Next i
If Val(Mid(t, 1, 1)) <> (9 - (w Mod 9)) Then CorpNum = 1
err: '
End Function
----------------------------------------------------------------------

以下の部分のコードがなにをしようとしているのかがわかりません。
入力した内容が数字かどうかを判定しようとしているのでしょうか?
特にw mod 9の部分がどういった内容なのかが不明です。

For i = 1 To 6
If IsNumeric(Mid(t, 2 * i, 1)) = False Then Exit Function
If IsNumeric(Mid(t, 2 * i + 1, 1)) = False Then Exit Function
w = w + Val(Mid(t, 2 * i, 1)) * 2 + Val(Mid(t, 2 * i + 1, 1))
Next i
If Val(Mid(t, 1, 1)) <> (9 - (w Mod 9)) Then CorpNum = 1

また、以下のコードはIFの条件が設定されていないように思われるのですが、
どういった場合にThen以下が実行されるのでしょうか。

If CorpNum(Target) Then Target.Font.Color = RGB(255, 0, 0)

素人で申し訳ありませんが、コードの解読のヒントでも構いませんので
教えていただけると幸いです。

閲覧数:
27
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

iru********さん

2019/8/2520:58:09

For i = 1 To 6
If IsNumeric(Mid(t, 2 * i, 1)) = False Then Exit Function
If IsNumeric(Mid(t, 2 * i + 1, 1)) = False Then Exit Function
w = w + Val(Mid(t, 2 * i, 1)) * 2 + Val(Mid(t, 2 * i + 1, 1))
Next i
If Val(Mid(t, 1, 1)) <> (9 - (w Mod 9)) Then CorpNum = 1

法人番号のチェックデジットの計算をしています。
https://www.houjin-bangou.nta.go.jp/documents/checkdigit.pdf

チェックデジットに誤りがある場合に、CorpNum関数は1を返します。
ただし、この関数は不完全で、法人番号に数字以外があると誤った値を返します。


If CorpNum(Target) Then

これは

If CorpNum(Target) <> 0 Then

と同じ意味です。

つまり、チェックデジットに誤りがあった場合に、法人番号のフォントカラーを
赤くしています。

質問した人からのコメント

2019/8/27 20:30:27

解決できました。本当にありがとうございます。
おそらく
If IsNumeric(Mid(t, 2 * i, 1)) = False Then Exit Function
If IsNumeric(Mid(t, 2 * i + 1, 1)) = False Then Exit Function
の部分はExit Functionの前にCorpNum=1を記載しておく必要があるのだと思います。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる