Fippiyのプログラム学習内容アウトプットBlog

日々の学習内容をアウトプットして振り返りを実施する。

VBAプログラム開発、スクレイピング・詳細データ取得拡張【1-3】ISBNコード複数件をWebの書籍情報へ登録する

書籍情報の1件登録及び複数件削除まで作成できました。

今回は複数の書籍をまとめて登録できるようにします。 

今回の目的

複数の書籍を一度のアクションでまとめて登録できるようにする 

なぜやるか

復習書籍登録フォームがWeb上で作成されているので、利用して簡単にまとめて登録できるようにするため

やりたいこと

  • 登録する書籍のISBNコードをワークシートから読み取る
  • 複数書籍登録用に加工する
  • Web操作で登録処理を実施する 

やったこと

  • 作成手法を考える
  • 登録するISBNコード入力欄を用意する
  • 入力されたISBNコードを認識させる
  • カンマ区切りテキストを生成する
  • フォームに反映してWeb上で書籍登録させる

実施内容

ISBNコード登録を複数件登録へ拡張する

書籍登録に関してはWeb側では複数の登録フォームを作成していました。

  • 個別にタイトル等を入力するページ
  • ISBNコード1件のみ指定するページ
  • ISBNコード20件までをまとめて登録するページ

今回はまとめて登録するページを利用する形で書籍登録できるようにしていきます。

 

どうやってVBAコードを作成するか

PHPプログラム作成時に複数のISBNコードをまとめて登録するフォームを作成していました。今回はこのフォームを利用できるようにVBAコードを作成していきます。

 

フォームは以下のような物でした。

f:id:Fippiy:20190625100925j:plain

一括登録画面

カンマ区切りによって20件までISBNコードをまとめて一度に登録出来るようにしていました。上限を設けているは、大量登録を防止するためのものです、大量件数用の処理は特別な物をもうけていない為、件数制限を設けていました。

 

ここにワークシート上で指定したISBNコードをまとめてフォーム入力して登録できるようにしていきます。

 

フォームに引き渡すISBNコードを生成する

書籍登録するISBNを複数指定できるようにワークシートに入力欄を作成しました。

f:id:Fippiy:20190625103504j:plain

登録書籍情報

複数登録フォームの上限が20件となっているので、20件分の入力欄を準備しました。入力されているISBNコードは前回削除した書籍の情報です。今回改めて追加します。

 

ワークシート上のデータをカンマ区切りテキストにする 

セル毎にISBNコードを入力した後は、この情報を順番に処理して、カンマ区切り形式のテキストにしていきます。

1件のISBNコード登録のVBAをベースに作成しました。

# ISBN複数登録用プロシージャ(主な作成点)

Dim InputISBN As Collection
Set InputISBN = New Collection

'ISBNコード取得

i = 1
Do Until ISSheet.Cells(i, 2).Value = ""
 InputISBN.Add ISSheet.Cells(i, 2).Value
 i = i + 1
Loop

'カンマ区切りテキスト生成
Dim EntryISBN As String
i = 1
Do
 EntryISBN = EntryISBN & InputISBN(i)
 If i <> InputISBN.Count Then EntryISBN = EntryISBN & ","
 i = i + 1
Loop Until i > InputISBN.Count Or i > 20

まずISBNコードをワークシートから読み取ります。

読み取ったコードはInputISBNコレクションを利用して格納します。

 

次にコレクション化したISBNコードをカンマ区切り形式としてEntryISBN変数に格納します。

 If i <> InputISBN.Count Then EntryISBN = EntryISBN & "," 

この記述によって、iとcountが同じ値…つまりは最後のデータでなければカンマを追加しています。これは一番最後にカンマをつけないための対処です。

 

ここでVBA上の変数が想定通りに取得できていることを確認します。

f:id:Fippiy:20190625104714j:plain

コレクション変数

InputISBNコレクションです。要素ごとにISBNコードが取得できています。

 

EntryISBNについても、ウィンドウでは表示が長くなってしまいますが、

"9784862554963,9784065020050,9784862553737,9784798057767,9784471142124,9784295000914"

と、連結したデータが取得できていることを確認しました。

 

フォームにカンマ区切りテキストを入力する

ここまでくれば、あとはフォームに値を反映させて、登録ボタンを押せば完了です。

この処理は前回までに実施しています、同じように作成していきます。

# 登録フォームHTML

<form action="/book/isbn_some" method="post">
 <div class="form-contents">
  <div class="form-input form-one-size">
   <div class="form-label">

    ISBNコード[20件まで](カンマ区切り、改行で連続投入可能)

   </div>
   <div>

    <textarea name="isbns" class="form-input__detail" type="numbers"></textarea>

   </div>
  </div>
 </div>
 <div class="form-foot">
  <input class="send isbn" type="submit" value="登録">
 </div>
</form>

テキスト入力欄と登録ボタンの要素を確認しておき、対応したアクションを指定します。

# ISBN複数登録用プロシージャ

'フォーム入力
htmlDoc.getElementsByClassName("form-input__detail")(0).Value = EntryISBN
htmlDoc.getElementsByClassName("send isbn")(0).Click

これでISBNコードのカンマ区切りデータと、入力フォーム操作の準備が完了しました。

 

登録できることを確認します。

f:id:Fippiy:20190625105745j:plain

書籍登録完了画面

Excelから取得したISBNコードを読み取り、書籍登録が実施できました。

 

これで、フォーム上限の20件までを一度に登録することができるようになりました。

 

しかし、登録できるものの結果表示はWeb側に表示されるのみです。

今後は結果についても何かしらExcel上で確認できるようにしていきたいところです。