如果满足条件,则Excel替换单元格值

时间:2016-03-19 16:03:29

标签: excel

我有excel工作表,其中有很多行,如下所示:

  A        B       C(0)   D(1)   E(2)    F(3)  G(4)   H(5)  I(6)   J(7)
H'000C78:......):H'001D:H'002D:H'002D:H'002B:H'002B:H'002B:H'002B:H'002B:
H'000C80:......):H'002B:H'002B:H'002B:H'002B:H'002B:H'002B:H'002B:H'002B:

我只对价值为“H'002B”的单元格感兴趣。 要求是获取具有以下条件的值列表:

如果在任何C-J列中找到“H'002B”,那么包含“H'002B”的单元格将被转换为该列值的A + Hex。

例如:
第一行F列H'002B应为H'000C78 + H'3 = H'C7B。

我想要的列表应该具有第一个值H'C7B。

苦苦挣扎(通过对所有值使用HEX2DEC然后写入IF语句,如= IF(C1 =“43”,“A1 + 0”))。 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果要“替换”替换十六进制值,则必须实现某种VBA。这个简短的例程识别并调整从Sheet1!A1中辐射出来的单元格块中H'002B的所有出现次数。

Sub addHexColumn()
    Dim fnd As String, fndr As Range

    fnd = "H'002B"
    With Worksheets("sheet1")
        With .Cells(1, 1).CurrentRegion
            Set fndr = .Cells.Find(What:=fnd, LookIn:=xlValues, LookAt:=xlWhole)
            Do While Not fndr Is Nothing
                fndr = "H'" & Application.Dec2Hex(Application.Hex2Dec(Split(.Cells(fndr.Row, 1).Value2, Chr(39))(1)) + (fndr.Column - 3), 4)
                Set fndr = .FindNext(after:=fndr)
            Loop
        End With
    End With
End Sub

这大致相当于将以下公式应用于F1。

="H'"&DEC2HEX(HEX2DEC(RIGHT(A1,4))+COLUMN(F1)-3, 4)

通过实现Worksheet_Change事件宏甚至是Workbook_SheetChange事件宏,这可能会进一步自动化,但根据工作表的其余部分正在做什么,它可能不是一个有效的支出资源。

add_column_hex_value
addHexColumn sub 之前的样本数据

add_column_hex_value_after
addHexColumn sub 之后的示例数据