プロが教えるわが家の防犯対策術!

エクセルのマクロについて教えてください。

当方、超初心者です。
やり方が分かれば一番良いですが、ご回答いただく文章だけで理解するのは難しいかもしれないので、
文章でご説明いただいても結構ですし、分かりやすいサイト等があれば、そちらの共有していただくのでも構いません。

私のやりたいことは、
まず電気代、水道代、灯油代、ガス代についてAさん、Bさん、Cさんのそれぞれでデータを集めます。
それを毎月集計していくのですが、それぞれの金額の推移を折れ線グラフや積み上げグラフにして、人別のグラフにしたり、項目別のグラフにしたりして、所謂見える化をしたいです。
毎月、手入力して作成しても良いのですが、勉強のためにもマクロを使って簡易化したいです。

イメージとしては、
1つのエクセルファイルで、3つシートを作ります。
シート①には、毎月、指定したセルにデータをそのままペーストしていきます。

シート②で、マクロのボタン(?)を押すと、シート①の指定したセルの数値をシート②に記録していきます。ここで、月が替わるごとにデータが記録され続けていくようにしたいです。
例えば、初月(1月)は各データが1列目に記録され、翌月はデータが2列目に記録、その翌月はデータが3列目に記録される…を繰り返していき、シート②だけはデータがどんどん書き足されていくイメージです。

シート③で、見える化したい月のデータをシート②の集記録データから自動でセルを認識して、データを抽出してくる。そのまま、抽出されてきたデータで、折れ線グラフや積み上げグラフ等の数値情報が自動で書き換わり、その変動を確認できる。

このようなことをしたいです。
調べてみたのですが、イマイチ自分のやりたいこととドンピシャな解説されている記事が見つからなくて、困っています。
(きっとマクロでできることが多すぎて、色んなマクロの説明記事であふれかえっており、自分のやりたいことがピンポイント過ぎて、ヒントとなる記事を見つけられなかったのだと思います。)

有識者の皆様、お力お貸しいただけないでしょうか。

A 回答 (6件)

おそらくですけどマクロ以前にEXCELの使用歴が浅くないですか?



EXCELを使い込むと必ず1行目に項目名、二行目以降にデータという
形式を用いることが基本ということに気づかれると思うのです。
それは、例えばピボットテーブルやオートフィルターなどEXCELの
基本機能を活かすためにはその構造を選ばないとあとあと無駄だと
思い知るからです。

ご質問ではその構造が②ですね。
No4さんの仰るように①の必要性が???です。

そしてグラフの作成経験はどれぐらいお有りですか?
グラフは作成したグラフのデータのどの部分を使うかの
指定がVBAで変更できますから、全体をグラフに起こしても
使うデータがどこかだけを変更も可能です。
そういったEXCELをある程度使い込まないでその前にVBAに
進んでしまうと、無駄なコーディングをしがちになります。

なんちゃって私もC言語から来たので最初そうだったんです。
だからEXCEL側の最適化を先に十分に考ええる方が
のちのちお得じゃないかとは思います。
    • good
    • 1

質問者様は、マクロの基礎は習得されていない超初心者とのことですが、C言語やpythonなどの言語の経験はあるとの事ですので、マクロの基礎を習得するのは、そんなに困難な事では無いと考えます。



ある程度マクロを習得された上で、部分的に困った事を質問された方がかえって近道なのではないでしょうか。

今の質問では、回答者にタダでマクロの基礎講座をやってくれとおっしゃられているに等しい質問内容ではないかと感じました。

これ、完全に禁止行為とは言い切れないけど、禁止行為である「作業依頼」に限りなく近いグレーゾーンの質問ではないでしょうか?
    • good
    • 3

こんにちは、既に回答されている内容は私も同様に思いますが


横から失礼してアドバイスになればと思います
(回答はシート②の処理についてです)

>ここで、月が替わるごとにデータが記録され続けていくようにしたいです。
これは、所謂データベースとなる部分と存じます

所感としては各データの位置や見出しを再考するべきと思います

>電気代、水道代、灯油代、ガス代についてAさん、Bさん、Cさんのそれぞれでデータを集めます。

これには月を判断するデータがありません
(A列が該当して一意のデータは基本だから書かなかっただけと言うオチかも知れませんが)

シート③で行う作業を鑑みてデータを蓄積(配置)した方が良いと思います
月単位のデータで行が跨ると加工する時に分かり難い

例: 月単位で1行にまとめる (図を参照)
B列にAさんの電気代、C列にBさんの電気代としない理由は
カテゴリー(電気代、水道代、灯油代、ガス代)の優先よりも
Dさん追加やBさん削除などの時の改修が容易を優先しデータ抽出時も処理がしやすい(Step実行が容易)

シート①もこのデータ配置が良いと思います

そもそもシート①が必要なのかという事にもなりますが
貼り付けの元データにより貼り付け時 データ一の加工(位置の置き換え)が必要な場合はシート①に対するデータ加工のVBA組む必要があるかもしれません

図のようなデータ配置のシート①のデータをシート②に蓄積していくVBAの一例
シート①はSheet1、シート②はSheet2
各シートの見出し行(1行目は同じとしています)
行方向に蓄積 新しいデータが行末に蓄積されます
データフォーマットは加工していません シートの書式設定などで要設定
シート②にActiveXコントロールのCommandButtonを配置、押下をトリガーとします
元データ範囲は変数として取得して改修を考慮

Private Sub CommandButton1_Click()
Dim rng As Range
'元データ範囲を取得
Set rng = Worksheets("Sheet1").Range("A2:M2")
Dim n As Long
'Sheet2の行末+1で書き込み(新規)行ナンバーを取得
n = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1
'値の代入
Worksheets("Sheet2").Cells(n, 1).Resize(, rng.Columns.Count).Value = rng.Value
End Sub

個人的な意見ですが
要件のデータ配置がプログラム的に考えると最適でないので
構想に対してドンピシャな・・・回答ではないです
「エクセルのマクロ」の回答画像4
    • good
    • 1

#1.2のfujillinさんの回答がなされえいます。


>イマイチ自分のやりたいこととドンピシャな解説されている記事が見つからなくて、
これは当たり前でしょう。
超初心者の方ですね?
マクロの基礎は修得なさっていますか?
あえて言いますが、プログラミングの(少しは)経験がないと、マクロで処理をするのは無理でしょう。
ところで、実際のところどこまで進んでいますか?

>1つのエクセルファイルで、3つシートを作ります。
>シート①には、毎月、指定したセルにデータをそのままペーストしていきます。
ここまではできていますか?それができたうえでシート②の作業に移れます。
まず少しずつ手作業でやってみることです。
そうすれば、
>初月(1月)は各データが1列目に記録され、翌月はデータが2列目に記録
は、1列目や2列目ではなく1行目や2行目の方が、処理しやすいと分かると思いますよ。
    • good
    • 1
この回答へのお礼

>超初心者の方ですね?
はい。質問本文にもあります通り、超初心者です。
>マクロの基礎は修得なさっていますか?
マクロの基礎は修得していないです。
学生時代にC言語をやったことはあるのと、今は独学ですが、Pythonをかじったことがある程度です。
>実際のところどこまで進んでいますか?
シート①は完成しています。

私がやりたいのは、
例えば、1月はシート①、B2セルにAさんの電気代、C2セルにBさんの電気代、D2セルにCさんの電気代…。
また、B3セルにAさんのガス代、B4セルにAさんの灯油代…。
としていきます。
それをシート②でボタンを押すと、シート②の2列目にそれらのデータが横一列に並ぶ。

さらに翌月(2月)も、
シート①には、2月のデータを先ほど同じセル(B2セル、C2セル…)にペーストします。
つまり、シート①はデータが上書きされていくということです。
そしてシート②でボタンを押すと、その分はシート②の3列目にデータが一列に並ぶということです。

同様に、3月、4月以降もシート①はデータを上書きしていき、
シート②に列が増えていくというイメージです。

シート③はシート②のセルを参照してグラフを作るだけです。
(この作業は自分で出来ます。)

お礼日時:2024/01/24 13:35

No1です。



>いやいや、ごはんの方がおいしいでしょ。
>と言われている気持ちになりました。
あら、そうですか。

ご質問の文章(=抽象的なので)からは、このくらいしか回答を思いつけません。
強いてあげるならば、以下ぐらいしか紹介できません。
以下を、上から20くらいずつ読めば、少しは近いものはあるかも知れません。
(No1に挙げた「まとめて検索」なので、ないかも知れません)
https://www.google.com/search?q=%E3%82%A8%E3%82% …
https://www.google.com/search?q=%E3%82%A8%E3%82% …

「そんなのは、とっくにやったよ‼」
というおつもりかも知れませんけれど、ご質問文にはそれ以上の内容は書いてないので・・
質問者様が頭の中で考えていることをエスパー的に当てるつもりはありませんから。
    • good
    • 2
この回答へのお礼

ありがとうございました。

お礼日時:2024/01/24 11:44

こんにちは



>やり方が分かれば一番良いですが、ご回答いただく文章だけで
>理解するのは難しいかもしれないので~~
ご質問文が抽象的な文章なのに、どのような具体的な回答を求めているのでしょう?
ご自身のなさりたいことを具象化しなければ、具体的な回答は得られません。
それとも、分析の方法から全部考えてもらうことを期待しているのでしょうか?


まずは、どのようなグラフにしたいのかを考えましょう。
適当なダミーデータを用意して、どのようなグラフを作成したいのかを考えます。
データが蓄積してゆくようなので、常にそのデータ全部をグラフ化するのか(=ポイントが増加するので大量になる)、あるいは一部分(=一定期間。例えば直近〇年とか)を区切ってグラフ化するのかなどについても考えておきます。

目的とするグラフが決まれば、それに必要となるデータ(=グラフの元になる表)が決まると思います。
(グラフが複数なら、表も複数用意すればよいだけですね)
元となるデータから、その形式に抽出・変換すれば良いことになります。
エクセルの場合、グラフとデータの関係が変わらないのであれば、一度グラフを作成しておけば、データを入れ替えたり範囲を変更することで自動的にグラフに反映されるようになっています。
ですので、マクロ等で「グラフを作成する」必要はなさそうですね。
(事前に、グラフを設定しておけば一度だけで済みますので)


>自分のやりたいことがピンポイント過ぎて、ヒントとなる記事を
>見つけられなかったのだと思います。
ピンポイントと言えるくらいに具体化できているのなら、それを小さな処理単位に分解して検索すれば、大抵の内容は見つけられるはずと思います。
ネットにはエクセルに関する記事は溢れるほどありますので。
とは言え、コピペするだけで済むようなものはないと思いますから、もしもコピペで済ますことを期待しているのならそれはほぼ無理でしょう。
複雑なことをまとめて検索するような方法で行うと、そのような内容にマッチする記事はほとんどないと思います。


一方で、上記程度の内容であれば、マクロでももちろん可能ですけれど、グラフのデータ範囲の変更くらいであれば、関数でも可能と思います。
また、データの抽出についても、元データの記録方法や抽出方法を工夫しておけば、関数でも実現可能になるものと想像します。
ですので、場合によっては全体を関数等で実現することも可能なのではないかと想像します。
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A