尝试在Excel中更改单元格中的文本

时间:2017-07-28 13:43:43

标签: excel excel-vba vba

我还没有在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

任何提示?

5 个答案:

答案 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

转过来:

enter image description here

分为:

enter image description here

答案 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个字符的数字。