Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 仅当名称以字符串开头时才删除特定字符串_String_Excel_Excel Formula_Vba - Fatal编程技术网

String 仅当名称以字符串开头时才删除特定字符串

String 仅当名称以字符串开头时才删除特定字符串,string,excel,excel-formula,vba,String,Excel,Excel Formula,Vba,我有包含全名的单元格值 我想从整个Excel工作表中替换/删除以下字符: Al Al- EL El- 但事实是,我希望只有当单词以该字符开头时,它们才会被替换。例如: Alorfze-(删除“al”) arALfzi-(不要删除“al”) 易卜拉欣·埃尔克托布(删除“El-”) 此外,仅当匹配的单词超过4个字符时,才会替换此字符。您希望删除以“al”、“el”、“al-”或“el-”开头的单词中的前两个字母,并且这些单词必须大于4个字符 我假设您在a列下有一个名称列表,其中有许多行作为观察值(

我有包含全名的单元格值

我想从整个Excel工作表中替换/删除以下字符:

Al
Al-
EL
El-
但事实是,我希望只有当单词以该字符开头时,它们才会被替换。例如:

Alorfze-(删除“al”) arALfzi-(不要删除“al”) 易卜拉欣·埃尔克托布(删除“El-”)


此外,仅当匹配的单词超过4个字符时,才会替换此字符。

您希望删除以“al”、“el”、“al-”或“el-”开头的单词中的前两个字母,并且这些单词必须大于4个字符

我假设您在a列下有一个名称列表,其中有许多行作为观察值(A1、A2、A3等)

此示例适用于单元格A2。然后,只需将公式拖动到其他单元格:

将名称转换为小写。输入B2:

=LOWER(A2)&" "
如果名字(单词)不止一个,则获取它的名字(单词)。C2:

=TRIM(LEFT(B2,FIND(" ",B2)))
第一个单词中的字符数。D2:

=LEN(C2)
第一个单词的前两个字母。E2:

=IF(D2>4,(LEFT(C2,2)),"")
产出1。F2:

=SUBSTITUTE(IF(E2="al",SUBSTITUTE(C2,"al","",1),IF(E2="el",SUBSTITUTE(C2,"el","",1),C2)),"-","")
检索第二个单词/名称。G2:

=TRIM(MID(B2,FIND(" ",B2),100))
第二个单词中的字符数。H2:

=LEN(G2)
第二个单词的前两个字母。I2:

=IF(H2>4,(LEFT(G2,2)),"")
产出2。J2:

=SUBSTITUTE(IF(I2="al",SUBSTITUTE(G2,"al","",1),IF(I2="el",SUBSTITUTE(G2,"el","",1),G2)),"-","")
最终产品(修剪后的完整名称列表)。K2

以下是8个单词的示例及其派生公式输出


要删除以“al”、“el”、“al-”或“el-”开头的单词中的前两个字母,这些单词必须大于4个字符

我假设您在a列下有一个名称列表,其中有许多行作为观察值(A1、A2、A3等)

此示例适用于单元格A2。然后,只需将公式拖动到其他单元格:

将名称转换为小写。输入B2:

=LOWER(A2)&" "
如果名字(单词)不止一个,则获取它的名字(单词)。C2:

=TRIM(LEFT(B2,FIND(" ",B2)))
第一个单词中的字符数。D2:

=LEN(C2)
第一个单词的前两个字母。E2:

=IF(D2>4,(LEFT(C2,2)),"")
产出1。F2:

=SUBSTITUTE(IF(E2="al",SUBSTITUTE(C2,"al","",1),IF(E2="el",SUBSTITUTE(C2,"el","",1),C2)),"-","")
检索第二个单词/名称。G2:

=TRIM(MID(B2,FIND(" ",B2),100))
第二个单词中的字符数。H2:

=LEN(G2)
第二个单词的前两个字母。I2:

=IF(H2>4,(LEFT(G2,2)),"")
产出2。J2:

=SUBSTITUTE(IF(I2="al",SUBSTITUTE(G2,"al","",1),IF(I2="el",SUBSTITUTE(G2,"el","",1),G2)),"-","")
最终产品(修剪后的完整名称列表)。K2

以下是8个单词的示例及其派生公式输出

那么:

Sub dural()
    s = "Al-"
    t = "Al"
    u = "EL"
    For Each r In ActiveSheet.UsedRange
        If Len(r.Text) > 4 Then
            If Left(r.Text, 3) = s Then
                r.Value = Mid(r.Text, 4, 9999)
                GoTo skipit
            End If
            If Left(r.Text, 2) = t Or Left(r.Text, 2) = u Then
                r.Value = Mid(r.Text, 3, 9999)
            End If
        End If
skipit:
    Next
End Sub
那么:

Sub dural()
    s = "Al-"
    t = "Al"
    u = "EL"
    For Each r In ActiveSheet.UsedRange
        If Len(r.Text) > 4 Then
            If Left(r.Text, 3) = s Then
                r.Value = Mid(r.Text, 4, 9999)
                GoTo skipit
            End If
            If Left(r.Text, 2) = t Or Left(r.Text, 2) = u Then
                r.Value = Mid(r.Text, 3, 9999)
            End If
        End If
skipit:
    Next
End Sub

替换工作簿所有单元格中的文本意味着使用VBA代码。将以下代码放入模块中(使用Alt-F11打开VBA编辑器,然后插入-->模块以添加模块,然后复制/粘贴以下文本;返回工作表,选择“宏”,运行
replaceStuff
,并观看魔术。需要注意的几点:

  • 使用
    选项Explicit
    :始终是一个好主意,防止打字错误等
  • 选项比较文本
    :表示“al”=“al”-换句话说,从比较中删除大小写敏感度(通常是您想要的)
  • 要检查的字符串数组是一个变量:可以轻松更改要编辑的内容
  • 通过在宏的开头设置
    Application.screenUpdate=False
    ,并在结尾设置
    True
    ,可以加快执行速度,并在执行过程中保存电子表格的一些闪烁
  • 只使用两个参数的
    Mid()
    函数意味着“直到字符串结束”——比使用“大数字”或类似
    len(c.Text)-l的函数更短、更健壮
  • 编辑修改以替换搜索字符串,即使搜索字符串出现在单词的开头,但不是单元格的开头

    Option Explicit
    Option Compare Text
    
    Sub replaceStuff()
    Dim getRidOf
    getRidOf = Array("AL-", "AL", "EL-", "EL")
    Dim c As Range
    Dim s, sp
    Dim f As Integer
    Dim flag As Boolean
    
    Application.ScreenUpdating = False
    For Each c In ActiveSheet.UsedRange.Cells
      c.Select
      If Len(c.Text) >= 4 Then
        For Each s In getRidOf
          flag = False
          f = InStr(1, c.Text, s)
          If f > 0 Then
            ' check that it's part of a four letter word or more
            sp = InStr(f, c.Text, " ")
            If sp > f + 3 Or (sp = 0 And f <= Len(c.Text) - 3) Then
              If f = 1 Then
                flag = True
              Else
                If Mid(c.Text, f - 1, 1) = " " Then ' it is at the start of a word
                  flag = True
                End If ' at start of word
              End If ' f = 1
            End If ' four letter word
          End If ' f > 0
          If flag Then
            c.Value = Replace(c.Value, s, "")
            Exit For
          End If
        Next s
      End If
    Next c
    
    Application.ScreenUpdating = True
    
    End Sub
    
    注意-我添加了字符串“EL-”作为另一个搜索字符串,因此
    EL-ketoob
    将变成
    ketoob
    ,而不是
    -ketoob

    另请注意-事情是“按顺序”处理的。在替换第一个字符串后,现在有一个
    Exit For
    语句(这意味着:“不要与该特定单元格的
    getRidOf
    数组中的其他字符串进行比较;我们完成了,转到下一个单元格”),因此只替换第一个匹配项(而且只有一个匹配项-因此
    alfred al-hamsy
    会变成
    alfred hamsy
    ,因为
    al-
    al
    之前得到处理,然后它就停止了。如果移除
    的退出按钮(在它前面添加一个撇号
    ,将其变成注释),它将变成
    fred hamsy
    ,但
    alfred alhamsy
    将变成
    fred alhamsy
    ,因为只有第一个
    al
    被替换


    我希望您能从这里了解如何更改内容以满足您的需要。

    替换工作簿所有单元格中的文本意味着使用VBA代码。将以下代码放入模块中(使用Alt-F11打开VBA编辑器,然后插入-->模块以添加模块,然后复制/粘贴以下文本;返回工作表,选择“宏”,运行
    replaceStuff
    并观看魔术。需要注意的几点:

  • 使用
    选项Explicit
    :始终是一个好主意,防止打字错误等
  • 选项比较文本
    :表示“al”=“al”-换句话说,从比较中删除大小写敏感度(通常是您想要的)
  • 要检查的字符串数组是一个变量:可以轻松更改要编辑的内容
  • 通过在宏的开头设置
    Application.screenUpdate=False
    ,并在结尾设置
    True
    ,可以加快执行速度,并在执行过程中保存电子表格的一些闪烁
  • 只使用两个参数的
    Mid()
    函数意味着“直到字符串结束”——比使用“大数字”或类似
    len(c.Text)-l的函数更短、更健壮
  • 编辑修改以替换搜索字符串,即使搜索字符串出现在单词的开头,但不是单元格的开头

    Option Explicit
    Option Compare Text
    
    Sub replaceStuff()
    Dim getRidOf
    getRidOf = Array("AL-", "AL", "EL-", "EL")
    Dim c As Range
    Dim s, sp
    Dim f As Integer
    Dim flag As Boolean
    
    Application.ScreenUpdating = False
    For Each c In ActiveSheet.UsedRange.Cells
      c.Select
      If Len(c.Text) >= 4 Then
        For Each s In getRidOf
          flag = False
          f = InStr(1, c.Text, s)
          If f > 0 Then
            ' check that it's part of a four letter word or more
            sp = InStr(f, c.Text, " ")
            If sp > f + 3 Or (sp = 0 And f <= Len(c.Text) - 3) Then
              If f = 1 Then
                flag = True
              Else
                If Mid(c.Text, f - 1, 1) = " " Then ' it is at the start of a word
                  flag = True
                End If ' at start of word
              End If ' f = 1
            End If ' four letter word
          End If ' f > 0
          If flag Then
            c.Value = Replace(c.Value, s, "")
            Exit For
          End If
        Next s
      End If
    Next c
    
    Application.ScreenUpdating = True
    
    End Sub
    
    注-I广告