スプレッドシートには、A列でフィルタリングできるデータがあります。各行の最初の行だけが目的の形式です。一旦濾過フィルタリングされた範囲内の書式のみを貼り付けます。
、Iは範囲(のみ可視細胞)の残りの部分に貼り付けるために、第1行からフォーマットをコピーする必要があります。
マクロを実行した後、最終的な結果は次のようになります。
私がこだわっていると私はフィットネット上で何かを見つけることができません。誰でも助けることができますか?
Sub Repair()
Dim i As Integer
Dim FirstRow As Long, LastRow As Long
Dim Rang1 As Range, Rang2 As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ActiveSheet
.Cells.EntireColumn.Hidden = False 'Show all
.AutoFilterMode = False 'Filter off
.Columns("A:A").Select
Selection.AutoFilter 'Filter column A
End With
'Row 1 is header
'Filter type "P":
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:="P", Operator:=xlFilterValues
'Create Range from filtered data
Set Rang1 = Range("A2",
Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)
FirstRow = Rang1.Row 'First row of filtered data
LastRow = LastFilteredRow 'Last row of filtered data
'Change values and formats:
Range("B" & FirstRow & ":D" & LastRow & ",H" & FirstRow & ":H" & LastRow & ",J" & FirstRow & ":K" & LastRow).Select
Selection.FillDown
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Function LastFilteredRow() As Long
Dim Rng As Range
Dim x As Variant
Dim LastAddress As String
On Error GoTo NoFilterOnSheet
With ActiveSheet.AutoFilter.Range
Set Rng = .Resize(.Rows.Count - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible)
x = Split(Replace(Rng.Address, ",", ":"), ":")
LastAddress = x(UBound(x))
LastFilteredRow = Range(LastAddress).Row
End With
NoFilterOnSheet:
End Function
(HTTPS [依頼方法】読み、[ツアー](https://stackoverflow.com/tour)をつけてください://スタックoverflow.com/help/how-to-ask)と[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)を参照してください。投稿を編集します。 – danieltakeshi
投稿が編集されました。私の質問を明確にするために画像の最大許容数を追加しました。 –
問題を小さなミニ問題に分割して、完全なコードをコーディングする必要があります。したがって、オートフィルター、コピー/ペーストフォーマット( 'Paste:= xlPasteFormats')などを探してください。 – danieltakeshi