如果单元格包含特定文本,则将其划分为行

时间:2016-02-04 13:16:10

标签: excel excel-vba excel-formula vba

我想看看范围“A2:A500”是否包含文本“US”,如果是,我想在该特定行中划分单元格C和B.因此,例如,如果Cell A5包含US,那么只应划分B5 / C5。这可能吗?

我的公式

=IF(A2:A500="US*"; "$B2/$C500";"")

3 个答案:

答案 0 :(得分:0)

是的,这是可能的,只有一个假设(1)只有一个“US”实例,如果有的话。从技术上讲,如果有多个单元格带有“US”,则可以完成,但是在这种情况下你不想清楚你想做什么(将这些B行的总和除以那些C行的总和?)< / p>

首先,我们将使用MATCH函数来确定A列中是否存在“US”的实例:

=MATCH("US*",A:A,0)

然后,我们将该公式嵌套在INDEX公式中,以从B列和B列中提取值。 C,来自我们从MATCH函数确定的行。

=INDEX(B:B,MATCH("US*",A:A,0))/INDEX(C:C,MATCH("US*",A:A,0))

最后,我们将整个公式嵌套在IFERROR函数中。如果由于任何原因出现错误,这将允许我们显示不同的值:

=IFERROR(INDEX(B:B,MATCH("US*",A:A,0))/INDEX(C:C,MATCH("US*",A:A,0)),"")

注意 - 例如,如果美国匹配,这也会显示错误,但列C中该行的值为0 - 因为它会创建除零错误。如果你想看到可能存在除以0的错误,你需要重构你的公式,使它首先检查A列中的匹配,然后计算除法,如下所示:

=IF(ISERROR(MATCH("US*",A:A,0)),"",INDEX(B:B,MATCH("US*",A:A,0))/INDEX(C:C,MATCH("US",A:A,0)))

答案 1 :(得分:0)

我看到非常简单,只需使用单元格的前两个字符来测试是否是US,无论字符串使用LEFT公式

嗯,你有这个:

+----+-------+-------+-------+
|    | Col A | Col B | Col C |
+----+-------+-------+-------+
|  1 | AG    |    26 |    17 |
|  2 | JH    |    25 |    22 |
|  3 | UY    |    16 |    24 |
|  4 | JH    |    11 |    11 |
|  5 | HY    |    28 |    14 |
|  6 | BV    |    25 |    27 |
|  7 | US    |    15 |    18 |
|  8 | HY    |    30 |    21 |
|  9 | HN    |    21 |    22 |
| 10 | UY    |    20 |    12 |
| 11 | BV    |    10 |    23 |
| 12 | TD    |    24 |    12 |
| 13 | US    |    30 |    26 |
| 14 | UY    |    24 |    19 |
| 15 | BG    |    15 |    29 |
| 16 | TF    |    30 |    23 |
| 17 | US    |    27 |    24 |
| 18 | PO    |    13 |    14 |
| 19 | US    |    20 |    14 |
| 20 | MN    |    28 |    20 |
+----+-------+-------+-------+

在单元格D1:D20内你写这个

=IF(LEFT(A1,2)="US",B1/C1,0)

这是:

如果单元格的前两个字符A#(来自A列的单元格,任意数字)等于"US" (IF(LEFT(A1,2)="US")THEN将C除以C(相同的行),否则给出0

结果:

+----+-------+-------+-------+-------+
|    | Col A | Col B | Col C | Col D |
+----+-------+-------+-------+-------+
|  1 | AG    |    26 |    17 | 0.000 |
|  2 | JH    |    25 |    22 | 0.000 |
|  3 | UY    |    16 |    24 | 0.000 |
|  4 | JH    |    11 |    11 | 0.000 |
|  5 | HY    |    28 |    14 | 0.000 |
|  6 | BV    |    25 |    27 | 0.000 |
|  7 | US    |    15 |    18 | 0.833 |
|  8 | HY    |    30 |    21 | 0.000 |
|  9 | HN    |    21 |    22 | 0.000 |
| 10 | UY    |    20 |    12 | 0.000 |
| 11 | BV    |    10 |    23 | 0.000 |
| 12 | TD    |    24 |    12 | 0.000 |
| 13 | US    |    30 |    26 | 1.154 |
| 14 | UY    |    24 |    19 | 0.000 |
| 15 | BG    |    15 |    29 | 0.000 |
| 16 | TF    |    30 |    23 | 0.000 |
| 17 | US    |    27 |    24 | 1.125 |
| 18 | PO    |    13 |    14 | 0.000 |
| 19 | US    |    20 |    14 | 1.429 |
| 20 | MN    |    28 |    20 | 0.000 |
+----+-------+-------+-------+-------+

LEFT and LEFTB functionsIF Function

的信息

编辑#1

在我的示例中,只需在A列中放置两个字符,但如果列A的单元格中有任何字符串,并且任何字符串在开头都有US,则公式必须除B/C,因为LEFT函数,取字符串的前两个字符。

答案 2 :(得分:-1)

    Sub test()
    Dim i As Integer
    Dim myRange As Excel.Range
    For i = 2 To 500
    If ActiveSheet.Cells(i, 1) = "US" Then
    Set myRange = ActiveSheet.Cells(i, 2)
    myRange.Select
    Selection.UnMerge
    End If
    Next
    End Sub


EDIT - ops, it contains US

Sub test()
Dim i As Integer
Dim sToCheck As String
Dim myRange As Excel.Range
For i = 2 To 500
sToCheck = ActiveSheet.Cells(i, 1)
If InStr(1, sToCheck, "US", vbTextCompare) > 0 Then
Set myRange = ActiveSheet.Cells(i, 2)
myRange.Select
Selection.UnMerge
End If
Next
End Sub