公式或 VBA 使用基于单元格的值进行单元格格式化,但使用其他单元格的格式

公式或 VBA 使用基于单元格的值进行单元格格式化,但使用其他单元格的格式

我在 E 列中有一组固定的值(0%、20%、40%、60%、80% 和 100%)。

如果我用上述任意值填充 E 列中的单元格,则单元格 G 应该从另一个单元格中选择格式。

例如,

if I fill 0 in E3, the cell G3 should pick formatting from H3
if I fill 20 in E3, the cell G3 should pick formatting from H3
if I fill 40 in E3, the cell G3 should pick formatting from I3
if I fill 60 in E3, the cell G3 should pick formatting from J3
if I fill 80 in E3, the cell G3 should pick formatting from K3
if I fill 100 in E3, the cell G3 should pick formatting from L3

我知道可以通过一系列条件格式来实现,但做起来有点困难。另外,想看看是否有一个简单的答案?

答案1

就像这样,下面是一个简单的 VBA 宏,用于进行格式化。它是否简单由您决定。可以将类似的东西放入 Worksheet_Change 事件子程序中。

这比条件格式稍微灵活一些,因为您可以在选择格式的列的每一行上使用不同的格式。(例如,参见屏幕截图中的 H 列)。

这是运行宏之前工作表的屏幕截图...

在此处输入图片描述

这是运行宏后的屏幕截图...

在此处输入图片描述

这是 VBA 代码...

Sub FormatTransfer()
Dim mySht As Worksheet
Dim myInRng As Range, myOutRng As Range, myFmtRng As Range
Dim myCell As Range

Set mySht = Worksheets("Sheet3")
Set myInRng = mySht.Range("E1", mySht.Range("E" & mySht.Rows.Count).End(xlUp))
Set myOutRng = myInRng.Offset(0, 2)
Set myFmtRng = mySht.Range(myInRng.Offset(0, 3), myInRng.Offset(0, 7))

For Each myCell In myInRng
    If myCell.Value < 20# Then
        myFmtRng(myCell.Row, 1).Copy
        myOutRng(myCell.Row, 1).PasteSpecial xlPasteFormats
    End If
    If myCell.Value >= 20# And myCell.Value < 40# Then
        myFmtRng(myCell.Row, 1).Copy
        myOutRng(myCell.Row, 1).PasteSpecial xlPasteFormats
    End If
    If myCell.Value >= 40# And myCell.Value < 60# Then
        myFmtRng(myCell.Row, 2).Copy
        myOutRng(myCell.Row, 1).PasteSpecial xlPasteFormats
    End If
    If myCell.Value >= 60# And myCell.Value < 80# Then
        myFmtRng(myCell.Row, 3).Copy
        myOutRng(myCell.Row, 1).PasteSpecial xlPasteFormats
    End If
    If myCell.Value >= 80# And myCell.Value <= 100# Then
         myFmtRng(myCell.Row, 4).Copy
         myOutRng(myCell.Row, 1).PasteSpecial xlPasteFormats
   End If
Next myCell

End Sub

相关内容