根据另一个单元格的开头替换特定的单元格值...

时间:2018-12-20 03:59:45

标签: excel vba excel-vba

我已经搜索并找到了该场景各个部分的多个答案 但我似乎无法将所有内容整合在一起。

我得到的电子表格的姓,名列在A列中,然后在S列中是分配给该原始个人的人的名字。我需要在S列中搜索两个特定名称,然后根据A列中的姓氏开头,将S列中的条目更改为其他名称。

Before

因此,在上面的示例中,如果条目为Bert,则在S列中检查列A,并且该值是否以A-K开头,将Grover替换为Bert,如果该值以L-Z开头,则替换为Elmo。 并且对于S列,根据A-K = Elmo和L-Z = Grover查找并替换Ernie。 将其他条目保留在S列中。

最后,如果在S列中的值为Grover,则将T列中其旁边的单元格更改为Example1 如果是Elmo,则将T列中in旁边的单元格更改为Example2 否则,不想更改T列中的任何内容

After (突出显示只是为了显示更改,实际上并不需要)

我对此很陌生,实际上是属于别人创造的东西。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

由于您需要更改S列中的值,因此需要一个宏。 像这样吗?

Option Explicit
Sub Example()


Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range, cell As Range
Dim str As String
Dim LastRow As Long

Set wb = ThisWorkbook
Set ws = wb.Sheets("Blad1")

LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, 1))

For Each cell In rng
    If Asc(Left(cell.Value, 1)) >= 65 And Asc(Left(cell.Value, 1)) < 76 Then
        str = "Grover"
    ElseIf Asc(Left(cell.Value, 1)) >= 76 And Asc(Left(cell.Value, 1)) < 91 Then
        str = "Elmo"
    End If

    If ws.Cells(cell.Row, 19).Value = "Bert" Then
        ws.Cells(cell.Row, 19).Value = str
    End If
    If ws.Cells(cell.Row, 19).Value = "Grover" Then
        ws.Cells(cell.Row, 20).Value = "Example1"
    ElseIf ws.Cells(cell.Row, 19).Value = "Elmo" Then
        ws.Cells(cell.Row, 20).Value = "Example2"
    End If

Next cell


End Sub

答案 1 :(得分:0)

不要为此使用VBA,您可以使用公式轻松完成此操作,就像这样:

=IF(LEFT(A1;1)="a";"Yes";"No")

此公式验证单元格A1是否以一个小写字母"a"开头(1工作表函数中的数字LEFT()表示要采用的字符数)。如果是,则放入"Yes",否则放入"No"
将这样的公式拖到整个列S上可能会解决您的问题。