- ベストアンサー
VBA-セルの罫線について
エクセルシートのD4からCA30の範囲で、 セルの区切りに垂直線と水平線を設定したいと思い、 以下のところまではできました。 ----------------------------------------------------- With Range("D4:CA30") '垂直線を点線で .Borders(xlInsideVertical).Weight = xlHairline '水平線を実線で .Borders(xlInsideHorizontal).Weight = xlThin End With ----------------------------------------------------- しかし、垂直線を点線と実線の交互で表示させたいと思っています。 D4:D30→点線 E4:E30→実線 F4:F30→点線 G4:G30→実線 : というように・・・ そこで、 ------------------------------------------------------ Dim I As String With Range("D4:CA30") .Borders(xlInsideVertical).Weight = xlHairline .Borders(xlInsideHorizontal).Weight = xlThin For I = "D" To "CA" Step 2 Range("I4:I30").Borders(xlInsideVertical).Weight = xlThin Next End With ------------------------------------------------------- というプログラムを作ってみたのですが、 「型が一致しません」とエラーが出ます。 どのようにしたらよいのでしょうか? どなたか回答をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
やりたいことは理解しますが、 For-Nextのカウンターに、 文字列型の変数は使えません。 「型が一致しません」と出るのは、そのためです。 次に、そこをクリアしても、 Range("I4:I30")のIは変数になっていません。 いくらループさせても取得できる範囲は I列4行目:I列30行目のままです。 Iを変数として書き直すと、 Range(I & "4:" & I & "30")となりますが、 そうすると、Iは文字列型で宣言する必要があり、 今度はループカウンタの変数に使えなくなります。 セル範囲をループで移動させる場合は、 Cellsプロパティを使って、 Range(Cells(4, I), Cells(30, I)) のように記述した方がわかりやすいかと思います。 次に、1列だけのセル範囲には Borders(xlInsideVertical)は 存在しません。 以上を修正して、書き直すと Dim i As Long With Range("D4:CA30") .Borders(xlInsideVertical).Weight = xlHairline .Borders(xlInsideHorizontal).Weight = xlThin End With For i = 4 To 79 Step 2 Range(Cells(4, i), Cells(30, i)). _ Borders(xlEdgeRight).Weight = xlThin Next となりますが、いかがでしょう。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
私流のやり方。 Sub test01() With Range("D4:CA31") .Borders(xlInsideVertical).Weight = xlHairline .Borders(xlInsideHorizontal).Weight = xlThin End With flg = "Y" For i = 4 To Range("CA30").Column If flg = "Y" Then ActiveSheet.Range(Cells(4, i), Cells(30, i)).Borders(xlLeft).Weight = xlThin ActiveSheet.Range(Cells(4, i), Cells(30, i)).Borders(xlLeft).LineStyle = xlContinuous flg = "N" Else ActiveSheet.Range(Cells(4, i), Cells(30, i)).Borders(xlLeft).Weight = xlThin ActiveSheet.Range(Cells(4, i), Cells(30, i)).Borders(xlLeft).LineStyle = xlDot flg = "Y" End If Next End Sub
お礼
回答どうもありがとうございます。 このようにフラグを立ててする考え方もあるのですね。 また、一つ勉強になりました。 本当にありがとうございました。
お礼
回答どうもありがとうございます。 Cellsプロパティを使って、 Cells(4, I)、Cells(30, I)と表記することまではできていたのですが、 Range(Cells(4, I), Cells(30, I))と記述できることに気がつきませんでした。 私の間違いを詳しく説明していただき、本当に勉強になりました。 どうもありがとうございました。