tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルガントチャートをVB6で作りたい
記事No12662
投稿日: 2008/07/01(Tue) 22:34
投稿者カズ
はじめまして、カズです。
いつもお世話になってます。
今回仕事で、VB6でガントチャートを独自で作るようになったのですがなかなかうまくできません。インターネットでもあまり載ってないのでかなり困っています。
VB6での作り方があるのでしたらお教え願えないでしょうか・・・
よろしくお願いします。

[ツリー表示へ]
タイトルRe: ガントチャートをVB6で作りたい
記事No12663
投稿日: 2008/07/01(Tue) 22:48
投稿者カズ
すいません説明が不足していました。
現在PicturBox内にLine文を引いてやろうとしていますが経度にかなり苦戦しています。
-----------------------------------------------------------------------------
タイトル 開始   時間     6月30日 7月1日 7月2日 7月3日
仕事      9:00      11:00   |---------------|
仕事   11:30     13:00                      |----------|

-----------------------------------------------------------------------------
上記のような感じで出力させたいです。
半端な図でわかりづらくてすいません。

[ツリー表示へ]
タイトルRe^2: ガントチャートをVB6で作りたい
記事No12664
投稿日: 2008/07/02(Wed) 06:27
投稿者花ちゃん
> すいません説明が不足していました。
> 現在PicturBox内にLine文を引いてやろうとしていますが経度にかなり苦戦しています。

ヘルプの Scale メソッドの使用例はご覧になりましたか?
ご自分でどこまでできて、どこが解らないのかを書かないと説明のしようがないかと。
私が作るなら、Excel や MSFlexGrid 等を使用しますが。

XL: Visual Basic ガント チャートを作成するモジュール
http://support.microsoft.com/kb/213447/ja

ここの[当サイト内・外の検索]から[VB6 ガントチャート]をキーワードにGoogleで
検索して見て下さい。

[ツリー表示へ]
タイトルMSFlexGrid での作成結果(差し替え分)
記事No12665
投稿日: 2008/07/02(Wed) 09:23
投稿者花ちゃん
Option Explicit
Private Sub Form_Load()
   Dim i   As Long
   Dim j   As Long
   '仮データの作成部分(CSVファイル 等を使っても OK )
   Dim KDat(3, 2) As Variant
   KDat(0, 0) = "タイトル": KDat(0, 1) = "開始日時": KDat(0, 2) = "終了日時"
   KDat(1, 0) = "工 程 1": KDat(1, 1) = "1:08": KDat(1, 2) = "2:08"
   KDat(2, 0) = "工 程 2": KDat(2, 1) = "1:18": KDat(2, 2) = "2:18"
   KDat(3, 0) = "工 程 3": KDat(3, 1) = "2:04": KDat(3, 2) = "3:04"
  
   Form1.Move 0, 0, 10400, 4000
   With MSHFlexGrid1
      'MSFlexGrid の初期設定
      .FocusRect = flexFocusNone          'フォーカスを示す四角形を描かない
      .HighLight = flexHighlightAlways    '選択されたセルを常に強調表示
      .Move 150, 150, 10000, 3000         '表示位置と大きさを設定
      .FixedRows = 1                      '固定行の数 Rowsより1以上少ない事
      .FixedCols = 0                      '固定列の数
      .Cols = 34                          '列数の設定(31日分)
      .Rows = 10                          '行数の設定(必要分)
      .RowHeightMin = 400                 '行の高さを設定
      .ColWidth(0) = 1000                 '列幅を設定
      .ColWidth(1) = 900                  '列幅を設定
      .ColWidth(2) = 900                  '列幅を設定
      For i = 0 To .Cols - 1
         .Col = i: .Row = 0
         .CellAlignment = flexAlignCenterCenter    '表示位置を中央揃えに設定
         If i > 2 Then
            .ColWidth(i) = 2250           '半角で24文字分
            '日付の表示
            .TextMatrix(0, i) = "8月" & CStr(i - 2) & "日"
         End If
      Next i
      '初期のカーソル位置
      .Col = 0: .Row = 1
      'データ部分の表示(CSVファイルから読み込んでも OK )
      For i = 0 To 3
         For j = 0 To 2
            .TextMatrix(i, j) = KDat(i, j)   'データの表示
         Next j
      Next i
   End With
  
   'グラフ部分の表示
   Call SetData
End Sub
Private Sub SetData()
   Dim i     As Long
   Dim j     As Long
   Dim SD    As Integer    '開始日
   Dim ED    As Integer    '終了日
   Dim ST    As Integer    '開始時間
   Dim ET    As Integer    '終了時間
   Dim myDat As Variant
   Dim s1    As String     '当日分
   Dim s2    As String     '翌日分
  
   With MSHFlexGrid1
      For i = 1 To 3
         myDat = Split(.TextMatrix(i, 1), ":")
         SD = myDat(0)                    '開始日の取得
         myDat = Split(.TextMatrix(i, 2), ":")
         ED = myDat(0)                    '終了日の取得
        
         myDat = Split(.TextMatrix(i, 1), ":")
         ST = myDat(1)                    'スタート時間の取得
         myDat = Split(.TextMatrix(i, 2), ":")
         ET = myDat(1)                    '終了時間の取得
        
         If SD = ED Then      '開始日と終了日が同じ場合
            '開始時間までの時間数分スペースを付加し当日内の時間分 > を表示
            s1 = String$(ST, " ") & String$(ET - ST, ">")
            .TextMatrix(i, SD) = s1
         Else
            s1 = String$(ST, " ") & String$(24 - ST, ">")
            s2 = String$(ET, ">") & String$(24 - ET, " ")
            .TextMatrix(i, SD + 2) = s1      '開始日の分
            .TextMatrix(i, ED + 2) = s2      '終了日の分
         End If
      Next i
   End With
End Sub

最近同じような質問が結構多いのでサンプルを作り直しました。
但し、汎用ではないし、叩き台的なものなので、後はご自分で工夫して下さい。
ここのサンプルの セルに直接データーを入力する(エクセルのように)No.34 と
組み合わせれば、直接データを編集する事も簡単にできます。


結果の図
http://www.hanatyan.sakura.ne.jp/samplepic/gantt.gif

MSHFlexGrid コントロールの詳しい使い方は下記をどうぞ。
http://hanatyan.sakura.ne.jp/vbhlp/MSFlexind.htm

[ツリー表示へ]
タイトルRe: MSFlexGrid での作成結果
記事No12677
投稿日: 2008/07/02(Wed) 22:07
投稿者カズ
返信が遅くなりましてすいません。

MSFlexGridのサンプルコードありがとうございます。
大変参考になります。

前回は説明不足で失礼いたしました。
前回のわからない点は主にPictureBox内ででガントチャートを作ること自体わからなかったのですごく大雑把な質問になってしまいました。
お手数おかけしました…

私が思っていたのはPictureBoxにLine文を使いガントチャートを表示させると思っていたのでMSFlexGridを使うことはまたったく考えつきませんでした。恐縮です…

すいませんもうひとつ質問なのですが…
たとえば開始時間が9:00として終わり時間が12:30や12:45分など半端な時間が入力された場合MSFlexGridでどう反映させればよろしいでしょうか?
PictureBoxの場合もこのところがすごく悩みの種でしたのでなかなか作業がすすみませんでした。ぜひご教授願います。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: MSFlexGrid での作成結果
記事No12678
投稿日: 2008/07/02(Wed) 22:11
投稿者カズ
返信が遅くなりましてすいません。

MSFlexGridのサンプルコードありがとうございます。
大変参考になります。

前回は説明不足で失礼いたしました。
前回のわからない点は主にPictureBox内ででガントチャートを作ること自体わからなかったのですごく大雑把な質問になってしまいました。
お手数おかけしました…

私が思っていたのはPictureBoxにLine文を使いガントチャートを表示させると思っていたのでMSFlexGridを使うことはまたったく考えつきませんでした。恐縮です…

すいませんもうひとつ質問なのですが…
たとえば開始時間が9:00として終わり時間が12:30や12:45分など半端な時間が入力された場合MSFlexGridでどう反映させればよろしいでしょうか?
PictureBoxの場合もこのところがすごく悩みの種でしたのでなかなか作業がすすみませんでした。ぜひご教授願います。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^2: MSFlexGrid での作成結果
記事No12679
投稿日: 2008/07/02(Wed) 23:24
投稿者花ちゃん
> たとえば開始時間が9:00として終わり時間が12:30や12:45分など半端な時間が
>入力された場合MSFlexGridでどう反映させればよろしいでしょうか?

それは、こちらが知りたい事ですよね。
何をどのように表示したいかは、貴方が決める事で私には解りません。

12:30 や 12:45 を見た目で区別できる線の長さを引く必要があるのなら、そのように
作る必要があるでしょうし、それが、5分単位なのか、15分単位なのか、時間帯も
24時間制なのか、8時間なのか、表示する日にちはどうなのか?
そもそも見た目で、12:30 や 12:45 の区別ができるようなものは、パソコンの画面上
ではどうかと思いますよ。
(15分単位で24時間を分割すれば、96分割になる、それだけで画面いっぱいになるかと)
http://www.hanatyan.sakura.ne.jp/samplepic/gant1.gif

現状は、どのようにして作成しておられるのですか?

[ツリー表示へ]
タイトルRe^3: MSFlexGrid での作成結果
記事No12680
投稿日: 2008/07/03(Thu) 01:11
投稿者カズ
お手数おかけしました…

確かに15分単位で24時間だと画面いっぱいになりますね…

現状はは24時間体制の1時間単位でグラフにデータを反映させていくように作っていきたいと思っています。

ただ、現在は開始時間から終了時間までの時間をどうグラフに反映させるのかを悩んでいるところです。

説明が下手でお手数おかけします…

[ツリー表示へ]
タイトルRe^4: MSFlexGrid での作成結果
記事No12688
投稿日: 2008/07/03(Thu) 14:21
投稿者neptune
こんにちは

> 現状はは24時間体制の1時間単位でグラフにデータを反映させていくように作っていきたいと思っています。
>
> ただ、現在は開始時間から終了時間までの時間をどうグラフに反映させるのかを悩んでいるところです。
昔、pictureboxでグラフを作った事ありますが、ガントチャートなら
・pictureboxのサイズを任意の間隔に分割する線を引く
・各「開始時間から終了時間」の線を引く(飾りたいなら適当にどうぞ)
だけの話と思いますよ?
まぁ始点、終点、間隔などの計算はしなければいけませんけど。

[ツリー表示へ]
タイトルRe^5: MSFlexGrid での作成結果
記事No12695
投稿日: 2008/07/03(Thu) 23:37
投稿者カズ
こんばんは
遅くなりましてすいません。

>まぁ始点、終点、間隔などの計算はしなければいけませんけど。

そうなんですよね… 現状開始と終了の感覚の計算のところでで苦戦しており、なかなか思い通りにつくれないんですよね…

今回ガントチャートを作るのが初めてなので、花ちゃんさんからもいろいろアドバイスをいただいておかげで少しながら作業は進んではいますが、まだ先は長そうです。

[ツリー表示へ]
タイトルRe^6: MSFlexGrid での作成結果
記事No12696
投稿日: 2008/07/03(Thu) 23:48
投稿者カズ
すいません。

補足です。
現在花チャンさんからMSFlexGridサンプルプログラムを作っていたのを参考にさせていただき、目盛りなどは完成しているのですが、現在開始から終了の間隔をどうガントチャートに反映させるかに悩んでいます。
-----------------------------------------------------------------------------------
項目 開始 終了  7月4日  7月5日  7月7日  7月8日
仕事 9:00  10:00   |--|
仕事 12:00 16:00      |---|
仕事 20:00 1:00          |-------|  ←間隔をどう反映させるかです。
-----------------------------------------------------------------------------------
雑な図すいません。
説明が不足していれば補足します。
よろしくお願いします。

[ツリー表示へ]