2

Excelシートの一番上の行の形式を、選択した各列の選択したセルに複製したいと思います。

  • 宛先セルにはデータと別の条件付き書式数式が既に含まれているため、条件付き書式または数式を使用できません。
  • 列全体がグループ化されます。時間の経過とともに、グループ化レベルを変更し、シート全体を再フォーマットしたくない場合があります...一番上の行の背景色には、次の式を使用して条件付きフォーマットが適用されます。

    Function OutlineLev(inp As Integer) As Integer
    OutlineLev = Columns(inp).OutlineLevel
    End Function
    

したがって、この例では、行1のグループレベル1のセルの背景はオレンジ、レベル2は青、L3は緑です。(条件付きフォーマットルール =OutlineLev(CELL("col",D1))=3

  • 行2(黄色のセル)にはコンテンツがないことがわかります。もともと私は、一番上の行の形式を各列内の他の行にコピーするために、そのセルに数式を入れると思っていました...

本質的に。どういうわけか一番上の行の背景をコピーするマクロ/関数/数式を探しています(例ではセルD1など)。列の残りの部分まで(範囲(例ではD3:D9))。

ここに画像の説明を入力してください

4

2 に答える 2

2

列全体の形式を設定すると、ファイルサイズが小さくなります。列全体のフォーマットを設定してから、行#2のフォーマットを条件付きフォーマットルールでオーバーライドする方が良い方法のようです。このようにして、VBAを完全に回避でき、書式設定ルールが列全体またはシート全体に適用されます。これが最適です。

シート全体を選択し、数式を使用する条件付き書式ルールを作成し、=row()=2をに設定fillblackます。

次に、列全体を選択して、必要な列全体の書式設定を適用できます。条件式が最後に適用されるため、黒い行#2が残ります。

列全体に背景のみを設定する場合は、それを設定し、行#1のセルのみのフォントの色を変更します...

セルの書式を設定してマクロを実行するか、列の設定を設定して一番上のセルのフォントの色を変更する必要があるため、最終的には同じ量の作業になります...

参考までに-行#2の黒いバーを(シート全体の幅ではなく)使用する列の幅だけ延長する場合は、シート全体を選択する前にセルA1を選択=and(row()=2,a$1<>"")し、条件式の式を使用します。

于 2012-09-13T15:26:49.353 に答える
2

このコードを追加すると

Sub ApplyFormatting()
    CopyFormat Range("A3:A10"), Range("A1")
    CopyFormat Range("B3:B10"), Range("B1")
    CopyFormat Range("C3:C10"), Range("C1")
    CopyFormat Range("D3:D10"), Range("D1")
End Sub

Sub CopyFormat(dest As Range, copyfrom As Range)
    dest.Interior.Color = copyfrom.Interior.Color
End Sub

ワークシートのコード領域に、ほぼ必要なことを実行するシンプルなツールがあります。唯一のことは、ApplyFormattingどこかでサブルーチンを呼び出さなければならないということです。たとえば、最初の行の色が同じワークシートのどこかのセルの値に依存している場合は、そのシートのWorksheet_Changeイベントを使用できます。

Private Sub Worksheet_Change(ByVal Target As Range)
    ApplyFormatting
End Sub

このイベントは、セルのが変更された場合にのみ、一部のセルの背景色の変更によって直接トリガーされるわけではないことに注意してください。あなたの場合はそれで十分かもしれませんが、最初の行が正確にどのようにフォーマットされているかを教えてくれなかったので、私は推測することしかできません。

編集:あなたのコメントに:範囲の指定をハードコーディングする必要はありません。上記はフォーマットをコピーする方法を示すための単なる例です。

これをシート全体に適用するソリューションは、次のようになります。

Sub ApplyFormatting()
    Dim maxRow As Long, maxCol As Long, col As Long
    maxRow = Cells.SpecialCells(xlCellTypeLastCell).Row
    maxCol = Cells.SpecialCells(xlCellTypeLastCell).Column
    For col = 1 To maxCol
        CopyFormat Range(Cells(3, col), Cells(maxRow, col)), Cells(1, col)
    Next
End Sub

これを実際のシートの行/列に制限/適合させる必要があるかもしれませんが、一般的な考え方を理解していただければ幸いです。

于 2012-09-13T19:29:45.797 に答える