「質問内容」
Excelに張り付けたデータを自動で編集してほしい。まずフォントを游ゴシックに。次に塗りつぶしなしへ変更。あと不要なセルを削除してほしいんだけど、削除してほしい列はA列の2からA列の50まで。そしたら左方向へシフトして。シフトができたらそこからさらに、A列、C列、D列、F列を削除して。整理ができたら仕上げに格子をつけてほしいんだけど、値がないセルには格子をつけないようにしてほしい。すべて張り付けた瞬間に自動でされるようにして。いちいち実行するのは面倒くさいから。よろしく!
列の削除の部分がミスってるっぽい。C列だけ削除されていない。
→
了解です!C列の削除が正しく動作していない場合、処理の順序が影響している可能性があります。列を削除する際、先に削除した列によってインデックスが変化するため、順番を修正することで対応できます。
以下のコードでは、列を削除する際に 後方の列から順に削除 するよう修正しました。
「コード」
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Set ws = Me ' 現在のシート
Set rng = ws.UsedRange
Application.EnableEvents = False ' イベント処理を一時的に無効化
' フォントを游ゴシックに変更
rng.Font.Name = "游ゴシック"
' 塗りつぶしなしへ変更
rng.Interior.ColorIndex = xlNone
' A列の2から50を削除し、左へシフト
ws.Range("A2:A50").Delete Shift:=xlToLeft
' **後方の列から削除することで、インデックスのズレを防ぐ**
ws.Columns("F").Delete
ws.Columns("D").Delete
ws.Columns("C").Delete
ws.Columns("A").Delete
' 残ったセルで値があるセルにのみ格子を付ける
For Each cell In ws.UsedRange
If Not IsEmpty(cell.Value) Then
With cell.Borders
.LineStyle = xlContinuous
End With
End If
Next cell
Application.EnableEvents = True ' イベント処理を再有効化
End Sub