5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
たかちゃんさんの投稿
(投稿ID: 4996)
【概要】
毎日、通販の販売状況がCSVで吐き出される。
CSVの中身
A列 親-商品番号
B列 子-商品番号
C列 商品名(商品名は長い。)
D列 セッション(ユーザ訪問数)
E列 セッションのパーセンテージ
F列 ページビュー
G列 ページビュー率
H列 カートボックス獲得率
I列 注文された商品点数
J列 商品購入率
K列 注文商品売上(円)
L列 注文品目総数
CSVのファイル名には日時を含む。
【マクロで実現すること】
1つめのマクロ:
特定のフォルダに複数CSVを格納し、dataシートへデータを転記。
1行名は見出し。(日付、商品名・・・)
2行目以降はデータを転記
A列はファイル名から日付を取得し転記
B列以降は、上記の親ー商品番号~注目品目総数まで転記
2つめのマクロ:
ピボットテーブルで実現可能ですが、マクロで同様の動作を実現。
何の値を集計したいのか、ユーザに選択してもらう
dataシートにあるデータを一気に配列に格納
graphシートに必要なデータを以下のように転記
表の軸を作成(セルB1から横へ日付、A2から下へ商品番号)
表の中は、集計したい値を転記
20-10-1 20-10-2 20-10-3・・・
A123
A456
A789
・
・
・
今回、グラフ作成のマクロはつけていません。
【感想】
結局書き直してみた所、発展2の知識だけで書くことができました。
マクロ作成が簡単なので便利だと思いました。(^^)
たかちゃんさんのコメント
(コメントID: 7123)
たかちゃんさんのコメント
(コメントID: 7124)
小川 慶一さんのコメント
(コメントID: 7125)
相変わらず、すばらしいですね。
参考までに紹介すると、条件設定しての値取得には、ワークシート関数のDSum DCount 等のデータベース関数群が便利です。
これらの関数は、エクセルVBAからも利用可能です。
以下は、サンプルコードです。
(*サンプルデータの取得は、サンプルコードの後に紹介したリンクからお願いします)
配列の要素はハードコーディングしていますが、実務では、紹介済みの重複しないリストを作成する方法等で動的に取得することになるでしょう。
条件設定をしているセル(I1:K2)は、ユーザから見えないところに置くか、コード内で生成して出力が終わったら削除するか。
https://www.dropbox.com/s/5tskwgme88cdm22/dsum_sample.xlsm?dl=0
田中 宏明さんのコメント
(コメントID: 7126)
> 相変わらず、すばらしいですね。
ホントすばらしです。
私からは、他人がツールを使う場合の対策を紹介します。
Application.InputBox だと Type:=1 指定で、数字だけを受け付けるようにできます。
ただし、キャンセルの場合、Falseが返るので、Variant型に変更したうえでVarTypeメソッドで変数のデータ型の分類を含む Integer 値を調べ、キャンセルを判定させています。
たかちゃんさんのコメント
(コメントID: 7127)
先生、サンプルコード読みました。
読み終わった時は、凄すぎて言葉が出ませんでした。
Excelがここまで凄かったとは・・。
サンプルコードは、まさに実現したかった事です。
エクセルの標準機能もイチから勉強し直します。
毎回、本当にありがとうございます!
> 参考までに紹介すると、条件設定しての値取得には、ワークシート関数のDSum DCount 等のデータベース関数群が便利です。
たかちゃんさんのコメント
(コメントID: 7128)
ありがとうございます!
実はキャンセル判定ずっと方法を考えていたのですが
答えを見つけられずにいました。。
こうやって、VBA業務の経験者とやり取りできる機会を与えてもらい
感謝しかありません。早速、試してみます!
> 私からは、他人がツールを使う場合の対策を紹介します。
> Application.InputBox だと Type:=1 指定で、数字だけを受け付けるようにできます。
> ただし、キャンセルの場合、Falseが返るので、Variant型に変更したうえでVarTypeメソッドで変数のデータ型の分類を含む Integer 値を調べ、キャンセルを判定させています。
小川 慶一さんのコメント
(コメントID: 7129)
興味深いです。
intputbox と excel の application.inputbox は別物なんですね。
Type:=1 て、正直、はじめてこの引数の存在を認識しました。
InputBox 関数
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/inputbox-function
Application.InputBox メソッド (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.inputbox
Inputboxでは、「想定内の値が入力されるまでしつこくダイアログを表示したい」というのもよくあるニーズです。
そういうときは、 Do Loop 内にinputbox表示のコードを入れて、所望の値を入力されるまでLoopをくり返すというやり方もあります。
ということで、以下、少しリライトしてみました。
もっとも、しっかり作り込むなら、ユーザフォームを作って、有効な選択肢のみをラジオボタン表示するのが良いでしょう。
田中 宏明さんのコメント
(コメントID: 7131)
> エクセルの標準機能もイチから勉強し直します。
おかげさまでExcel標準のデータベース関数を勉強する機会を得ました。
条件設定した集計は、Excel標準のSumifs関数を先に知ったので、小川先生と同じ集計をSumifs関数で実装してみました。
たかちゃんさんのコメント
(コメントID: 7133)
コード読みました!関数も組み合わせて使うと、最強ですね。
読むのも簡単ですし。(^^)
今回改めてエクセルの素晴らしさに気づきました。
標準機能については、割と知っている方だと思っていましたが
とんでもない誤解でした。(^^;;
早速、エクセルを使用したデータ分析について少し復習をしていました。
既に知っている関数でも使い方次第で、このような判定もできるんだと
気づきました。言われれば「なるほど!」と思いますが、
意外と思いつかないのです。
【例】
Countifを使って、セルの中に"株式会社"の文字が入っているか判定
含む場合は"1"、含まない場合は"0"
=countif(セル,"*株式会社*"))
> > エクセルの標準機能もイチから勉強し直します。
> おかげさまでExcel標準のデータベース関数を勉強する機会を得ました。
> 条件設定した集計は、Excel標準のSumifs関数を先に知ったので、小川先生と同じ集計をSumifs関数で実装してみました。
田中 宏明さんのコメント
(コメントID: 7134)
> コード読みました!関数も組み合わせて使うと、最強ですね。
Application.WorksheetFunctionでExcel関数を利用すると便利な場面は多くありますね。
一方、小川先生の講座は、VBA初学者がExcel関数に頼ることなく、最初は条件分岐や繰り返しのコードを学び、それを実践していくといった遠回りな方法かもしれませんが、確実に腕力をつけることを重視されており、Excel関数を利用する方法は、紹介程度に留めているのだと思います。
既にご存知の Countifは、重複のないリストを作成する場合にも使えますよ。
http://officetanaka.net/excel/vba/tips/tips182.htm
たかちゃんさんのコメント
(コメントID: 7135)
ありがとうございます。
重複しないリストだけでも、本当に色々な方法があるのですね。
VBAが書けると選択肢が増えて楽しいです。
> たかちゃんさん:
>
> > コード読みました!関数も組み合わせて使うと、最強ですね。
> Application.WorksheetFunctionでExcel関数を利用すると便利な場面は多くありますね。
> 一方、小川先生の講座は、VBA初学者がExcel関数に頼ることなく、最初は条件分岐や繰り返しのコードを学び、それを実践していくといった遠回りな方法かもしれませんが、確実に腕力をつけることを重視されており、Excel関数を利用する方法は、紹介程度に留めているのだと思います。
>
> 既にご存知の Countifは、重複のないリストを作成する場合にも使えますよ。
> http://officetanaka.net/excel/vba/tips/tips182.htm
小川 慶一さんのコメント
(コメントID: 7139)
おはようございます。
ありがとうございます。
DSumよりSumIfsのほうが計算のためにセルに条件を記載する必要がない分良さそうですね。
> 一方、小川先生の講座は、...、最初は条件分岐や繰り返しのコードを学び
これは、ホントそうです。
便利なショートカット技をどんなにたくさん知ったとしても、条件分岐や繰り返しのコードからは逃げられないです。
一方、条件分岐や繰り返しのコードをきちんと書けると、ショートカット技を知らなくてもたいていの計算は自力でできます。