見出し画像

超簡易的同人用頒布物在庫管理システムをつくってみた

こんにちは、非ラバです。今回は趣向を変えて、ちょっとGoogleさんのアプリと遊んでみました。

つくったのは在庫管理システムです。完全無料でできて、本格的でない超簡易的ものですが。規模が大きくない同人用的にはこれでちょうどいいのかな~とか思ったり。

GoogleFormsとGoogleスプレッドシートを使った在庫管理システムです。

なんだこの適当な図解は・・・

上図のように、GoogleFormsで頒布物の新規登録や売上個数の登録を行い、その結果をスプレッドシートに集約・管理を行うという感じです。

長ったらしい前置きはこの辺にして、早速つくってみましょう!Googleアカウント登録は済みましたか?!

1.GoogleFormsで頒布物新規登録フォームをつくる

では、早速GoogleFormsにアクセスし、空白のフォームを新規作成しましょう。

タイトルは上手く考えてね

上図の入力するデータはあくまで例ですが、頒布物の新規登録日、頒布物名、初期在庫数の最低3種類あれば十分かと思います。同人誌か同人グッズか、どのジャンルか、カテゴリ分けするのも良いですね。

次に、回答をスプレッドシートに集約するための設定を行います。

回答タブに移動し、緑のアイコンをクリックします。

新しいスプレッドシートを作成を選択し、スプレッドシートのファイル名を入力したら、作成をクリックします。
すると、スプレッドシートが立ち上がります。そこにデータが蓄積されていきます。

では、テスト用に頒布物を新規登録してみましょう。つくったフォームにアクセスし回答します。

画面右上の送信ボタンをクリックすると上図のようなウィンドウが立ち上がります。送信方法の右隣にある真ん中のアイコンタブをクリックします。リンクが表示されていますので、そのURLにアクセスしましょう。URLを短縮にチェックを入れると短くなるので、コピペしやすいかと。このURLはどこかにメモなどしてアクセスしやすくしておくといいと思います。

つくったフォームにアクセスできましたか?テスト用にいくつか新規登録してみます。

大事なことを記述するのを忘れていました。初期の在庫数を入力する際は、必ず半角数字で入力してください!!!!!!数字を入力する際は必ず半角数字です。でないと計算ができません・・・。入力できたら、下の送信ボタンをクリックし、登録します。

上図のようにFormsで送信された回答がスプレッドシートに蓄積されていきます。この蓄積されているシート名を分かりやすく「頒布物一覧」とします。

2.GoogleFormsで頒布物の売上個数を登録させる

頒布物が売れたら、どの頒布物がいくつ売れたかを登録させる必要がありますね。これも、Formsで登録させます。

新たにフォームを新規作成します。

ざっと上図のような感じで十分かと。登録日、売れた頒布物の選択(必ずプルダウンにしてください)、売上個数。売れた頒布物の選択肢ですが、この選択肢を自動で反映させるスプリクトを書きます。大丈夫です、難しくありません!コピペでおkです。

スプレッドシートの方に移ります。 

右下にある+のアイコンからシートを作成します。シート名を「list」に変更します。イメージとしてはそこにリスト化されている頒布物一覧をFormsの選択肢に転写させるという感じです。

listのシートに頒布物一覧に記載されている一覧を自動転写させます。IMPORTRANGE関数を使います。

IMPORTRANGE関数は、他のスプレッドシートから値を自動で転写させるという関数です。便利ですけど、ちょっと動作が重くなります。関数の引数は以下の通りです。

IMPORTRANGE("スプレッドシートのURL","シート名!範囲")

スプレッドシートのURLのところに、今編集しているスプレッドシートのURLをコピペします。

そのままコピペするわけではなく・・・・

https://docs.google.com/spreadsheets/d/abcdefghijk1234567890  までです。
つまり、/edit#gid~の前までということですね。もう一つは転写する範囲を入力します。転写元は、Formsで回答が蓄積されているシート名「頒布物一覧」で、一覧があるセルの場所を指定します。

画像を例にすると、C列ですね。ですので・・・

=IMPORTRANGE("スプレッドシートのURL","頒布物一覧!c2:c")
となります。大丈夫かな。私の拙い文章で伝わってるだろうか・・・。

確定させると、上図のようなアナウンスが表示されていますので、アクセスを許可のボタンをクリックしましょう。

デデン!頒布物一覧シートにあった、頒布物名の列の転写がこれでできました!!

次にスクリプトを書いていきます。

メニューの拡張機能→Apps Scriptをクリックします。

すると上図のようにスクリプトエディタが立ち上がります。function myFunction()~のところにスクリプトを書いていきます。 

一旦全部削除して、何も考えずに、以下のスクリプトをコピペしてください。

function updateFormList() {
  //フォームの質問番号
  var questionNo = 2
  //フォームID
  var formId  = ''
  //シートID
  var sheetId = ''
  //シート名
  var sheetName = 'list'
  //データ配置列名
  var colName = 'A'
  //データ開行
  var rowNum = 1
 
  //フォームの取得
  var form = FormApp.openById(formId)
  //全質問項目を取得
  var items = form.getItems()
  //questionNoで指定した質問項目を指定(配列は0から始まるので-1)
  var item = items[questionNo-1]
 
  //スプレッドシートを取得
  var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName)
  //シートの最終行を取得
  var lastRow = sheet.getLastRow()
 
  //リスト内容の取得
  var arrList = sheet.getRange(colName + rowNum + ':' + colName + lastRow).getValues()
 
  //選択肢をフォームに反映
  item.asListItem().setChoiceValues(arrList)
}

このスクリプトは以下のブログ記事を参考にしました。(ほぼ丸コピですが)

コピペしたら保存しましょう。そして、このスクリプトを修正していきます。

var questionNo = 2

この変数questionNoには、売れた頒布物の一覧を選択する質問の順番を代入しています。

上図の例だと2番目に売れた頒布物を選択する質問がありますので、

var questionNo = 2

となります。3番目にある場合は3、4番目にある場合は4を代入しましょう。

 //フォームID
  var formId  = ''

次に、''に頒布物の売上個数を登録するフォームのIDを入力します。

IDは、FormsのURLの中にあります。d/~~~~~/editの間にある、~~の部分の長ったらしい英数字の文字列になります。

//シートID
  var sheetId = ''

最後に、スプレッドシートのIDを''に入力します。これも今まで編集してきたスプレッドシートのURLにIDがあります。

https://docs.google.com/spreadsheets/d/~~~~~/edit・・・の~~~の長ったらしい部分ですね。

これでスクリプトの修正は以上です。保存した後、実行ボタンをクリックして、スクリプトを実行させましょう。

すると、権限がどうたら~というアナウンスが出現すると思います。自身のGoogleアカウントで許可をしてあげます。

上図のような実行ログになれば成功です。フォームの方を確認してみましょう。

ドドン!売れた頒布物の選択する質問が更新されていたら大成功です!

ちなみになんですが、1でつくった頒布物の新規登録フォームで登録したら、スクリプトをそのたびに実行する必要があります。シートにスクリプトを実行させるボタンをつくれば楽かと思います。ボタンのつくりかたはググってみてくださいね(端折るな)。

そしたら、フォームの回答の送信先スプレッドシートを指定してあげましょう。やり方は1とほぼ同じです。

回答タブに移動し、スプレッドシート作成ボタンをクリック。その時に、既存のスプレッドシートを選択を選択してください。ダイアログが出現したら、1で作成したスプレッドシートを選びます。

今つくったフォーム回答送信先シートを「売上管理」とします。

それではテストとして、いくつか登録させてみましょう。

テストとして上図のように登録してみました。

3.在庫管理表をつくる

ここから!在庫管理表をつくっていきます。右下の+ボタンからシートを作成しましょう。シート名は「在庫管理表」とでもします。

1行目に項目を入力していきます。最低限、頒布物名、初期在庫数、売上個数、現在在庫数の4項目あれば十分かと思います。

次に頒布物名と初期在庫数を頒布物一覧シートから転写させましょう。
IMPORTRANGE関数を使います。

例ですが、上図のようになれば成功です。売上個数はSUMIFS関数を使います。

SUMIFS(合計範囲,条件範囲,条件)

例として・・・・
sumifs('売上管理'!$D$2:D,'売上管理'!$C$2:C,A2)

売上管理シートのD2以下の列の値の合計をだしたいので、合計範囲には
'売上管理'!$D$2:Dを入力。A2(テスト同人誌A)と一致した列の数値の合計をださないといけないので、条件範囲は'売上管理'!$C$2:C、条件はA2となります。

図解すると↑こんな感じ。伝わって・・・!

テスト同人誌Aは5冊売れたと登録されているので、5が入って成功です。
あとはコピペするだけ。

こんな感じになりました。現在在庫数を計算します。単純に引き算です。

現在在庫数=初期在庫数-売上個数

じゃじゃん!超簡易的ですが、これで完成です!

4.終わりに

いかがだったでしょうか?普段からプログラミングなどを触ってる方は結構簡単にできたと思います。私自身も色んな方のブログ記事を見ながらつくりましたけど、思ったより簡単だなという印象を受けました。同人活動用なのでこんなんで良いんですよ、多分。

最近はオンライン同人誌即売会もあって自家通販されてる方も多いと思います。私もオンライン即売会でサークル参加予定だったので、在庫管理システムとかあればいいなと思って探してみましたけど、良い感じのが見つけられませんでした。そこで、GoogleFormsとスプレッドシートを使って在庫管理システムをつくるというブログ記事をいくつか見つけ、それを参考に自作してみた・・・という感じです。

しかしながら、今回紹介したシステムは超簡易的です。本当に最低限の機能しかありません。例えば、再販には対応していませんし、FormsのURLのQRコードを作成・印刷しておけば、さっとスマホから登録も可能です。色々試して改造してみてくださいね。

ちょっと長くなりましたが、今回はここまで。次回もどうぞよろしくお願い致します!

この記事が気に入ったらサポートをしてみませんか?