人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルのVBAでお願いします。バージョンは2002です。
添付画像の通り左が処理前、右が処理後です。A4セルから下方向に検索していき同じ番号グループでA列からJ列まで、太枠罫線で囲みたいです。なお、A列の入力セル数は任意です。また、このようなシートが20くらいありますので、それぞれで使えるマクロであってほしいです。よろしくお願いします。

1298796883
●拡大する

●質問者: anglar
●カテゴリ:コンピュータ
✍キーワード:VBA エクセル グループ セル バージョン
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●50ポイント ベストアンサー

該当のセルをアクティブにして実行してください。

Sub Macro()
 Dim i As Long
 Dim lastRow As Long
 Dim stRow As Long
 
 With ActiveSheet
 lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
 stRow = 4
 For i = 4 To lastRow
 If .Cells(i, 1).Value <> .Cells(i + 1, 1).Value Then
 With .Range(.Cells(stRow, "A"), .Cells(i, "J"))
 .Borders(xlEdgeTop).Weight = xlThick
 .Borders(xlEdgeBottom).Weight = xlThick
 .Borders(xlEdgeRight).Weight = xlThick
 .Borders(xlEdgeLeft).Weight = xlThick
 End With
 stRow = i + 1
 End If
 Next i
 End With
End Sub

また、20のシートがブックの全てのシートであるなら、こちらで一括でできます。

Sub Macro()
 Dim i As Long
 Dim lastRow As Long
 Dim stRow As Long
 Dim ws As Worksheet
 
 For Each ws In Worksheets
 With ws
 lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
 stRow = 4
 For i = 4 To lastRow
 If .Cells(i, 1).Value <> .Cells(i + 1, 1).Value Then
 With .Range(.Cells(stRow, "A"), .Cells(i, "J"))
 .Borders(xlEdgeTop).Weight = xlThick
 .Borders(xlEdgeBottom).Weight = xlThick
 .Borders(xlEdgeRight).Weight = xlThick
 .Borders(xlEdgeLeft).Weight = xlThick
 End With
 stRow = i + 1
 End If
 Next i
 End With
 Next
End Sub
◎質問者からの返答

完璧にできています。感謝です。いつも素早い対応でありがたいです。なお、2つめのコードですが、対象列は現在、2番目のシートから11番目のシートのみです。どのようにしたらいいですか?実は一つ一つやろうと思っていたので、20くらいなんて適当に書いてしまいました。


2 ● SALINGER
●35ポイント

2番目から11番目なら次ぎのようになります。

7行目が2?11という意味です。


Sub Macro()
 Dim i As Long
 Dim lastRow As Long
 Dim stRow As Long
 Dim ws As Worksheet
 Dim j As Integer
 
 For j = 2 To 11
 With Worksheets(j)
 lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
 stRow = 4
 For i = 4 To lastRow
 If .Cells(i, 1).Value <> .Cells(i + 1, 1).Value Then
 With .Range(.Cells(stRow, "A"), .Cells(i, "J"))
 .Borders(xlEdgeTop).Weight = xlThick
 .Borders(xlEdgeBottom).Weight = xlThick
 .Borders(xlEdgeRight).Weight = xlThick
 .Borders(xlEdgeLeft).Weight = xlThick
 End With
 stRow = i + 1
 End If
 Next i
 End With
 Next
End Sub

任意のシート1枚を除外するとかなら、そのシートに一時的に空のA列を挿入すればいいです。

◎質問者からの返答

はい、すべてできています。素早い回答(解答)ありがとうございました。いつもすみません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ