我有一个带有数据源表的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 |
答案 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
结果:
答案 2 :(得分:0)
这是执行此操作的一种方法(假设Excel 2016使用TEXTJOIN()
):
B1
中的公式:
=IFERROR(TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",LEN($A1))),(COLUMN()-2)*LEN($A1)+1,LEN($A1)))+1,"")
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
更改为另一个数字。