3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

表のタイトルとデータへの書式設定を、一度のセル範囲選択で実施する

2010年10月26日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

今日は、初中級速習コース修了生程度の方を想定した、やや高度なお話。
先日、セミナー受講生から受けた質問で、こういうものがあった。

早速なのですが、先程作成したマクロに関して添削をお願いできればと存じます。
選択範囲を特定の書式に変換(1行目は灰色で塗りつぶして中央にインデント、その他は太枠で囲んで中は点線)するマクロですが、selectionを使ったマクロに関して最初の行だけ設定を変えるやり方を知らないためマクロが2つに分割されてしまっています。

Sub Range_Border_Whole()
With Selection.Borders()
.LineStyle = xlContinuous
.Weight = xlThick
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
End With
End Sub

Sub Range_Border_First()
With Selection
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 15
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlThin
End With
End Sub

つまり

1, タイトル行を選択してから Range_Border_Whole を実行し
2, データの入っている行を選択してから、 Range_Border_First を実行し

ということで、二度手間になっている。
これを、もっと効率よくできないものか、というのが質問の趣旨。

———————————————-

で、この手のことをするには、 .Resize メソッドを使うと良い。

以下は、小川の添削例。

Sub Range_Border_Whole()
Dim rgAll As Range
Dim rg1st As Range ‘タイトル行
Dim rg2nd As Range ‘データ行

Set rgAll = Selection

Set rg1st = rgAll.Resize(1)

Dim lngRowsCount As Long
lngRowsCount = rgAll.Rows.Count

Set rg2nd = rgAll.Resize(lngRowsCount – 1) ‘タイトル行から、元データ範囲の一番下から2番目の行まで

Set rg2nd = rg2nd.Offset(1) ‘タイトル行の次の行から元データ範囲の一番下まで

‘タイトル行の設定
With rg1st
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 15
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlThin
End With

‘データ行の設定
With rg2nd.Borders()
.LineStyle = xlContinuous
.Weight = xlThick
End With
With rg2nd.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With rg2nd.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
End With

End Sub

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド