Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
添加+;通过excel公式在一个单元格中输入1到多个值_Excel_Excel Formula - Fatal编程技术网

添加+;通过excel公式在一个单元格中输入1到多个值

添加+;通过excel公式在一个单元格中输入1到多个值,excel,excel-formula,Excel,Excel Formula,我有一个excel文件和数据源表。为了能够在下一步解析数据,我需要为每个值添加1,并将其放入新的工作表中。问题是,每个单元格有多个值,每个值用逗号分隔,这个数字不是静态的。遗憾的是,在稍后添加+1不是一个选项,因此我需要在excel中执行此操作 Source sheet Prepared data sheet | MyValues | | MyValues + 1 | |------------| |------

我有一个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代码(我知道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
结果:


这里有一种方法(假设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
更改为另一个数字。

以下是基于帮助器列的解决方案。我假设数据从cell
A2
和cell
B2
中的连接公式开始。我考虑了15个最大值的情况

在单元格C2中,应使用以下公式:

=IFERROR((修剪(中间(替换(“,”&$A2,”,报告(“,99)),列($A$1:A1)*99,99))/1)+1“”

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

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

=替换(修剪(连接(C2,”,D2,“,E2,”,F2,“,G2,”,H2,“,I2,”,J2,“,K2,”,L2,”,M2,“,N2,”,O2,“,P2,”,Q2)),,,,“,”

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


如果要通过本机公式执行此操作,则需要帮助器列。但通过基于VBA的UDF可以实现。@shrivallabha.redij感谢您的评论。由于我必须这样做,我可能会使用helper列,那么每个单元格的最大逗号数(近似值)是多少?@p._phidot_uu约为1-15