【问题标题】:Adding +1 to multiple values in one cell via excel formula通过excel公式为一个单元格中的多个值添加+1
【发布时间】:2019-05-27 20:17:44
【问题描述】:

我有一个带有数据源表的 excel 文件。为了能够在下一步解析数据,我需要为每个值添加 1 并将其放入新工作表中。问题是,每个单元格有多个值,每个值用逗号分隔,而且这个数字不是静态的。遗憾的是,稍后添加 +1 不是一个选项,因此我需要在 excel 中执行此操作。

  Source sheet              Prepared data sheet

| MyValues   |             | MyValues + 1 |
|------------|             |--------------|
| 0,1,2,3    |             |  1,2,3,4     |
| 3          |   ----->    |  4           |
| 2,4,6      |             |  3,5,7       |
| 1          |             |  2           |

【问题讨论】:

  • 如果您想通过本机公式来完成,那么您将需要辅助列。但是通过基于VBA的UDF是可以实现的。
  • @shrivallabha.redij 感谢您的评论。因为我必须这样做,所以我可能会使用辅助列
  • 每个单元格的(大约)最大逗号数是多少?
  • @p._phidot_ 大约 1 - 15

标签: excel excel-formula


【解决方案1】:

这是基于帮助列的解决方案。我假设数据从单元格A2 和单元格B2 中的连接公式开始。我已经考虑了 15 个最大值的情况。

在C2单元格中,应输入以下公式:

=IFERROR((TRIM(MID(SUBSTITUTE(","&$A2,",",REPT(" ",99)),COLUMNS($A$1:A1)*99,99))/1)+1,"")

这将被复制到(直到 Q 列)和向下(直到数据的最后一行)。

然后在单元格 B2 中应用如下连接公式:

=SUBSTITUTE(TRIM(CONCATENATE(C2," ",D2," ",E2," ",F2," ",G2," ",H2," ",I2," ",J2," ",K2," ",L2," ",M2," ",N2," ",O2," ",P2," ",Q2))," ",",")

应适用于 Excel 2007 版或更高版本。

【讨论】:

    【解决方案2】:

    这是执行此操作的一种方法(假设 Excel 2016 使用 TEXTJOIN()):

    B1中的公式:

    =IFERROR(TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",LEN($A1))),(COLUMN()-2)*LEN($A1)+1,LEN($A1)))+1,"")
    
    • 向下和横向拖动(如果需要,可以是 15 列)

    G1中的公式:

    =TEXTJOIN(",",TRUE,B1:E1)
    
    • 向下拖动

    您不需要 VBA 解决方案,但在您的情况下,UDF 也可能是执行此操作的好方法,例如:

    Function AddVal(RNG As Range, VAL As Double) As String
    
    Dim ARR1() As String, ARR2() As String, X As Double
    If RNG.Cells.Count = 1 Then
        ARR = Split(RNG.Value, ",")
        For X = LBound(ARR) To UBound(ARR)
            ReDim Preserve ARR2(X)
            ARR2(X) = ARR(X) + VAL
        Next X
        If IsEmpty(ARR2) Then
            AddVal = "No hits"
        Else
            AddVal = Join(ARR2, ",")
        End If
    Else
        AddVal = "No valid range"
    End If
    
    End Function
    

    拨打=AddVal(A1;1)

    如果您想添加的不仅仅是 1,您可以将 1 更改为另一个数字。

    【讨论】:

      【解决方案3】:

      我尝试创建一个 VBA 代码(我知道 VBA 没有被标记)来完成这个任务。

      Option Explicit
      
      Sub test()
      
          Dim LastRow As Long, i As Long, Count As Long, j As Long
          Dim str As Variant, strNew As String
      
          With ThisWorkbook.Worksheets("Sheet1")
      
              LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
      
              For i = 1 To LastRow
      
                  Count = Len(.Range("A" & i).Value) - Len(Replace(.Range("A" & i).Value, ",", ""))
                  str = Split(.Range("A" & i).Value, ",")
      
                  If Count > 0 Then
      
                      For j = 0 To Count
      
                          str(j) = str(j) + 1
      
                          If .Range("B" & i).Value = "" Then
                              .Range("B" & i).Value = str(j)
                          Else
                              .Range("B" & i).Value = .Range("B" & i).Value & "," & str(j)
                          End If
      
                      Next j
      
                  Else
      
                      .Range("B" & i).Value = .Range("A" & i).Value + 1
      
                  End If
      
              Next i
      
          End With
      
      End Sub
      

      结果:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多