
VBA初心者です。
前にこちらの質問にあったマクロで実行してみたのですが、1時間毎でしか矢印が作成されませんでした。
分単位で矢印の長さが変わるようにするにはどのようにしたら良いのでしょうか?
Sub ガントチャート描画2()
Dim c As Range
Dim org As Range
Dim dst As Range
For Each c In Range("D8:D20")
If c.Value <> "" Then
Call MyFind(c.Text, org)
Call MyFind(c.Offset(0, 1).Text, dst)
With ActiveSheet.Shapes.AddLine(org.Left + 0, _
c.Top + 7, dst.Left + 0, c.Top + 7).Line
.EndArrowheadStyle = msoArrowheadTriangle
.ForeColor.RGB = RGB(0, 0, 128)
.Weight = 3
End With
End If
Next
End Sub
Private Sub MyFind(ByVal src As String, ByRef rng As Range)
Dim r As Range
Set rng = Nothing
For Each r In Range("F5:AJ5")
If r.Text = src Then
Set rng = r
Exit Sub
End If
Next
End Sub
よろしくお願いしますm(__)m

No.3ベストアンサー
- 回答日時:
こんにちは!
列方向に関しては1列が1時間というコトですかね。
細かい分までは判らないかもしれませんが、とりあえずやってみました。
一例です。
Sub Sample1()
Dim i As Long
Dim c As Range, r As Range
Dim myStart, myEnd
ActiveSheet.Lines.Delete
For i = 6 To Cells(Rows.Count, "D").End(xlUp).Row
myStart = Application.Match(Cells(i, "D"), Rows(5), True)
myEnd = Application.Match(Cells(i, "E"), Rows(5), True)
If IsNumeric(myStart) And IsNumeric(myEnd) Then '//←念のため//
Set c = Cells(i, myStart)
Set r = Cells(i, myEnd)
With ActiveSheet.Shapes.AddLine(c.Left + c.Width * Minute(Cells(i, "D")) / 60, c.Top + c.Height / 2, _
r.Left + r.Width * Minute(Cells(i, "E")) / 60, r.Top + r.Height / 2).Line
.ForeColor.RGB = RGB(0, 0, 255) '//←「青」(色は好みで!)★//
.Weight = 2 '//←太さは好みで!★//
.EndArrowheadStyle = msoArrowheadTriangle
End With
End If
Next i
End Sub
※ 最初に記載したように○分の部分は正確に判らないかもしれませんが、
感じとしては「このあたり!」と判別できると思います。m(_ _)m
No.2
- 回答日時:
こんにちは
ご提示のコードがどのような方法をとっているか理解なさっているのかわかりませんが、
「指定時刻と5行目に記載の時間を比較して一致しているものを探す」方式です。
このため、D,E列に記入する時刻は、5行目に存在する時刻と一致するように入力しないとうまく動作しないという大きなデメリットがあるように思われます。
一方で、5行目の表記は連続しなくても自由に設定できるというメリットはありますが、逆に、必ず時刻表示の行(5行目)が必要となります。
この方式とは別の考え方として、スタートを「0時」として以降は「1時間/1セル」として計算するとか、他の方式もあり得ると考えられます。
>分単位で矢印の長さが変わるようにするにはどのようにしたら良いのでしょうか?
計算を分単位に応じて行うようにすれば良いですが、上記のような条件群のうち何を実際の前提条件とするかによっても、コードは変わってくるものと考えられます。
いずれにしろ、考え方としてはどの場合も同様で、「1時間/1セル」という前提で良いのならば、
与えられた時刻(シリアル値)に対して
Hour(シリアル値)
Minute(シリアル値)
でそれぞれ時刻、分が得られますので、これによりセルの位置を決定し、
セル幅×分数/60
でそのセル内でのチャートの表示長さを算出することができます。
仮に、全てのセル幅が一律であるという保証があるなら、
(時間数 + 分数/60)× 単位セル幅
で、線分の長さを直接求めることもできるでしょう。
なお、この値はシリアル値の差分から
(シリアル値-INT(シリアル値))×24×単位セル幅
で直接求めても同じ結果になるはずです。
線分の開始位置も同様の要領で求められますので、「開始位置」から「開始位置+線分長さ」の位置までラインを引けば、分単位に対応したラインを引くことができるでしょう。
No.1
- 回答日時:
回答ではありません。
提案となります。① このレイアウトではジャスト9時とかが、どこだかわかりにくいですよね?
下図のようにセル結合して2セルで1時間にされた方が良いと思いますがいかがでしょうか?
② 1分単位で表示するならば、1分1ピクセルの倍数にされた方が良いと思いますがいかがでしょうか?
1分1ピクセルの場合、下図のようにセル結合し時にはセル幅が「3.13」になります。
③ 時刻表示ですが、表示形式を「[hh]:mm」にして24時間以上も「時間:分」表示にされた方が良いと思いますがいかがでしょうか?

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba テキストボックスとリフト...
-
libreoffice calcで行を挿入し...
-
貼り付けで複数セルに貼り付けたい
-
数式を残したまま、別のセルに...
-
エクセルで指定したセルのどれ...
-
枠に収まらない文字を非表示に...
-
セル番地の入力されているセル...
-
エクセルで名前を名字と氏名に...
-
エクセルで Aならば1. Bならば2...
-
【マクロ】アクティブセルの2...
-
Excelについての質問です 並べ...
-
生化学分野 分光学 ランベル...
-
excelで日付関数の文字列変換の...
-
セルをクリック⇒そのセルに入力...
-
excelの特定のセルの隣のセル指...
-
ペイントから切取って、エクセ...
-
Excel2012の関数について
-
エクセルで、複数の参照範囲を...
-
Excel マクロについて!! 添付...
-
Excelでのコメント表示位置
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
スプレッドシートで複数のプル...
-
excelで日付関数の文字列変換の...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセルの一つのセルに複数の...
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
エクセルの書式設定の表示形式...
-
EXCEL VBA セルに既に入...
-
excelの特定のセルの隣のセル指...
-
エクセルのセルの枠を超えて文...
-
Excelでのコメント表示位置
-
エクセル オートフィルタで絞...
-
Excelで数式内の文字色を一部だ...
おすすめ情報