Vba 将每列中的数字更改为每列标题的子字符串

Vba 将每列中的数字更改为每列标题的子字符串,vba,excel,excel-formula,Vba,Excel,Excel Formula,使用Excel,我试图完成以下工作: 之前和之后的样本 我需要将所有1转换为每列对应的国家名称。对于上面的示例这样的小数据集,手动操作很容易,但当我有196列x2数据集时就不那么容易了。任何建议都将不胜感激 复制工作表并清除第二张工作表中除页眉以外的所有值。将以下公式放入除第二页标题行以外的每个相应单元格中 =IF(INDIRECT(ADDRESS(ROW(),COLUMN(),1,1,"Sheet1"),TRUE)=1, MID(INDIRECT(ADDRESS(1,COLUMN()

使用Excel,我试图完成以下工作:

之前和之后的样本


我需要将所有1转换为每列对应的国家名称。对于上面的示例这样的小数据集,手动操作很容易,但当我有196列x2数据集时就不那么容易了。任何建议都将不胜感激

复制工作表并清除第二张工作表中除页眉以外的所有值。将以下公式放入除第二页标题行以外的每个相应单元格中

=IF(INDIRECT(ADDRESS(ROW(),COLUMN(),1,1,"Sheet1"),TRUE)=1,
    MID(INDIRECT(ADDRESS(1,COLUMN())),
        FIND("[",INDIRECT(ADDRESS(1,COLUMN())))+1,
        FIND("]",INDIRECT(ADDRESS(1,COLUMN())))-
            FIND("[",INDIRECT(ADDRESS(1,COLUMN())))-1),"")
然后可以复制第二张图纸的相应单元格。将过去的值放入第一页。你完了


{您需要从公式中删除回车符。此外,您可能需要删除第二页以隐藏魔术。:-}

如果您愿意使用vba而不是公式,我认为这将对您有效。它在
“A:F”
中查找非空单元格,并在
[…]
中获取这些单元格的名称

Sub AdjustName()

    Dim cell As Range
    For Each cell In Range("A2:F" & LastRowInRange_Find(Range("A:F")))
        If Len(cell.Value2) > 0 Then
            With Cells(1, cell.Column)
                cell.Value2 = Mid(.Value2, InStr(.Value2, "[") + 1, Len(.Value2) - 1 - InStr(.Value2, "["))
            End With
        End If
    Next cell

End Sub


Function LastRowInRange_Find(ByVal rng As Range) As Long

    'searches range from bottom up looking for "*" (anything)
    Dim rngFind As Range
    Set rngFind = rng.Find( _
                            What:="*", _
                            After:=Cells(rng.row, rng.Column), _
                            LookAt:=xlWhole, _
                            LookIn:=xlValues, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious)

    If Not rngFind Is Nothing Then
        LastRowInRange_Find = rngFind.row
    Else
        LastRowInRange_Find = rng.row
    End If

End Function

如果你想把它放在适当的位置,那么公式就不能做到。尝试使用此选项和循环查看列标题以查找国家/地区名称,然后您可以使用已识别的国家/地区名称查找/替换1。“如果您想将其放置到位,则公式将无法执行此操作”@Scott Craner Right。公式不能在适当的地方实现。但是自定义数字格式可以@很明显,我对自定义格式感兴趣,该格式可以满足选项的要求wants@Scott在单独的单元格中输入1 0 R-1创建自定义数字格式。在类型字段中,输入“Horse”;“理查德”;“驴子”;“打孔”点击并返回工作表观察结果。另外,它们仍然是数字,所以马+理查德=驴。您还可以使用[>=6]“Sallie”之类的条件。遗憾的是,Sallie说,这种方法将输出限制为4个选项,但您可以使用自定义格式添加更多选项。只需使用新的自定义数字格式,而不是传统的颜色更改。