こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAにおける罫線の色指定について

エクセルVBAの初心者です。
使用機種はWindows VistaでExcel2007です。

後に示すコードではどうして("B4:H7")までの下罫線と
("C4:H8")までの左罫線が青色にならず、黒色のまま
になるのでしょうか?("B4:H7")、("C4:H8")ともに
罫線の色は青色にしたいと思っています。

原因と対処方法をご存知の方ご教示願います。
画像も添付しておりますので、合わせてご参照ください。


Sub 日程表作成()
Set WS1 = Worksheets("sheeT1")
With WS1
.Range("B3") = "日"
.Range("B3").Select
End With

Selection.AutoFill Destination:=Range("B3:H3")
WS1.Range("B3:H3").Select
With Selection.Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

'下線を二重線に変える
Range("B3:H3").Select
Selection.Borders(xlBottom).LineStyle = xlDouble

WS1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous
WS1.Range("B3:H8").RowHeight = 35

'日程表の中に横線を入れる
WS1.Range("B4:H7").Select
Selection.Borders(xlBottom).LineStyle = xlContinuous

WS1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous

'日程表の中に縦線を入れる
WS1.Range("C4:H8").Select
Selection.Borders(xlLeft).LineStyle = xlContinuous

WS1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous

'曜日のセルを塗りつぶす
With WS1
.Range("B3:B8").Interior.ColorIndex = 38
.Range("C3:G8").Interior.ColorIndex = 19
.Range("H3:H8").Interior.ColorIndex = 19
.Range("B4").Activate
End With

End Sub

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2011-05-18 15:06:19

QNo.6746215

すぐに回答ほしいです

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

Dim as Objectですか?

変数宣言しないと、基本はいけません。
Dim は変数宣言を表します。

なおObjectは、シート、配列などの変数入れるときに使います。

setが頭にくる宣言など。
またSetした場合どこかで開放しないと、メモリー食いますが今回の質問の中に無かったので省いています。
set ws1=Noting これが解放です。
End Sub前に入れておいた方がいいでしょうね。

Dim ** as Longは整数とか決まりがあります。

これを抜かすと動かない場合があります。
VBAは結構いい加減で、変数宣言しなくても動く場合もありますが、基本は変数宣言要ります。
癖付した方がいいですよ。

投稿日時 - 2011-05-20 04:05:43

お礼

VBAの学習をはじめてまだ1週間なので
ご指摘いただいたことは今後の参考と
させていただきます。

投稿日時 - 2011-05-20 08:07:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

Option Explicit

Sub 日程表作成()
Dim ws1 As Object

Set ws1 = Worksheets("sheeT1")
With ws1
.Range("B3") = "日"
.Range("B3").Select
End With

Selection.AutoFill Destination:=Range("B3:H3")
ws1.Range("B3:H3").Select
With Selection.Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

With Selection.Borders(xlRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With

'下線を二重線に変える
Range("B3:H3").Select
Selection.Borders(xlBottom).LineStyle = xlDouble

ws1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous
ws1.Range("B3:H8").RowHeight = 35

'日程表の中に横線を入れる
ws1.Range("B4:H8").Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThick
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThick
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThick
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThick
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 5
.TintAndShade = 0
.Weight = xlThin
End With



ws1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous

'日程表の中に縦線を入れる
ws1.Range("C4:H8").Select
Selection.Borders(xlLeft).LineStyle = xlContinuous

ws1.Range("B3:H8").BorderAround Weight:=xlThick, _
ColorIndex:=5, LineStyle:=xlContinuous

'曜日のセルを塗りつぶす
With ws1
.Range("B3:B8").Interior.ColorIndex = 38
.Range("C3:G8").Interior.ColorIndex = 19
.Range("H3:H8").Interior.ColorIndex = 19
.Range("B4").Activate
End With

End Sub

投稿日時 - 2011-05-18 15:19:36

補足

早速のご回答ありがとうございます。

上記のコードをコピペして実行したら
質問文通りの表ができました。

ただ「Dim ws1 As Object」というコードについて
お尋ねしたいことがあります。

(1)このコードの意味はなんでしょうか?
(2)「Dim 」とはステートメントの一種だと聞きます。
上のSubステートメントとバッティングして、
1つの処理に対して2つの命令語が発せられ、
「Dim 」以下の内容によっては処理できないことも
あるのでしょうか?

お忙しいところたびたびの質問で、誠に恐れ入りますが
ご教示のほどよろしくお願いします。

投稿日時 - 2011-05-19 10:57:33

お礼

早速のご回答ありがとうございます。

上記のコードをコピペして実行したら
質問文通りの表ができました。

投稿日時 - 2011-05-20 08:02:48

あなたにオススメの質問