• ベストアンサー

【Excel】スケジュール表 進捗率を入れると帯を描写するマクロ

【Excel】スケジュール表 進捗率を入れると帯を描写するマクロ スケジュール表へ開始日と終了日を入力することで、その期間が"■"で表示される表があります。 この表へ進捗率を入力することで、開始日を基準に帯を表示させたいです。 進捗率が更新されたら、帯の長さ表示も更新されるように。 ご教授、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.6

肝心の使い方を書いてませんでした。失礼しました。 進捗率の数字を記入すると自動で帯を引きます。 複数セルに一度に記入・編集しても構いません。ただし進捗率を生数字を記入している前提です。数式で実は進捗率を計算させていたときは,このマクロは使えません。 それとコードを一カ所(実際は2カ所)直します。そういえば前のご質問でテキストボックスを使っていたのは残します。前回の回答のコードを削除し,下記をコピー貼り付け直します。コードを記入するシートの呼び出し方を,回答した手順と違うやり方でやって間違えないよう注意して操作してください。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim h As Range  Dim ha As Range  Dim hs As Range  Dim s As object  Set hs = Application.Intersect(Target, Range("D4:D9"))  If hs Is Nothing Then Exit Sub  For Each ha In hs.Areas   For Each h In ha    For Each s In ActiveSheet.rectangles     If s.TopLeftCell.Row = h.Row Then s.Delete    Next s    If h > 0 Then    ActiveSheet.Shapes.AddShape _     Type:=msoShapeRectangle, _     Left:=h.Offset(0, 1 + h.Offset(0, -2) - Range("B2")).Left, _     Top:=h.Top + h.Height / 2, _     Width:=h.Offset(0, 1 + h.Offset(0, -2) - Range("B2")).Resize(1, 1 + h.Offset(0, -1) - h.Offset(0, -2)).Width * h / 100, _     Height:=h.Height / 2    End If   Next  Next End Sub #またご利用のソフトのバージョンをご質問に書いていません。マクロが動かない原因になるので,今度こそは忘れないようになさってください。

yuma07chan
質問者

補足

ソフトのバージョン記入、失念しておりました(Excel 2007)。確かに動かないことがありますね。 試してみたのですが、同じ行にあるテキストボックスが消えてしまいます。 残すことができないでしょうか。

その他の回答 (7)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.8

>試してみたのですが、同じ行にあるテキストボックスが消えてしまいます。 >残すことができないでしょうか。 本当に間違いなく改訂版のマクロを試して,それでテキストボックスが消えたのですか? もし間違いなくそうなのでしたら,あなたがいま使っている「テキストボックスの追加」は,以前のご相談で見ていたマクロと違いますね。 その場合は最初のご相談でお話ししておいたように,既存のマクロとすり合わせて全体としての調整が必要です。情報が足りませんので,残念ながら適切なアドバイスは出来ません。

yuma07chan
質問者

お礼

私のコピーミスでした。申し訳ございません。m(__)m やりたかったことができそうです。 ありがとうございました。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.7

図形を消すのを線だけにすれば良いと思います。 「If .Shapes(I).Type = msoLine」で判断するように訂正して下さい(☆の行)。      For I = .Shapes.Count To 1 Step -1 ☆    If .Shapes(I).Type = msoLine Then .Shapes(I).Delete    Next I

yuma07chan
質問者

お礼

早速のご回答、ありがとうございます。 大変参考になりました。^_^

  • Zi-co
  • ベストアンサー率46% (23/49)
回答No.5

あれ!開かない では、こちらを

参考URL:
http://dl6.getuploader.com/g/1%7Ctaka816jp/53/%E4%BD%9C%E6%A5%AD%E6%99%82%E9%96%93%E3%81%A8%E9%80%B2%E6%8D%97%E7%8E%87.J
yuma07chan
質問者

お礼

ご回答ありがとうございます。 おっ!どこかで見たような、、、 このような進捗率の出し方もありますね。 参考になります。

  • Zi-co
  • ベストアンサー率46% (23/49)
回答No.4

参考出品(グラフです) 日・祝のみ考慮に入れてます

参考URL:
http://www.excel.studio-kazu.jp/mwiki/images/0/09/%E4%BD%9C%E6%A5%AD%E6%99%82%E9%96%93%E3%81%A8%E9%80%B2%E6%8D%97%E7%8E%
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

下記のマクロを作成しました。 ボタン等で実行するようにして下さい。 1.最初にシェープ(線)をすべて消しています。 2.開始日は考慮しています。作業工程表示開始日が6/6 で 工程開始が6/4 等々 3.終了日は考慮していませんので、工程日数分線が引かれてしまいます。 4.線を引くためにE列~は全て列幅を同じにして下さい。 5.線の太さ・色・線種・縦位置は随時変更して下さい。 Sub ライン表示()  With ActiveSheet    For I = .Shapes.Count To 1 Step -1      .Shapes(I).Delete    Next I    最終行 = Cells(Rows.Count, "A").End(xlUp).Row    For 行 = 4 To 最終行      日数 = Cells(行, "C") - Cells(行, "B") + 1      進捗日数 = 日数 * Cells(行, "D") / 100      Select Case True        Case Range("B2") <= Cells(行, "B")          開始列 = Cells(行, "B") - Range("B2")        Case Else          開始列 = 0          進捗日数 = 進捗日数 - (Range("B2") - Cells(行, "B"))      End Select      If 進捗日数 > 0 Then        縦位置 = Cells(行 + 1, "E").Top - 4        横位置 = Cells(行, "E").Offset(0, 開始列).Left        横幅 = Cells(行, "E").Width * 進捗日数        .Shapes.AddLine(横位置, 縦位置, 横位置 + 横幅, 縦位置).Select        Selection.ShapeRange.Line.Weight = 4        Selection.ShapeRange.Line.ForeColor.SchemeColor = 10      End If    Next 行  End With End Sub

yuma07chan
質問者

お礼

素人の私でも解りやすいマクロで書いていただきありがとうございます。 大変勉強になりました。

yuma07chan
質問者

補足

ご回答ありがとうございます。まさにやりたかったことです。 最初に線を消しますが、描いた線のみを消すことができないでしょうか。 サンプル画像にはありませんが、■が表示されるエリア部分にテキストボックスでコメントを表示し、残したく思います。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

シート名タブを右クリックしてコードの表示を選び,現れたシートに下記のようにコピー貼り付ける。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim h As Range  Dim ha As Range  Dim hs As Range  Dim s As Shape  Set hs = Application.Intersect(Target, Range("D4:D9"))  If hs Is Nothing Then Exit Sub  For Each ha In hs.Areas   For Each h In ha    For Each s In ActiveSheet.Shapes     If s.TopLeftCell.Row = h.Row Then s.Delete    Next s    If h > 0 Then    ActiveSheet.Shapes.AddShape _     Type:=msoShapeRectangle, _     Left:=h.Offset(0, 1 + h.Offset(0, -2) - Range("B2")).Left, _     Top:=h.Top + h.Height / 2, _     Width:=h.Offset(0, 1 + h.Offset(0, -2) - Range("B2")).Resize(1, 1 + h.Offset(0, -1) - h.Offset(0, -2)).Width * h / 100, _     Height:=h.Height / 2    End If   Next  Next End Sub #いま現在あなたが他に運用しているマクロ?と,色々調整がいるかもしれません。 そういった微調整を含めエラー対策等も特に施していませんので,もう少し実際の様子に合わせて調整してから使ってください。 再作成の依頼はご容赦方。

yuma07chan
質問者

お礼

いつもありがとうござます。 確かに色々と調整が必要と感じております。 また宜しくお願いいたします。

  • O_O
  • ベストアンサー率29% (207/701)
回答No.1

4行と5行の間に1行加えて、条件付き書式を使って、 その上のセルに"■"が入ったなら塗りつぶし色のパターン(例えば緑とか)を表示させるというように すればできるかもしれませんね。 条件付き書式 数式=E4="■" 書式押して、パターンを押して「緑」を選択。 さらに、帯みたくするために、新たに加えた行の高さを低くする。 どうでしょうか。

yuma07chan
質問者

お礼

ご回答ありがとうございます。 参考にさせていただきます。 また宜しくお願いいたします。

関連するQ&A

  • 【Excel】◇再質問◇スケジュール表 進捗率入力で帯描写するマクロ

    【Excel】◇再質問◇スケジュール表 進捗率入力で帯描写するマクロ お世話になります。Excel2007使用です。 以前、質問番号:5949136で質問し、解決できました。ありがとうございました。 スケジュール表を使用する中で欲が出て、土日祝日を取り除いたカレンダーに 進捗率の数字を記入すると自動で帯を引くようにしたく思います。 どのようなマクロになるでしょうか 日数と6/15からのカレンダーは関数で出しています。

  • エクセル マクロ スケジュールから

    Excel2000使用です。 月間スケジュール表で、一番上の行に1~31が入力されており、直下の行に曜日が入力されています。 マクロを使用して月間スケジュール表から項目を抽出したいのですが、例えばどこかに5日のスケジュールなら5を入力すれば5日のスケジュールのみ抽出するということができますか? 毎日出力する必要がある表なので、現在はその前後の日付を表示しないようにしてから出力しています。 よろしくお願いします。

  • マクロの進捗率の表示

    エクセルのVBで、マクロの進捗率を棒グラフまたは、計算値で表示する方法を教えて下さい。

  • 指定した期間での予定進捗率の日割り表示

    Excel2003を使って個人スケジュールをガントチャート風にしています。 作業名の横に開始日と終了日を入れると、その右のカレンダーに対応したセルに色を付けるようにしました。 マクロはわからないので、カレンダーの全セルに条件付き書式で以下のように設定してあります。 =AND(DATE($D$2,$E$2,G$5)>=($D$6), DATE($D$2,$E$2,G$5)<=($E$6)) =AND(DATE($D$2,$E$2,H$5)>=($D$6), DATE($D$2,$E$2,H$5)<=($E$6)) .... 下のようなイメージです。 作業名|開始日|終了日| 1| 2| 3| 4|...|17|...|29|30|31| 作業A|10/1 |10/3 |■|■|■| |...| |...| | | | 作業B|10/17 |10/30 | | | | |...|■|...|■|■| | ここで登録した作業の予定進捗率(%)を、休日(土日)を除いた日割りで表示したいのですが 方法がわかりません。 例えば、作業Aの場合は就業日3日間ですので、色の付いたセル上の 10/1に 33%、10/2に 66%、10/3に 100%といったようにです。 作業Bの場合は就業日10日間ですので、10/17に 10%を表示して、 その後土日は表示せず10%ずつ増えて10/30に 100%になります。 良い方法があったらご教示下さい。

  • excel2000 vba 罫線の描写

    下記相談内容で、うまくできずに相談させて頂きました。記述を教えて頂けると助かります。 【前提条件】 開始時間(C列)、終了時間(D列)に、時間を入力します。 時間は0時~23:45まで、15分刻みで選べるように入力規則が設定されています。 E列~CV列までは、0:00~23:45まで15分刻みで時間タイトルがあります。 【相談内容】 開始時間と入力時間を選ぶと、写真のように罫線が描写されるようにしたいです。 但し、No5のように、開始時間と終了時間が逆転されている場合は、エラーメッセージを出して、罫線が描写されないようにしたいです。 また、開始時間か終了時間、どちらかのセルをクリヤすると、罫線が自動で消えるようにしたいです。 教えていただけると幸いです。よろしくお願いいたします。

  • エクセルVBAで作業進捗表を作成したいと考えてます。

    エクセルVBAで作業進捗表を作成したいと考えてます。 C3の作業NO欄に任意の作業NO(桁数指定無)を入力するとA3にその時刻(開始時間)が自動入力されD3の状態欄に状態(プルダウンで終了が選択できる)を入力するとB3にその時刻(終了時間)が自動入力される。 この作業開始時間と終了時間の自動入力を3行目から100行目までを対象とするプログラムをりたいのですが、分かりません。 参考までに時間の表示形式は"h:mm"です。 またPCの使用環境はOSはXPでエクセル2003使用です。 ご存知の方がいましたらよろしくお願いします。

  • エクセル IF関数について

    エクセル IF関数について 画像のような表があり、進捗の列へ進捗率を入力することで ステータスの列へ”着手中”等の表示をさせたいです。 個々の式は解りますが、組み合わせ方がわかりません。 ご教授をお願いします。 条件 未着手 開始日>本日 かつ 進捗=0% 着手遅 開始日<本日 かつ 進捗=0% 着手中 進捗=1%以上 完了遅 終了日<本日 かつ 進捗=1%以上 完了 進捗100%

  • Excel2003で勤怠スケジュールを作りたい。

    Excel2003で勤怠スケジュールを作りたい。 知恵をお貸しくださいませ。 添付画像のような感じのアルバイトスケジュールを作ろうとしています。 「入」、「出」を入力すると緑色に色が着き、グラフのようになり、 最下段に労働人数が表示される一覧表です。 30分刻みで、Aさんを例にとると8:30~10:30までシフトに入ってもらいます。 すると、8:30のセルから10:00までのセルに色が着くようにします。 別にD2~L2の欄の表示は、8:00でなく8時、8時半でも構いません。 画像を添付する都合上12:00まで書いていますが実際は20:00まであります。 色は条件付き書式で着けるのだとは思いますが・・・ お助けください。。。

  • 1時間単位のスケジュール表テンプレート

    1時間単位の月間スケジュール表が簡単に作れるツールはありませんか? 用事名と開始時刻、終了時刻の表を入れるとスケジュール表に自動的に期間が棒グラフとか矢印とか出てくれると最高です。

  • Excelでスケジュール表を作りたい。

    Excel2013で、セルに時刻を入力すると、横にある時刻の下に自動的に色付けがされるワークシートを作りたいのですが、どのようにしてよいか全くわかりません・・。 仕様としては、たとえば面談で一コマ単位15分刻みで行われるとします。 開始時刻と終了時刻を入力するだけで、時刻表示の下の区間に色が現れるようにしたいのです。エクセルの基本機能だけで実現したいです。 どなたか詳しい方、教えて頂きませんでしょうか?

専門家に質問してみよう