申請用総合ソフトを改造する 1-3
・前回との変更点
ファイルの指定が面倒になったので、フォルダ内の全xmlファイルを一気に参照することにした(意外に実行時間は長くなかった。)
xml取得情報をリスト化したシートを改変し、行と列を入れ替えた。
申請人複数(権利者n人、義務者m人)に対応
複数不動産(n個)に対応
VBAコードがとても長く(そしてとても汚く)なった
今回でxmlファイルの読み込みは大体完成
・変更後のファイルのスクショ
・変更後のVBAコード
Sub xml取得()
Sheets("リスト2").Range("D5:AO154").ClearContents
Sheets("基本情報").Range("C5:E14").ClearContents
Sheets("基本情報").Select
Dim buf As String
buf = Dir(Sheets("基本情報").Cells(3, 4) & "\", vbDirectory)
j = -2
Do While buf <> ""
If j >= 0 Then Sheets("基本情報").Cells(4 + (j + 1), 3).Value = buf
j = j + 1
buf = Dir()
Loop
For k = 1 To j
Dim buf2 As String
buf2 = Dir(Cells(3, 4) & "\" & Cells(4 + k, 3) & "\署名・送信\HM*.xml")
Sheets("基本情報").Cells(4 + k, 4).Value = buf2
Sheets("基本情報").Cells(4 + k, 5).Value = Cells(3, 4) & "\" & Cells(4 + k, 3) & "\署名・送信\" & buf2
Next
Sheets("リスト2").Select
For l = 1 To j
Dim XMLDocument As MSXML2.DOMDocument
Set XMLDocument = New MSXML2.DOMDocument
XMLDocument.Load (Cells(5 + l, 3).Value)
i = 0
r = 0
Do While (Cells(4, 4 + i).Value <> "")
On Error Resume Next
If 4 + i = 15 Then
m = Split(XMLDocument.SelectNodes _
(Cells(4, 4 + i).Value).Item(0).Text, "日")
Cells(5 + l, 4 + i) = m(0) & "日"
ElseIf 4 + i = 16 Or 4 + i = 17 Or 4 + i = 18 Or 4 + i = 19 Then
Cells(5 + l, 4 + i) = XMLDocument.SelectNodes _
(Cells(4, 4 + i).Value).Length
ElseIf 4 + i = 20 Or 4 + i = 21 Or 4 + i = 22 Or 4 + i = 23 Or 4 + i = 24 Then
n = Split(Cells(4, 4 + i).Value, "n")
Err.Clear
For p = 0 To Cells(5 + l, 16) - Cells(5 + l, 17) - Cells(5 + l, 18) - Cells(5 + l, 19) - 1
Cells(5 + l, 4 + i) = Cells(5 + l, 4 + i) & "|" & XMLDocument.SelectNodes _
(n(0) & p & n(1)).Item(0).Text
If Err.Number <> 0 Then
Cells(5 + l, 4 + i) = Cells(5 + l, 4 + i) & "|"
Err.Clear
End If
Next
ElseIf 4 + i = 25 Or 4 + i = 26 Or 4 + i = 27 Or 4 + i = 28 Or 4 + i = 29 Then
For p = 0 To Cells(5 + l, 17) + Cells(5 + l, 18) + Cells(5 + l, 19) - 1
If Cells(5 + l, 17) > 0 Then Range("Y2").Value = "義務者"
If Cells(5 + l, 18) > 0 Then Range("Y2").Value = "設定者"
If Cells(5 + l, 19) > 0 Then Range("Y2").Value = "委託者"
Err.Clear
n = Split(Cells(4, 4 + i).Value, "n")
Cells(5 + l, 4 + i) = Cells(5 + l, 4 + i) & "|" & XMLDocument.SelectNodes _
(n(0) & p & n(1)).Item(0).Text
If Err.Number <> 0 Then
Cells(5 + l, 4 + i) = Cells(5 + l, 4 + i) & "|"
Err.Clear
End If
Range("Y2").Value = ""
Next
ElseIf 4 + i = 30 Then
Cells(5 + l, 4 + i) = XMLDocument.SelectNodes _
(Cells(4, 4 + i).Value).Length
ElseIf 4 + i = 31 Or 4 + i = 32 Or 4 + i = 33 Or 4 + i = 34 Then
For p = 0 To Cells(5 + l, 30) - 1
If 4 + i = 34 Then
If r = 1 Then
Range("AH4").Value = "//申請物件[n]/土地の表示/土地の表示履歴欄/地番"
r = 0
Else
Range("AH4").Value = "//申請物件[n]//家屋番号"
End If
End If
Err.Clear
n = Split(Cells(4, 4 + i).Value, "n")
s = XMLDocument.SelectNodes(n(0) & p & n(1)).Item(0).Text
Cells(5 + l, 4 + i) = Cells(5 + l, 4 + i) & "|" & s
If s = "土地" Then r = 1
Next
Else
Cells(5 + l, 4 + i) = XMLDocument.SelectNodes _
(Cells(4, 4 + i).Value).Item(0).Text
End If
i = i + 1
Loop
Next
Cells.WrapText = False
Sheets("基本情報").Select
End Sub
・作成に当たって悩んだ点と、その解決方針
①ファイル読み込み
申請書xmlファイルの所在を検索するため、dir()関数を上手いことして検索するようにした。すると、登記識別情報貼付用のxmlファイルを誤って開くエラーがあったので、ファイル名に「HM」を含むものを検索することとし解決。
②申請人の数
申請人情報を読み込みたいところ、困ったことに登記申請は何人で行われるか(すなわち、何枚の委任状が必要になるのか)が明確ではない。所有権保存であっても共有かもしれないし、相続なら相続人10名がいてもおかしくはない。そこで、xmlファイル中、「申請事項」タグ直下の「名義人情報」タグの「氏」タグ(つまりXpathで言うと//申請事項//名義人情報/氏)を数えることにした。これで権利者(申請人)と義務者の合計人数が取得できる。
③権利者と義務者の数
権利者と義務者の区別は当たり前にしなければならないが、困ったことがあった。それは、登記申請書においては権利者に該当する項目名が「所有者」「共有者」「抵当権者」「根抵当権者」「相続人」・・・と無数にあるため、一概に「//申請事項/所有者/名義人情報/氏」と言った指定ができない。とはいえ、「//申請事項//名義人情報/氏」と指定すれば権利者義務者の区別がつかない。そこで、義務者が使用する項目名がせいぜい「義務者」「設定者」「委託者」ぐらいだろうと想定し、「義務者」「設定者」「委託者」の項目数を数え上げ、引き算することによって権利者義務者の区別をつけた。
④申請人数及び不動産数が何個あるかの記載
先述のとおり、申請人数や不動産数は申請によりまちまちである。ここで、予め「不動産の数なんてせいぜい50個くらいだろうから、箱を100個作っておけば十分だろう」と言った対処も間違いではないと思うが、私自身、不動産の数が100を超える登記申請を見たこともあることから、不動産の数や申請人の数に限界を設けず、都度数え上げることによって無限個まで対応することにした。
こうすると、「表の列を予め50列用意しておこう」と言った発送ができなくなるため、申請人や不動産は一つのセル中に「|住所1|住所2」「|土地|建物」と言った振り合いで記載することにした。
・使用したファイル
・今後の課題
VBA構文が異常に汚いので、見直す必要はある。けど当面放置。
いよいよ委任状や原因証明情報等の自動作成機能に着手したい。