尝试在Excel中更改单元格中的文本
我已经十年没有在Excel中使用VBA了,但我想找到一种编码解决方案来更改超过20K个单元格中的一组文本。我的工作让我手动完成,但我知道必须有一个Comp-Sci解决方案 我已经对需要更改的列进行了排序。还有成千上万个重复需要修改,如下面的示例所示 示例:1001.tif如果是第一个副本,则更改为1001_1.tif;如果是该值的第一个文本,则保留该值 我下面的代码根本不起作用,但应该是它的框架尝试在Excel中更改单元格中的文本,excel,vba,Excel,Vba,我已经十年没有在Excel中使用VBA了,但我想找到一种编码解决方案来更改超过20K个单元格中的一组文本。我的工作让我手动完成,但我知道必须有一个Comp-Sci解决方案 我已经对需要更改的列进行了排序。还有成千上万个重复需要修改,如下面的示例所示 示例:1001.tif如果是第一个副本,则更改为1001_1.tif;如果是该值的第一个文本,则保留该值 我下面的代码根本不起作用,但应该是它的框架 Sub Button1_Click() Dim n As Integer n = 1
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
有什么提示吗?使用COUNTIF()
将此转换为:
进入:
看看我在下面所做的更改。我想这就是你想要实现的
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
基于对您打算做什么的假设,我对您的代码做了一些更改。希望这会有所帮助
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
此代码将按照您描述的方式执行。只需对所有相同的文件进行排序并运行宏即可。我添加了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
如果您对vba有些反感,下面是一个单元格内公式的实现,其方法与当前vba答案相同。假设D是文件名列: =IF(COUNTIF($D$2:D2,D2)>1,MID(D2,1,FIND(“,”,D2)-1)和“&”COUNTIF($D$2:D2,D2)和“.tif”,D2)也会这样做 一些解释: COUNTIF()公式计算从列顶部($D$2)到当前行的字符串出现次数。
MID/FIND公式将出现次数和下划线放在。在文件名中。FIND获取字符串的位置。MID将字符串切掉在点之前,然后公式的其余部分追加数字和文件扩展名。这将适用于长度超过4个字符的数字 使用
.Value2
而不是.Text
谢谢,但是,我尝试过,它仍然给我相同的运行时错误“1004”应用程序定义的错误或对象定义的错误看看下面的答案。您需要做更多的更改,而这正是我想要做的,但是我得到了一个运行时错误“5”:无效的过程调用或参数。当我单击“调试”时,它会突出显示j=application的行。您使用的是Excel还是Visual Studio?我使用的是Excel 2016,此时它应该可以工作。不知道为什么它对你不起作用。你有没有改变我的代码?没有,我没有,但是我的测试数据的长度不同,但是我改变了它以匹配4位数字和ext-它工作了,但仍然有错误。我是否必须更改代码以处理更长的文件名?此代码的问题在于循环开始时,将测试重置为等于上面活动行的测试,因此它将输出1001.tif 1001_1.tif 1001.tif。谢谢你。重置n是else语句,这肯定是我忽略的。
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