エクセルFAX注文書 Webの書誌データ収集と集約のVBA

faxhatyusyoeyecatch

こんにちは、じゅんぱ店長(@junpa33)です。

お待たせいたしました。

完成すれば、今までの大変面倒な手書き作業から解放されます。頑張って取り組んでいきましょう。

先の記事でも書きましたが、エクセルBOOKは2つ作ります。

はじめに、書誌FAX注文書の自動作成VBAについて説明を行っていきます。

”発注したい書誌情報収集”と”システム全体をコントロールする”BOOKについて説明していきます。

「FAX注文書作成」VBAソフトのダウンロード

faxhatyusyo013kai

ここからエクセルVBAの説明をしていきますが、とりあえず先に結果を見たいと思われている方もあるかと思います。そんな方に、完成の「FAX注文書作成」VBAソフトをダウンロードしていただけるようにしています。

ダウンロードしたエクセルファイルはVBAコードの保護をしていますので、改変することはできません。

一部にデフォルト設定のVBAコードのままになっています。”余分な語句”を取り除くことによって「電話帳」機能を使うことができます。

取説については「最初から使い方の説明を」をご覧ください。

このソフトはご自分で業務でお使いいただくのはフリーですが、

転載や転売については許可しておりませんので、ご使用にならないよう固くお断りいたします。

This software is free to use for your own business,

Reproduction or resale is not permitted, so please refrain from using it.

書誌のデータを収集と集約をするVBAをつくる

faxhatyusyo011kai

注文するについて、それに必要な書籍のデータをWebから収集して、注文用データの一覧表にまとめる作業をエクセルVBAで組み立てていきます。

エクセルBookの初期設定

まず最初に、エクセルVBAを記述できる環境を設定します。これが初めてだという人向けの項目です。

以前に領収書作成などで、エクセルVBAを立ち上げて作業していれば、初期設定は不要です。

この記事で初めてという方は、

VBA初めての起動。VBEの立ち上げ、保存と終了

または、領収書作成の「エクセルの初期設定 準備作業をします」の記事で事前準備をしてください。

エクセルブック名の変更とシート名変更の作業

ここはVBAで記述するよりも作業は1回きりなので、シートタブをダブルクリックで名前を手打ちした方が速いです。サクッと名前変更してください。

Sheet2のシート名変更

左下にあるタブで”Sheet2”となっている個所をダブルクリックして”名称の変更状態”にしてください。

DeleteボタンでSheet2の文字を消して「書誌データ貼付」とタイプしてください。

Sheet3のシート名変更

DeleteボタンでSheet3の文字を消して「抽出データ」とタイプしてください。

エクセルBook名を「FAX注文書作成」に変更

「ファイル」タブ→「名前を付けて保存」をクリックしてください。

保存場所は適宜分かり易い場所へ、

保存名は「FAX注文書作成.xlsm」としてください。

「書誌データ貼付」シート上で行う作業

抽出データ指定表をつくる

「書誌データ貼付」シートを開き、下の項目を指定のセルに打ち込んでください。

G1セルに「抽出項目」、
G2セルに「書名」
G3セルに「副書名」
G4セルに「出版社」
G5セルに「著者」

G6セルに「本体価格」
G7セルに「ISBN」

H1セルに「抽出セル名」

I1セルに「項目とデータの区切り文字」

データ抽出ボタンを設置する

「書籍データ貼付シート」に ”書誌データ登録マクロ” を実行するボタンを設置します。

ここでの参考記事

コマンドボタンをシートに設置する2つの方法

で設置方法を確認することが出来ます。

faxhatyusyo008kai
表中にデータをサンプル入力したものです。

こういう感じになると思います。

見せ方は、それぞれお好みで設定してください。

VBAコード作成作業

今から作成するVBAにどのような動きをさせたいかというと、

「書誌データ貼付」シートのA1セルから、書名・出版社名などのコピペでWebから抜いたデータを貼り付けておきます。

先ほど作った抽出データ指定表は、A列他のどの位置にそれぞれの必要なデータが、入っているかを指定する表です。

その上で、

その指定セル位置のデータを抽出して、その吸い上げたデータを「抽出データシート」に表示できるようにします。

VBE(ビジュアルベーシックエディター)を開き記述準備

VBEを開き”標準モジュール”を挿入してください。Module1に記述します。

挿入方法については以前の記事で確認いただけます。

記述するVBA全コード

プロシージャー名を「書誌データ登録」とします。

VBA
Option Explicit

Sub 書誌データ登録()
'変数の宣言
    Dim BN, Boname As String
    Dim BS, Bosname As String
    Dim SH, Shuname As String
    Dim WR, Wriname As String
    Dim CO, Cost As String
    Dim ISB, IsCode As String
    Dim i, nRow As Long
    Dim mysasu As Variant
    Dim mymsg1, mymsg2, mytitle1, mytitle2, mykyaku As Variant
'抽出データシートのデータ項目を記述
        Worksheets("抽出データ").Select
        Range("A1").Value = "ISBN"
        Range("B1").Value = "書名"
        Range("C1").Value = "出版社名"
        Range("D1").Value = "著者名"
        Range("E1").Value = "本体価格"
        Range("F1").Value = "冊数"
        Range("G1").Value = "客注名"
'A列を使ってデータ入力済の行数を数える
        nRow = Range("A1").CurrentRegion.Rows.Count + 1
'Webからコピペした書誌データの取り込み
    '書誌データ貼付シートでのデータ取り出し
        With Worksheets("書誌データ貼付")
            .Select
            BN = .Range("H2").Value
            BS = .Range("H3").Value
            SH = .Range("H4").Value
            WR = .Range("H5").Value
            CO = .Range("H6").Value
            ISB = .Range("H7").Value
            Boname = .Range(BN)
            If Boname = "" Then
                MsgBox "書名が見つかりません。" & vbCrLf & _
                "初めからやり直してください。", vbExclamation, "FAX注文書作成"
                Exit Sub
            End If
            Bosname = .Range(BS)
            Shuname = .Range(SH)
            Wriname = .Range(WR)
            Cost = .Range(CO)
            IsCode = .Range(ISB)
            For i = 2 To 7
                If .Cells(i, 9) = "" Then
                .Cells(i, 9) = " "
                End If
            Next i
            Boname = Right(Boname, _
                            Len(Boname) - InStr(Boname, .Range("I2")))
            Bosname = Right(Bosname, _
                            Len(Bosname) - InStr(Bosname, .Range("I3")))
            Shuname = Right(Shuname, _
                            Len(Shuname) - InStr(Shuname, .Range("I4")))
            Wriname = Right(Wriname, _
                            Len(Wriname) - InStr(Wriname, .Range("I5")))
            Cost = Right(Cost, Len(Cost) - InStr(Cost, .Range("I6")))
            IsCode = Right(IsCode, _
                            Len(IsCode) - InStr(IsCode, .Range("I7")))
        End With
    '抽出シートへデータを転記
        With Worksheets("抽出データ")
            .Select
        '書名
            .Range("B" & nRow) = Boname
        '副書名
            .Range("I" & nRow) = Bosname
        '書名連結
            .Range("B" & nRow) = .Range("B" & nRow) _
                                            & " " & .Range("I" & nRow)
            .Range("I" & nRow) = ""
        '出版社
            .Range("C" & nRow) = Shuname
        '著者
            .Range("D" & nRow) = Wriname
        '本体価格
            .Range("E" & nRow) = Cost
        'ISBN
            With .Range("A" & nRow)
                .Value = IsCode
                .NumberFormatLocal = "0_ "
            End With
        End With
'利用者からの情報取得
        With Worksheets("抽出データ")
            .Select
        '冊数
            mymsg1 = "冊数を記入ください。"
            mytitle1 = "冊数"
            mysasu = Application.InputBox(prompt:=mymsg1, _
                                                Title:=mytitle1, Type:=1)
            If mysasu = "" Or mysasu = False Then
                MsgBox "数量が入力されていませんが、" & vbCrLf & _
                "数量1冊として登録します。", vbExclamation, "FAX注文書作成"
                mysasu = 1
            End If
            .Range("F" & nRow).Value = mysasu
        '客注名
            mymsg2 = "客注名を記入ください。"
            mytitle2 = "客注名"
            mykyaku = Application.InputBox(prompt:=mymsg2, _
                                                Title:=mytitle2, Type:=2)
            If mykyaku = "" Or mykyaku = False Then
                MsgBox "客注名が入力されていませんが、" & vbCrLf & _
                "客注名無しとして登録します。", vbExclamation, "FAX注文書作成"
                mykyaku = ""
            End If
            .Range("G" & nRow).Value = mykyaku
        '列幅自動調節
            .Columns("A:E").AutoFit
        End With
        With Worksheets("書誌データ貼付")
            .Activate
            .Range("A:F").Clear
            .Range("A1").Select
        End With
End Sub

変数の宣言

取得するデータを代入する変数を宣言します。

抽出データシートのデータ項目を記述

抽出データシートの1行目にデータ項目を記述します。

A列を使ってデータ入力済の行数を数える

CurrentRegionプロパティを利用して抽出データシートの入力済行を数えます。

書誌データ貼付シートでのデータ取り出し

書誌データ貼付シートの抽出データ指定表のセル値に従ってWebから取得した書誌データを抽出します。

抽出した書誌データは、項目とデータ(例えば、書名:〇〇〇〇など)が一まとめの文字列になっている場合は、区切り文字(この場合は「:」)を指定することでデータを取り出すことが出来ます。

抽出シートへデータを転記

書誌データ貼付から取り出したデータを抽出データシートに転記します。

利用者からの情報取得

その都度変わる情報の冊数、客注名は入力ボックスで取得します。

冊数は「空欄」または「キャンセル」を指定された場合、「1」冊として処理します。

客注名は「空欄」または「キャンセル」を指定された場合、「客注名なし」として処理します。

書誌データの収集と集約のまとめ

faxhatyusyo012kai

注文する書誌に必要なデータを抽出データシートにまとめました。

実行するVBAコードを書いた「書誌データ登録プロシージャー」を実行するため、書誌データ貼付シートにコマンドボタンを作成しました。

このコマンドボタンに「書誌データ登録プロシージャー」を関連付けを行います。

faxhatyusyo009kai
矢印下001
faxhatyusyo010kai

これでボタンからのマクロ実行が可能になりました。

次には、抽出データシートにまとめた注文書誌のデータを、出版社別に振り分ける作業を行います。

Excelマクロ&VBA超入門 今すぐ使えるかんたんぜったいデキます!
エクセルVBAを初めて勉強するときに効く
vbastudy016a
vbastudy017a

電子書籍版「Excelマクロ&VBA超入門」をamazonで見てみる

(著者)井上香緒里
(出版社)技術評論社
(税込価格)1,738円(本体1,580円+税)

マクロとVBAについて学んでみたいけれど,いまひとつ自信がないという方のために,ひとつひとつの操作を丁寧に解説する1冊目の教科書です。
エクセルVBAの「い・ろ・は の い」から説明していますので、安心して取り組める参考書です。
例題として、
  • 「データ消去」「シートのコピー」「メッセージボックス」の機能を持つお小遣い帳
  • 「入力フォーム」の機能を持った歩数表
2つの題材ファイルを作成しながら,マクロとVBAの基本を学習していきます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min