Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14091 / 76734 ←次へ | 前へ→

【68143】Re:チャート作成について
発言  kanabun  - 11/2/6(日) 16:47 -

引用なし
パスワード
   ▼かな さん:
こんにちは〜

>チャートの開始日付から、どんどん後ろの日付にいく度に、すこしづつ
>X軸の位置がずれていっているようです
>
>どこがいけないのか?

肝心の「日付の修正」関数が公開されていないので、
どうずれているかはわからないです。

ただ、「728日」といったら「104週」分であって、105週ではないですよね?

あと、描画範囲の 最初の日付〜最後の日付 に対応する
描画範囲の左端座標〜右端座標は 描画中変更はありませんから、
さいしょに一度だけ計算しておいて、共有変数に覚えておけば
位置の計算はもうすこし簡単になります。

'-----------------------------------------------------------
Option Explicit

Dim MINDay As Long   '描画初期日
Dim MAXDay As Long   '描画最終日
Dim MinPoint As Double '初期日に対応するPoint座標
Dim MaxPoint As Double '最終日に対応するPoint座標
Dim xCOEF As Double   '日にち→セルPoint座標 変換係数

'----------------------------------------------------
Sub 作業()
 Dim v As Variant
 Dim i As Long
 
 With Worksheets("項目")
   With .Range("A1").CurrentRegion.Resize(8)
     v = Intersect(.Cells, .Offset(1)).Value
   End With
 End With
 
 With Worksheets("チャート")
   .Activate
   'ラインを削除
   .Lines.Delete
 
   '初期設定
   MINDay = DateSerial(2011, 1, 1)
   MAXDay = DateAdd("d", 105 * 7, MINDay) '105週分
   MinPoint = .Columns(5).Left
   MaxPoint = .Columns(5 + 105).Left
   xCOEF = (MaxPoint - MinPoint) / (MAXDay - MINDay)
   
   .Range("E4").Value2 = MINDay
    
   'データのコピー
   .Range("A5").Resize(UBound(v), 4).Value = v
   For i = 1 To UBound(v)
     If Not IsEmpty(v(i, 5)) And (v(i, 6) >= v(i, 5)) Then _
       DrawBar i + 4, CLng(v(i, 5)), CLng(v(i, 6)), True
     
     If Not IsEmpty(v(i, 7)) And (v(i, 8) >= v(i, 7)) Then _
       DrawBar i + 4, CLng(v(i, 7)), CLng(v(i, 8)), False
   Next
 End With

End Sub
'----------------------------------------------------
Private Sub DrawBar(RowIndex As Long, day1 As Long, day2 As Long, _
          is予定 As Boolean)
 '描画位置用変数
 Dim X1 As Double
 Dim X2 As Double
 Dim Y1 As Double
 Dim Y2 As Double
  
 'day1に対応するxPoint を求める
 X1 = (day1 - MINDay) * xCOEF + MinPoint
 'day2に対応するxPoint を求める
 X2 = (day2 - MINDay) * xCOEF + MinPoint
 With ActiveSheet.Rows(RowIndex)
   Y1 = .Top + .Height * IIf(is予定, 1, 3) / 4
   Y2 = Y1
 End With
 With ActiveSheet.Shapes.AddLine(X1, Y1, X2, Y2)
   .Line.Weight = 5
   .Line.DashStyle = IIf(is予定, msoLineSquareDot, msoLineSolid)
 End With
End Sub

2 hits

【68136】チャート作成について かな 11/2/4(金) 15:09 質問
【68140】Re:チャート作成について 不明 11/2/4(金) 21:03 発言
【68156】Re:チャート作成について かな 11/2/7(月) 13:09 お礼
【68143】Re:チャート作成について kanabun 11/2/6(日) 16:47 発言
【68155】Re:チャート作成について かな 11/2/7(月) 13:05 お礼

14091 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free