Sam在工作表中有大量地址。在这些地址中,他需要确保所有罗盘方向(NE,SE,NW和SW)

都是大写的。如果Sam可以弄清楚如何更改仅出现在单元格末尾且带有大写字母的任何小写(或大小写混合)方向,将非常有帮助。他不能只搜索后跟“ ne”的空格,因为那样会将Newton更改为NEwton,因此他想知道如何确保仅当字母出现在单元格末尾时才进行替换。

使用Excel中的“查找和替换”工具无法完成此任务。这意味着您需要使用公式或宏来执行任务。可以使用公式来确保单元格的最后两个字符为大写:

=LEFT(A1,LEN(A1)-2) & UPPER(RIGHT(A1,2))

然而,这种公式的问题在于它是非歧视性的。只要使用的任何单元格的最后两个字符都具有罗盘方向,就没有问题。但是,如果某些单元格没有指南针方向,那么您很快就会遇到问题。在这种情况下,您实际上需要让公式检查最后一个字符:

=IF(RIGHT(A1,3)=" ne", LEFT(A1,LEN(A1)-2) & "NE", IF(RIGHT(A1,3)=" se", LEFT(A1,LEN(A1)-2) & "SE", IF(RIGHT(A1,3)=" nw", LEFT(A1,LEN(A1)-2) & "NW", IF(RIGHT(A1,3)=" sw", LEFT(A1,LEN(A1)-2) & "SW", A1))))

此公式将检查最后三个字符,以查看是否有空格后跟ne,se,nw或sw。如果是这种情况,那么后两个字符将变为大写。如果采用不同的方法,则可以缩短公式:

=IF(OR(RIGHT(A1,3)=" ne", RIGHT(A1,3)=" se", RIGHT(A1,3)=" nw", RIGHT(A1,3)=" sw"), LEFT(A1,LEN(A1)-2) & UPPER(RIGHT(A1,2)), A1)

您可以通过在公式中使用罗盘方向数组来进一步缩短它:

=IF(OR(RIGHT(A1,3)={" ne"," se"," sw"," nw"}), LEFT(A1,LEN(A1)-2) & UPPER(RIGHT(A1,2)), A1)

如果您不想使用公式,则可以轻松地创建一个宏来为您执行检查和转换:

Sub CapDirections()

For Each RCell In Selection         CText = UCase(Right(RCell.Value, 3))

If CText = " NE" Or CText = " SE" _           Or CText = " SW" Or CText = " NW" Then             RCell.Value = Left(RCell.Value, _               Len(RCell.Value) - 3) + CText         End If     Next End Sub

要使用宏,只需选择包含地址的单元格,然后运行它。它检查看四个罗盘点之一是否在单元格值的末尾,如果是,则确保罗盘方向为大写。

您应该注意,这些解决方案基于您的地址中只有四个可能的指南针方向。如果您的地址具有更广泛的指南针方向(例如N或SSE),那么您肯定要使用基于宏的解决方案,因为公式的检查很快就会变得非常复杂。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9746)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: