通过excel公式在一个单元格中的多个值上添加+1

时间:2019-05-27 07:55:49

标签: excel excel-formula

我有一个带有数据源表的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           |

3 个答案:

答案 0 :(得分: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版或更高版本。

答案 1 :(得分:0)

我尝试创建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

结果:

enter image description here

答案 2 :(得分:0)

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

enter image description here

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更改为另一个数字。