質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

10965閲覧

エクセルのマクロを使ってガントチャートの作り方を教えてください

clorets

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/12/11 12:25

エクセルでマクロを組んでガントチャートを作りたいのですが、マクロ初心者(今回初めて)なので作り方が分かりません。

検索で調べると、フリーソフトやいろいろやり方があるようなのですが、自分がやりたいこと(特に1行に複数の線を出す)ができるソフトやマクロの組み方が見つかりません。

下に条件ややりたいことを記述しましたので、どうか教えてもらえないでしょうか。

よろしくお願いします。

エクセルのバージョン:Excel2010

やりたいこと:下記参照のsheet1に入力した開始日、終了日、入力した色、線の種類を元に、

sheet2にオートシェイプで線を開始日から終了日まで自動で入れ、線の左端に開始日、  右端に終了日を表示できるようにしたい。 sheet2のチャートの1行には開始日から終了日のオートシェイプの線を最大7本表示したい。  sheet2のチャートは1年分(12カ月)で1カ月を10日ずつで分割表示している。

        日にちのセルの中は、10=2017/9/10、20=C4+10、30=D4+10となっています。

       sheet1

イメージ説明

sheet2

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

回答されている方なら1日で作れると思いますが
初心者が1から作るというのであれば、
勉強、習得、開発、テスト、
仕事の合間にやって半年くらいかかるかと。

ここはコードを作ってとお願いする場ではないので、
ヒントを幾つか。
・For Loop 構文
・図形(Shape)に名前を付けて、コピペ
・Shape の Top Left ⇔ Cellの Top Left で位置調整
・Shape の Width で長さ調整
・Shape の 文言は「.TextFrame2.TextRange.Text」

頑張ってください。

投稿2017/12/12 00:47

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

clorets

2017/12/12 09:10

回答ありがとうございます。 頂いたヒントを元に頑張ってみます。 また分からないことが出たら質問をすると思いますがよろしくお願いします。
ExcelVBAer

2017/12/12 09:20

個人的には「ExcelVBAを実務で使い倒す技術」という本がおすすめです。
clorets

2017/12/12 09:30

回答ありがとうございます。 本探してみます。
guest

0

マクロの作り方と学習の仕方一般に関してですが、鉄板の方法は、マクロ化したい作業を手作業で行いながら、それを「マクロの記録」コマンドで記録して、記録されたマクロを解読し、修正していく方法です。特に、初心者はこれでいろいろなマクロのコマンドを知ることもできて、早く上達します。

たとえばご質問の内容なら、記録を解読すればガントチャートの線をどのように引くのはマクロのどのようなコマンドを使えばいいのか、座標はどのように指定するのか、といったことが理解できると思います。
これらが理解できたら、次は元データからどのようなデータを読み取り、線を引いていくのかをプログラム化することです。ここでで大事なことは、自分たちが無意識にやっている作業を、きちんと順序立てて手続き化するか(まさに、それが「プログラミング」)です。

たとえば、ですけど、チャートの線を引くのでしたら、

1.作業の開始日時を取得(cells(N,M).valueみたいに取得)
2.作業の終了日時を取得(同上)
3.チャートの始点を計算(X:開始日時×1日の長さ+0日目のX,Y:作業番号×作業の幅+最上段のY)
4.チャートの終点を計算(同上)
5.チャートを引く(マクロのコマンド)
6.1に戻って、次の作業

というような作業になるでしょうか。まずは、こういう形で必要な作業を拾い出すわけです。で、1~5の作業をマクロで記述して、それを、For-NextやDo-Loopで繰り返す、という形に置き換えるわけです。

そんな形で試行錯誤してみてください。なかなかいい練習問題になると思いますよ。

投稿2017/12/11 23:23

webappbeginner

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

clorets

2017/12/12 09:14

回答ありがとうございます。 ところで、3のところにある1日の長さというのは24時間ということでしょうか? 0日目のXというのは始点から終点までの日数ということであっているでしょうか? 質問ばかりですみません。
webappbeginner

2017/12/12 23:20

>ところで、3のところにある1日の長さというのは24時間ということでしょうか? おつくりになっているチャートで「1日」を表現する、チャートの長さ(ピクセル数等)のことです。 >0日目のXというのは始点から終点までの日数ということであっているでしょうか? 同様に、チャートの描画エリアの左端(0日目)のX座標のことです。「開始日時×1日の長さ」で、「開始日時」がゼロだとしてみてください。ゼロになるので、そのままだとシートの左端からチャートが始まってしまいます。それを描画したい位置にあわせるために、「0日目のX(座標)」を足す必要があるということです。ちなみに、こういう調整値のことを「オフセット」とよく言います。 なお、「開始日時」とさらっと書きましたけど、正確には基準日に対する「相対的な日時」ですので、チャートの基準日(0日目)からの日数もしくは時間にする必要があります。 開始日時=開始する実際の日時-基準日の日時 この作業にどの程度のお時間を取れるかわかりませんが、とにかくやってみることが、マクロの上達には不可欠です。最初は思ったとおりに行かないと思いますが、なぜうまくいかなかったのかを考えて修正し、また試すことが結局は上達への近道です。がんばってください。
clorets

2017/12/13 12:29

ありがとうございます。 がんばってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問