「質問内容」

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