添加+;通过excel公式在一个单元格中输入1到多个值
我有一个excel文件和数据源表。为了能够在下一步解析数据,我需要为每个值添加1,并将其放入新的工作表中。问题是,每个单元格有多个值,每个值用逗号分隔,这个数字不是静态的。遗憾的是,在稍后添加+1不是一个选项,因此我需要在excel中执行此操作添加+;通过excel公式在一个单元格中输入1到多个值,excel,excel-formula,Excel,Excel Formula,我有一个excel文件和数据源表。为了能够在下一步解析数据,我需要为每个值添加1,并将其放入新的工作表中。问题是,每个单元格有多个值,每个值用逗号分隔,这个数字不是静态的。遗憾的是,在稍后添加+1不是一个选项,因此我需要在excel中执行此操作 Source sheet Prepared data sheet | MyValues | | MyValues + 1 | |------------| |------
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)
- 拖下来
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
更改为另一个数字。以下是基于帮助器列的解决方案。我假设数据从cellA2
和cellB2
中的连接公式开始。我考虑了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