FIRE実現のために、メルカリで副業を実践しているものの、手間がかかって思うように捗らないという方、多いのではないかと思います。
そこで、エクセルマクロ(VBA)でメルカリの物販作業を自動化・効率化するツールを作成しましたので、シェアします。
自動出品する機能や、amazonから市場価格を取得する機能など、色々な機能を実装しました。
参考になれば幸いです。
エクセルブックの紹介
エクセルにて、以下のような管理台帳シートを作って、当該シートを用いて、出品から取引完了までを管理します。

実際のマクロ入りブックは以下です。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。

メルカリ物販用 VBAマクロの紹介
マクロの初期設定
まず、初期設定が必要です。
まず、以下記事を参考に、Seleniumの設定をします。
出品から取引終了までの基本機能
メルカリ出品ID取得
マクロを実行する前に、まず、スマホ版のメルカリアプリを使って手動で出品します。
この際の出品は仮状態でよいです。成約されないような高額な売価でとりあえず出品します。
その後、本項のマクロを動かすと、上記した新規出品IDをすべて取得し、エクセルのシートにレコード行を追加します。


行追加の際には、該当出品IDの、タイトルや説明文も取得します。手動出品時に、メルカリによって自動提案されたテキスト情報があれば、当該テキストが取得できます。
なお、説明文の取得に際しては、私が使っている定型文を冒頭に付加します(「中古品なので、多少のキズはご承知おき下さい~」を、メルカリ自動提案の説明文の冒頭に付加した上で、エクセルに取得)。

Sub メルカリ出品ID取得(PROFILE_PATH As String, Text As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
Application.Wait Now + TimeSerial(0, 0, 3)
driver.Window.Maximize
n = 1
For n = 1 To 5
driver.Get "https://jp.mercari.com/mypage/listings"
driver.ExecuteScript "window.scrollTo(0, 0);"
driver.FindElementByXPath("//*[@id='currentListing']/mer-list/mer-list-item[" & n & "]").Click
Do Until Mid(driver.Url, 29, 1) = "m"
Application.Wait Now + TimeSerial(0, 0, 1)
Loop
If WorksheetFunction.CountIf(Workbooks("物販管理.xlsm").Sheets("リスト").Columns(2), Mid(driver.Url, 29, 30)) < 1 Then
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row + 1, 1) = 1
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = Mid(driver.Url, 29, 30)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 3) = "出品中"
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 4) = driver.FindElementByCss("#item-info > section:nth-child(1) > div > mer-heading").Text 'タイトル
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 6) = Text & driver.FindElementByXPath("//*[@id='item-info']/section[2]/mer-show-more/mer-text").Text 'コメント
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 8) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/main/article/div[2]/section[1]/section[1]/div/mer-price").Text, 2, 40) '価格
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 21) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/main/article/div[2]/section[1]/section[1]/div/mer-price").Text, 2, 40) '価格
Else
Exit For
End If
Next n
If n > 5 Then
driver.Get "https://jp.mercari.com/mypage/listings"
driver.ExecuteScript "window.scrollTo(0, 0);"
Err.Number = 0
On Error Resume Next
Do Until Err.Number <> 0
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='currentListing']/div/mer-button/button").Click
Loop
On Error GoTo 0
driver.ExecuteScript "window.scrollTo(0, 0);"
EndRow = Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row + 1
Dim LinkURL As Variant 'As HTMLAnchorElement
For Each LinkURL In driver.FindElementsByTag("a").Attribute("href")
If InStr(LinkURL, "/item/m") <> 0 And WorksheetFunction.CountIf(Workbooks("物販管理.xlsm").Sheets("リスト").Columns(2), Mid(LinkURL, 7, 30)) = 0 Then
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = Mid(LinkURL, 7, 30)
End If
Next LinkURL
Endrow2 = Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
For i = EndRow To Endrow2
10:
On Error GoTo ERR10
driver.Get "https://jp.mercari.com/item/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = 1
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "出品中"
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 4) = driver.FindElementByCss("#item-info > section:nth-child(1) > div > mer-heading").Text 'タイトル
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 6) = Text & driver.FindElementByXPath("//*[@id='item-info']/section[2]/mer-show-more/mer-text").Text 'コメント
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 8) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/main/article/div[2]/section[1]/section[1]/div/mer-price").Text, 2, 40) '価格
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 21) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/main/article/div[2]/section[1]/section[1]/div/mer-price").Text, 2, 40) '価格
On Error GoTo 0
Next i
End If
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row + 1, 1).Select
Exit Sub
ERR10:
Resume 10
End Sub
amazon価格情報更新
出品する商品がamazonで取り扱いのある商品であれば、手動でamazonの商品URLを取得し、該当の出品レコード行の該当列に当該URLを手入力します。
その後、本項のマクロを動かすことで、新品の価格と、マーケットプレイスの最安値を取得します。
check欄に1を入れていると、該当行のみ、取得します。
check欄に1 が一つも入っていないと、ステータスが出品中の行すべての最新データを取得します。
amazonはスクレイピングが禁止されているため、実行時にはログオフしておくほうがよいでしょう。
Sub メルカリ_amazon価格更新(PROFILE_PATH As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If (WorksheetFunction.CountIf(Workbooks("物販管理.xlsm").Sheets("リスト").Columns(1), "1") >= 1 And Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = "1") Or WorksheetFunction.CountIf(Workbooks("物販管理.xlsm").Sheets("リスト").Columns(1), "1") < 1 And (Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "出品中" Or Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "") And Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 10) <> "" Then
driver.Get Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 10)
On Error Resume Next
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 12) = ""
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 12) = Mid(driver.FindElementByCss("#corePrice_feature_div > div > span > span:nth-child(2)").Text, 2, 99)
'タイトル
driver.Get Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 11)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 13) = ""
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 14) = ""
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 13) = driver.FindElementByCss("#aod-price-1 > span > span:nth-child(2) > span.a-price-whole").Text 'タイトル
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 14) = driver.FindElementByCss("#unified-delivery-message-0").Text 'タイトル
On Error GoTo 0
Application.Wait Now + TimeSerial(0, 0, 2)
End If
Next i
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
メルカリ出品
エクセル上で、タイトル、説明文を編集し、さらに、上記で取得したamazonの価格を参考にして売価を編集します。
タイトルは、メルカリで自動設定された場合、文字数オーバーの部分はカットされていますが、エクセル上では、全文入力しておきます。宣伝tweetに使用します。
また、タイトルの冒頭17文字は、らくらくメルカリ便の伝票印字に流用しますので、冒頭17文字で取引品目が判別できるようなタイトルにしておきます。
編集後、本項のマクロを実行します。これにより、メルカリWEBサイト上のタイトル、説明文、価格が更新されます。
あわせて、マクロがTwitterで宣伝tweetをtweetします。
さらに、マクロがTwitter用のbotに 宣伝tweetを追加します。
check列に1を入れた行を対象に動きます。
Sub メルカリ出品(PROFILE_PATH As String, tweet_text As String, tweet_post As String, USER_ID_1 As String, USER_PAS1 As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://jp.mercari.com/sell/edit/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
'タイトル
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys ks.Control, "a"
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys ks.Delete
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys Mid(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 4), 1, 40)
'コメント
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-textarea > div > label > textarea.input-node").SendKeys ks.Control, "a"
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-textarea > div > label > textarea.input-node").SendKeys ks.Delete
driver.FindElementByCss("#main > form > section:nth-child(3) > mer-textarea > div > label > textarea.input-node").SendKeys Replace(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 6), vbTab, " ")
'売価
driver.FindElementByCss("#main > form > section:nth-child(5) > div:nth-child(2) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys ks.Control, "a"
driver.FindElementByCss("#main > form > section:nth-child(5) > div:nth-child(2) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys ks.Delete
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row, 8) = "" Then
driver.FindElementByCss("#main > form > section:nth-child(5) > div:nth-child(2) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 16) - 100
Else
driver.FindElementByCss("#main > form > section:nth-child(5) > div:nth-child(2) > mer-text-input > div > label > div.mer-text-input-container > input").SendKeys Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 8)
End If
Application.Wait Now + TimeSerial(0, 0, 3)
driver.FindElementByXPath("//*[@id='main']/form/div[2]/mer-button[1]/button").Click
driver.Get "https://twitter.com/compose/tweet"
driver.FindElementByXPath(tweet_text).SendKeys Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 18)
driver.FindElementByXPath("/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div/div[3]/div/div[1]/div/div/div/div/div[2]/div[3]/div/div/div[2]/div[4]/div/span/span").Click
driver.Get "https://metabirds.net/admin/login.php?lh=bot_top&language=ja&service_type=meta&lid=&emsg="
driver.FindElementByCss("#default_login_form > form > div:nth-child(1) > label > input").SendKeys USER_ID_1
driver.FindElementByCss("#default_login_form > form > div:nth-child(2) > label > input").SendKeys USER_PAS1
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#default_login_form > form > div:nth-child(3) > input.button").Click
Application.Wait Now + TimeSerial(0, 0, 3)
driver.Get "https://metabirds.net/admin/bot_random.php"
driver.FindElementByCss("#message_new").SendKeys Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 18)
Application.Wait Now + TimeSerial(0, 0, 6)
driver.FindElementByCss("#app > div > article > section:nth-child(6) > div.form_wrap > form > div:nth-child(6) > div > button").Click
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 21) = Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 8)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
コードの中の、「tweet_text, tweet_post」にセットする値は以下記事を参照ください。
メルカリ_購入お礼
商品が売れた際に、お礼のコメントを入力するマクロです。
check列に1を入れた行を対象に動きます。
購入日時を取得し、購入日時の7日後に出荷予定である旨コメントに付記する機能をつけています。
また、宣伝tweet用のbotを削除する機能をつけています。
Sub メルカリ_購入お礼(PROFILE_PATH As String, USER_ID_1 As String, USER_PAS1 As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
Application.Wait Now + TimeSerial(0, 0, 3)
driver.Window.Maximize
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" And Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "出品中" Then
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Application.Wait Now + TimeSerial(0, 0, 2)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 20) = CDate(Mid(driver.FindElementByXPath("//*[@id='main']/div/div[1]/div/div/div/mer-display-row[5]/span[2]").Text, 1, InStr(driver.FindElementByXPath("//*[@id='main']/div/div[1]/div/div/div/mer-display-row[5]/span[2]").Text, "日"))) + 7
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[3]/form/mer-textarea/div/label/textarea[1]").SendKeys "お世話になります。この度はご購入いただきありがとうございます。出品者のFIRE太郎と申します。短い間ですが、お取引終了までよろしくお願いいたします。" & Format(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 20), "yy/mm/dd(aaa)") & "の発送を予定しております。発送まで、今しばらくお待ちください"
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[3]/form/mer-button/button").Click
driver.Get "https://metabirds.net/admin/login.php?lh=bot_top&language=ja&service_type=meta&lid=&emsg="
driver.FindElementByCss("#default_login_form > form > div:nth-child(1) > label > input").SendKeys USER_ID_1
driver.FindElementByCss("#default_login_form > form > div:nth-child(2) > label > input").SendKeys USER_PAS1
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#default_login_form > form > div:nth-child(3) > input.button").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.Get "https://metabirds.net/admin/bot_random.php"
driver.FindElementByCss("#app > div > article > section:nth-child(7) > div.form_wrap > form:nth-child(1) > div:nth-child(1) > div > div > input[type=text]").SendKeys Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
driver.FindElementByCss("#app > div > article > section:nth-child(7) > div.form_wrap > form:nth-child(1) > div:nth-child(1) > div > button").Click
driver.FindElementByCss("#app > div > article > section:nth-child(7) > div.form_wrap > form:nth-child(3) > div > div.msg_list__item > div:nth-child(3) > div > div > label").Click
driver.FindElementByCss("#app > div > article > section:nth-child(7) > div.form_wrap > form:nth-child(3) > div > div.msg_list__item > div:nth-child(3) > div > button").Click
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "取引中"
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Application.Wait Now + TimeSerial(0, 0, 3)
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
メルカリ発送準備
発送準備用のマクロです。
check列に1を入れた行を対象に動きます。
発送方法が、ファミリーマート&ネコポスの場合と、 セブンイレブン&ネコポスにのみ対応しています。
QRコード取得までを実行します。
商品名は、エクセルシート上の「メルカリ件名」から取得します。(文字数オーバー分はカットします)
<商品名についての補足>
商品名には商品概要(CD,Blu-rayなど)の記載が必要です。記載していないと航空輸送可能な安全な貨物か否かの判断が出来なくなるため、航空便に乗りません。
航空便に乗らないと、北海道など、航空便の選択が適切な送付先に対し、陸路・船便で輸送されてしまい、到着にとても時間がかかってしまいます。
それから商品名には、商品固有名を記載したほうがよいです。
複数コンビニに持ち込んだ場合に、添付する出荷票に商品固有名が印字されるため、どの現物商品に、どの出荷票を添付すればよいか判別できるようになるためです。
よって、商品名はまじめに記載したほうがよいのですが、スマホで作業すると地味に面倒くさいため、自動的に設定する機能を作りました。
Sub メルカリ_発送準備_ファミマ_ネコポス(PROFILE_PATH As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
driver.Window.Maximize
Application.Wait Now + TimeSerial(0, 0, 3)
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Application.Wait Now + TimeSerial(0, 0, 3)
If driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-button[1]/button").Text = "コンビニ・宅配便ロッカーから発送" Then
driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-button[1]/button").Click
Else
Stop
End If
driver.FindElementByXPath("//*[@id='main']/div/div[2]/mer-button[2]/button").Click
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-select/div/label/div[2]/select").AsSelect.SelectByValue 1
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys ks.Control, "a"
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys ks.Control, Delete
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys Mid(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 4), 1, 17)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-button/button").Click
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Application.Wait Now + TimeSerial(0, 0, 3)
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
Sub メルカリ_発送準備_セブン_ネコポス(PROFILE_PATH As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
driver.Window.Maximize
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Application.Wait Now + TimeSerial(0, 0, 3)
If driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-button[1]/button").Text = "コンビニ・宅配便ロッカーから発送" Then
driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-button[1]/button").Click
Else
Stop
End If
driver.FindElementByXPath("//*[@id='main']/div/div[2]/mer-button[3]/button").Click
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-select/div/label/div[2]/select").AsSelect.SelectByValue 1
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys ks.Control, "a"
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys ks.Control, Delete
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-text-input/div/label/div[2]/input").SendKeys Mid(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 4), 1, 17)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-button/button").Click
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Application.Wait Now + TimeSerial(0, 0, 3)
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
メルカリ出荷通知
出荷通知と出荷した旨のコメントを入力するマクロです。
check列に1を入れた行を対象に動きます。
ネコポスに対応しています。
Sub メルカリ_出荷通知(PROFILE_PATH As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
driver.Window.Maximize
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" And Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "取引中" And Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 20) <> "" Then
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/form/mer-button/button").Click
driver.FindElementByCss("body > mer-dialog > div:nth-child(2) > mer-button:nth-child(2) > button").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[2]/form/mer-textarea/div/label/textarea[1]").SendKeys "お世話になります。先ほど発送手続を完了しました。お手数ですが商品が到着しましたら、受け取り評価をお願いします。"
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[2]/form/mer-button/button").Click
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "出荷済"
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Application.Wait Now + TimeSerial(0, 0, 3)
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
メルカリ_評価
商品が受取評価された際に、購入者の評価を実施するマクロです。
あわせて、取引結果をエクセル管理台帳に取得する機能を設けています。購入日時・販売価格・手数料・送料等を取得します。
check列に1を入れた行を対象に動きます。
評価の確定操作はブラウザ上で手動で実施するような仕様にしています。(評価はやり直しできないので、仕様変更などにより意図しない誤操作をしてしまわないように、その部分のみ、自動化しない仕様としています)
Sub メルカリ_評価(PROFILE_PATH As String)
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
Application.Wait Now + TimeSerial(0, 0, 2)
driver.Window.Maximize
For i = 3 To Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 2).End(xlUp).Row
If Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[1]/form/mer-textarea/div/label/textarea[1]").SendKeys "このたびは購入ありがとうございました。スムーズな取引をしていただいて感謝しています。また機会がありましたらよろしくお願いいたします。"
driver.FindElementByXPath("//*[@id='main']/div/div[2]/div[1]/form/mer-button/button").Click
Stop
driver.Get "https://jp.mercari.com/transaction/" & Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 2)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 22) = CDate(Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[6]/span[2]").Text, 1, InStr(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[6]/span[2]").Text, "日")))
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 23) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[1]/span[2]/mer-price").Text, 2, 100)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 24) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[2]/span[2]/mer-price").Text, 2, 100)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 25) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[3]/span[2]/mer-price").Text, 2, 100)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 26) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[4]/span[2]/mer-price").Text, 2, 100)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 27) = driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[1]/div/div/div/mer-display-row[5]/span[2]").Text
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 28) = Mid(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-list/mer-list-item/a/mer-user-object").Text, 1, InStr(driver.FindElementByXPath("/html/body/div/div[1]/div/div/div/div/main/div/div[2]/mer-list/mer-list-item/a/mer-user-object").Text, vbLf) - 1)
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 29) = Date
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 3) = "取引終了"
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Application.Wait Now + TimeSerial(0, 0, 3)
Set driver = Nothing
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="<>取引終了", Operator:=xlFilterValues
End Sub
その他機能
メルカリ過去の取引履歴取得
メルカリの、過去の取引履歴を一括でエクセルに取得します。
マクロの動画状況の動画は以下の通り。
この機能は以下リンク先のココナラで販売しています。

メルカリ販売価格更新
メルカリの販売価格をエクセル上で編集後、一括でメルカリに反映するマクロです。
check列に1を入れた行を対象に動きます。
check列に1が一つも入っていない場合は、売値が変更された全ての行を対象に動きます。

この機能は以下リンク先のココナラで販売しています。

フィルター(出品中)機能
ステータスが出品中と空白の行のみにフィルターをかける機能です。
よく使うので、エクセルシートに該当のマクロボタンを設置しています。
Sub フィルタ_出品中()
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
strCell = ActiveCell.Address
Range(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(3, 1), Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(2, 1) = "チェック"
Range(strCell).Select
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="出品中", Operator:=xlOr, Criteria2:=""
ActiveWindow.SmallScroll Down:=-5000
フィルター(取引中)機能
ステータスが取引中と出荷済の出品IDにフィルターをかける機能です。
よく使うので、エクセルシートに該当のマクロボタンを設置しています。
Sub フィルタ_取引中()
If Workbooks("物販管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("物販管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
strCell = ActiveCell.Address
Range(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(3, 1), Cells(Workbooks("物販管理.xlsm").Sheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents
Workbooks("物販管理.xlsm").Sheets("リスト").Cells(2, 1) = "チェック"
Range(strCell).Select
Workbooks("物販管理.xlsm").Sheets("リスト").Rows(2).AutoFilter Field:=3, Criteria1:="取引中", Operator:=xlOr, Criteria2:="出荷済"
ActiveWindow.SmallScroll Down:=-5000
End Sub
まとめ
いかがでしたでしょうか?
参考になれば幸いです。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。

また、メルカリについては、以下の記事を書いていますので、こちらも参考になれば幸いです。
コメント
商品件数が多いと、もっと見るボタンが何回も出てきて、物販管理を修正したのてすが、何故か2回目のもっと見るボタンをfindしても見つからず、悩んでおります。物販管理にもっと見るボタン対応があるといいのですが。何か定形のやり方はあるのでしょうか。
コメントありがとうございます。
Sub メルカリ出品ID取得(PROFILE_PATH As String)
にかかるお問い合わせでしょうか。
修正してみましたのでご確認ください。
早速の修正ありがとうございます。
今日は最後まで確認する時間が有りませんでしたので、明後日に確認致します。ソースを確認させていただきまして、もっと見るボタンが複数作られる場合、全てのもっと見るボタンをclickして全商品の配列を作ってから
出品IDを取得していると拝読いたしました。凄いですね、そのような発想が全然わいてきませんでした。
ありがとうございます。