我还没有在Excel中使用VBA十年,但想找到一个编码解决方案来改变超过20K单元格中的一堆文本。我的工作让我手动完成,但我知道必须有一个Comp Sci解决方案。
我已经对需要更改的列进行了排序。并且需要更改数千个重复项,如下面的示例所示
示例:1001.tif如果是第一个副本则更改为1001_1.tif,如果它是该值的第一个文本则保留。
我的代码根本不起作用,但应该是它的框架。
Sub Button1_Click()
Dim n As Integer
n = 1
Dim test As String
test = Cells(1, D).Text
Dim active As String
active = Cells(2, D).Text
For i = 2 To 12
active = Cells(i, D)
If active = test Then
Cells(i, D).Text = Microsoft.VisualBasic.Strings.Left(test, 4) + "_" + n + ".tif"
n = n + 1
Else
test = active
End If
Next i
Cells(1, a).Text = "Done"
End Sub
任何提示?
答案 0 :(得分:1)
使用COUNTIF():
Sub Button1_click()
Dim i As Long
Dim j As Long
For i = 2 To 12
With ActiveSheet
j = Application.WorksheetFunction.CountIf(.Range(.Cells(1, 4), .Cells(i - 1, 4)), Left(.Cells(i, 4), Len(.Cells(i, 4)) - 4) & "*")
If j > 0 Then
.Cells(i, 4).Value = Replace(.Cells(i, 4), ".tif", "_" & j & ".tif")
End If
End With
Next i
转过来:
分为:
答案 1 :(得分:0)
看看我在下面做出的改变。我认为这是你想要完成的事情。
Sub Button1_Click()
Dim n As Integer
Dim test As String, active As String
n = 1
For i = 2 To 12
active = Cells(i, D).Value2
If active = test Then
Cells(i, "D").Value2 = Left(test, 4) & "_" & n & ".tif"
n = n + 1
Else
test = active
End If
Next i
Cells(1, "A").Value2 = "Done"
End Sub
答案 2 :(得分:0)
我根据您打算做的假设对代码进行了一些更改。希望这会有所帮助。
Sub Button1_Click()
Dim n As Integer
Dim test As String
Dim active As String
n = 1
For i = 2 To 12
active = Cells(i, 4)
test = Cells(i - 1, 4)
If active = test Then
Cells(i, 4).Value = VBA.Left(test, 4) & "_" & n & ".tif"
n = n + 1
Else
test = active
n = 1
End If
Next i
Cells(1, 1).Value = "Done"
End Sub
答案 3 :(得分:0)
此代码将按照您的描述执行。只需对所有相同的文件进行排序并运行宏。我将rg添加到用于动态的计数行,但您可以根据需要进行更改。
Sub test()
Dim n As Integer
Dim rg As Integer
rg = ActiveSheet.UsedRange.Rows.Count
n = 1
Dim test As String
test = Cells(1, 4).Text
Dim active As String
For i = 2 To rg
active = Cells(i, 4)
If active = test Then
Cells(i, 4).Value = Left(test, 4) & "_" & n & ".tif"
n = n + 1
End If
Next i
MsgBox "Done"
End Sub
答案 4 :(得分:0)
如果您对vba有一些厌恶,这里的实现是与当前vba答案相同方法的单元内公式。假设D是文件名列:
= IF(COUNTIF($ D $ 2:D2,D2)> 1,MID(D2,1,FIND("。",D2)-1)&" _& #34;& COUNTIF($ D $ 2:D2,D2)&" .tif",D2)也会这样做。
一些解释: COUNTIF()公式计算从列顶部($ D $ 2)到当前行的字符串出现次数。 MID / FIND公式将出现次数和下划线放在前面的位置。在文件名中。 FIND获取。,MID的位置在点之前切断字符串,然后公式的其余部分附加数字和文件扩展名。这适用于长度超过4个字符的数字。