従前の特許出願案件のうちマルチマルチクレームを含む案件の割合

# 1　ある日の知財部にて
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/6d8a1a83-1ca9-91b3-ee6c-b1255673bf21.png" width="73" height="100" alt="man_think"> | やれやれ、今年（令和４年）４月１日からマルチマルチクレームの出願が認められなくなったんだよなあ。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>あら、そんなに気に病むことですか。甲田さん。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/6d8a1a83-1ca9-91b3-ee6c-b1255673bf21.png" width="73" height="100" alt="man_think"> | <b>乙川さん、いままで普通に書いてきた形式で、日本国特許庁に出願すると拒絶理由通知を受けるんだよ。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/844b945b-2cd7-fda8-1dcd-ef44971763ff.png" width="73" height="100" alt="woman_question">| <b>マルチマルチクレームとは、マルチクレームを含む複数のクレーム（請求項）をマルチで引用したクレームのことですよね。 気にしなきゃいけないほど沢山の案件に含まれているんでしょうか。</b>|
| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cce75013-4595-0272-ae3d-910f8931c218.png" width="73" height="100" alt="man_idea">| <b>そうか！　マルチマルチクレームが今までどのくらいの案件に含まれているか把握してなかったよ。早速調査してみよう。</b>|


# 2  マルチマルチクレームとは

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| マルチマルチクレームのいちばん簡単な類型ってこれですよね。<br>請求項３がマルチクレームで、それを引用する請求項４がマルチマルチクレーム。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/844b945b-2cd7-fda8-1dcd-ef44971763ff.png" width="73" height="100" alt="woman_question">|<b>でも甲田さん、請求項の引用関係をしっかりと見ないとマルチマルチクレームかどうかって分かりませんよね。</b>|

### 類型１：
```:マルチマルチクレーム類型１
【書類名】特許請求の範囲
【請求項１】特定構造のボールベアリング。
【請求項２】内輪がステンレス鋼である請求項１記載のボールベアリング。
【請求項３】外輪がステンレス鋼である請求項１又は２記載のボールベアリング。
【請求項４】外輪の外側に環状緩衝体を設けた請求項１から請求項３のいずれか1項に記載のボールベアリング。
【請求項５】前記環状緩衝体はゴムである請求項４記載のボールベアリング。
```

https://www.jpo.go.jp/system/patent/shinsa/letter/multimultichecker.html

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| 特許庁から簡易型マルチマルチクレームチェッカのmultimulticheckerが公開されているよ。<br>だから、各案件の請求の範囲をmultimulticheckerにかけていけば、各案件にマルチマルチクレームが含まれているかどうかが判るよ。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>multimulticheckerって、htmlにjavascriptで記述されたアプリケーションなんですね。<br>Azureにデプロイしてみました。<br>https://jpoapi.azurewebsites.net/multimultichecker_ver_1_1/multimultichecker_ver_1_1.html</b><br>![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/393e4cfb-bf3f-3c01-8666-3503992cd103.png) |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| <b>案件については、商用特許データベースからCSVファイルでダウンロードできるよ。<br>例えば、今年３月４日の公開案件を母集団にしようか。</b>|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/6d8a1a83-1ca9-91b3-ee6c-b1255673bf21.png" width="73" height="100" alt="man_think"> |<b>でも、何千件も請求の範囲をブラウザにコピペするのは大変だよなあ。</b>|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/eb37fff5-0b12-e75e-856a-cd8726846462.png" width="73" height="100" alt="woman_laugh">|<b>じゃあ、各案件の請求の範囲をブラウザにコピペする動作を、Excel VBAで書いてしまいましょう。</b>|

# 3 各案件の請求の範囲をチェックツールに掛けるExcel VBA

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| 乙川さん、３月４日の公開案件のCSVファイルをダウンロードしたよ。２５６８件だから統計的に有意だと思うよ。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>CSVファイルのAL列が請求の範囲ですね。これをブラウザにコピペして実行ボタンを押したあと、結果を取り込めばいいんですね。そういうExcel VBAを作ります。</b> |

# 4 VBAスクリプトの説明

# 4.1 請求項解析サブルーチンの説明

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| 乙川さん、この請求項解析ってサブルーチンについて教えて。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>請求項解析サブルーチンは、AL列に格納された請求項を読み取って、請求項ごとに改行を入れます。そして、mmcheckサブルーチンの第１引数に請求項を渡し、処理結果を第２引数で受け取ります。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>mmcheckサブルーチンの処理結果を改行で区切り、AM列にマルチマルチクレームの有無を示す結果を書き込み、AN列にマルチマルチクレームを参照している請求項を書き込みます。</b> |

```vb:請求項解析
Option Explicit

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long


Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPtr

Private Declare PtrSafe Function GetLastActivePopup Lib "user32" (ByVal hWnd As Long) As Long

Const WM_COMMAND As Long = &H111&
Const WM_DESTROY As Long = &H2&
Const WM_CLOSE As Long = &H10&

Sub 請求項解析()
    Dim i As Integer
    Dim j As Integer
    Dim claims As String
    Dim orText As String
    Dim orLines As Variant
    Dim claim  As Variant
    For i = 2 To 2569
        claims = Cells(i, "AL").Value
        claims = Replace(claims, "【請求項", vbCrLf & "【請求項")
        
        Call mmcheck(claims, orText)
        If Len(orText) > 0 Then
            orLines = Split(orText, vbCrLf)
            Cells(i, "AM").Value = ""
            If UBound(orLines) >= 0 Then
                If Left(orLines(0), 6) = "マルチマルチ" Then
                    Cells(i, "AM").Value = orLines(0)
                End If
            End If
            Cells(i, "AN").Value = ""
            If UBound(orLines) >= 1 Then
                If Left(orLines(1), 2) = "上記" Then
                    Cells(i, "AN").Value = RTrim(orLines(1))
                End If
            End If
        End If        
    Next i
End Sub
```

# 4.2 mmcheckサブルーチンの説明

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| 乙川さん、mmcheckサブルーチンは、マルチマルチクレームチェッカを呼び出すものだよね。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>mmcheckサブルーチンは、マルチマルチクレームチェッカをデプロイしたURLを呼び出して、ic入力フィールドに請求項を入力して「実行」ボタンをクリックして、orフィールドから結果を取得します。<br>コードの参考としたURLは https://fastclassinfo.com/entry/vba_ie_control/ です。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/eb37fff5-0b12-e75e-856a-cd8726846462.png" width="73" height="100" alt="woman_laugh">| <b>ic入力フィールドに請求項を入力することが、請求項フィールドにコピペする動作の代わりです。orフィールドから結果を取得する動作が、結果フィールドから結果をコピペする動作の代わりです。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>なお、Alertダイアログが表示された場合には、WM_CLOSEを投げてそのダイアログを閉じます。</b> |

```vb:mmcheck
Sub mmcheck(ByVal claims As String, ByRef orText As String)
    '---コード1｜インターネットに接続してブラウザを開く---
    Dim objIE As New InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Visible = True
 
    orText = ""
 
    '---コード2｜インターネットの特定のページを開く---
    objIE.Navigate "https://jpoapi.azurewebsites.net/multimultichecker_ver_1_1/multimultichecker_ver_1_1.html"
    Call IEWait(objIE)   'IEを待機
    Call WaitFor(3) '3秒停止
 
    '---コード3｜IEに自動で文字入力して情報検索する---
    'キーワードを取得
    Dim s As String
    s = claims
        
    Dim objtag, objsubmit As Object
    
    Set objtag = objIE.Document.getElementById("ic")
    objtag.Value = s
 
    Dim Button As Object
    For Each Button In objIE.Document.getElementsByTagName("button")  
        If Button.textContent = "実行" Then  '値が「実行」なら
             '対象のボタンを取得後、VBAではなく、javascriptでクリックする。そうすることで、制御はVBAに残ったままになり、以下のコードが実行される。
            objIE.Document.Script.setTimeout "javascript:document.getElementsByTagName('button')(0).click()", 200
            'ボタンをクリックして
            Exit For '繰り返し処理を抜ける
        End If
    Next
    
    Call WaitFor(1) '1秒停止
    Dim hWnd As Variant
    hWnd = FindWindow("#32770", "Web ページからのメッセージ")
    If hWnd <> 0 Then
        Debug.Print hWnd, objIE.hWnd
        DoEvents
        PostMessage hWnd, WM_CLOSE, vbOK, 0
    End If
    
    '---コード5｜IEを閉じる---
    Dim objOr As Object
    Set objOr = objIE.Document.getElementById("or")
    orText = objOr.innerText
    
    objIE.Quit
    Set objIE = Nothing
End Sub
```

# 4.3 IEWaitサブルーチンの説明

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| IEWaitサブルーチンって、Internet Explorerを制御するものかな。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>Internet Explorerの起動完了まで待機する関数です。mmcheckサブルーチンから呼び出されます。</b> |


```vb:IEWait
Function IEWait(ByRef objIE As Object)
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
End Function
```

# 4.4 WaitForサブルーチンの説明

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| WaitForサブルーチンって何なのかな。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>指定秒数だけ待機する関数です。mmcheckサブルーチンから呼び出されます。</b> |

```vb:WaitFor
Function WaitFor(ByVal second As Integer)
    Dim futureTime As Date
    futureTime = DateAdd("s", second, Now)
    While Now < futureTime
        DoEvents
    Wend
End Function
```
# 5 調査結果

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b8508fd4-367d-e0f5-26fd-c99ab4e7609b.png" width="73" height="100" alt="man_smile">| 乙川さん、結果ってどうだった。|
|:-----------|:------------|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/cb34f414-ca30-b2f0-32ca-1aea60de1163.png" width="73" height="100" alt="woman_smile">| <b>はい、甲田さん、マルチマルチクレームありが1457件、マルチマルチクレーム無しが1096件、クレーム参照が不正な案件が15件でした。</b> |
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/90fe3456-c75b-d72c-1a74-64e28036d475.png" width="73" height="100" alt="man_surprise">|<b>マルチマルチクレームありの案件が56.7%・・・意外と多いね。これは３月４日公開分であり、マルチマルチクレームが禁止される前の出願だから、マルチマルチクレームありでも拒絶されるわけじゃないんだけど。</b>|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/3f612d97-b9a5-d79e-03e5-c6a61d1dfe6b.png" width="73" height="100" alt="woman_think">| <b>従来はこんなにマルチマルチクレームありの案件が多いのに、４月１日以降はいきなり拒絶理由の対象になってしまうのですね。<br>これからの特許出願では、マルチマルチクレームチェッカを積極的に活用した方がいいかもしれませんね。</b> |