首页 > 解决方案 > 如何使用 VBA 将 Excel 中的某个字符替换为增量数字?

问题描述

我目前正在使用 Excel VBA 开发一个程序,该程序允许用户通过输入计算某些值。输入的值存储在表格中,计算值也在表格中显示给用户。到目前为止,我已经取得了比较好的进展,并且已经能够使用 Excel VBA 创建一个动态表。但是,我被困在一件事上,需要你的帮助。

我现在遇到的问题是我们的合同,这些合同也在表格中列出。这些合同最初仅在签订时才给出#,因为不确定签订时有多少合同。出于这个原因,我只#在编程开始时将合同编号显示为 a。现在,当您完成输入所有合同后,我想#用一个要递增的数字替换所有的(见截图:之前和之后)。

之前 之后

我的代码目前如下所示:

Private Sub CommandButton1_Click()

Dim answer As Integer
Dim answer2 As Integer
Dim answer3 As Integer
Dim vorname As String
Dim nachname As String
Dim anteil As String
Dim Rng As Range
Dim sumGesamt As Integer
Dim sheet As Worksheet
Dim lRows As Long
Dim sumEntschaedigung As Integer
Dim sumAnteil As Integer

Set sheet = Worksheets("Ergebnis")

Set Rng = Range("A6:E1000")
sumGesamt = Rng.Find(What:="Entschädigung - Gesamt", LookIn:=xlValues).Row
sumEntschaedigung = Rng.Find(What:="####", LookIn:=xlValues).Row
sumAnteil = Rng.Find(What:="###", LookIn:=xlValues).Row

nachname = TextBox1.Value
vorname = TextBox2.Value
anteil = TextBox3.Value & " %"

ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove
Range("A7:E7").EntireRow.Copy
ActiveCell.Offset(1).EntireRow.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
ActiveCell.Offset(0, 3).Select

ActiveCell.Offset(0, -3).Value = vorname & " " & nachname
ActiveCell.Offset(0, -1).Value = anteil
ActiveCell.Formula = "=C" & ActiveCell.Row & "*" & "D" & sumGesamt
ActiveCell.Offset(0, 1).Value = TextBox3.Value & " (Anteil in %) x " & Range("D" & sumGesamt).Value & " (Entschädigung - Gesamt)"

Unload Eigentuemer

answer = MsgBox("Weiterer Eigentümer?", vbQuestion + vbYesNo + vbDefaultButton2, "Eigentümerteilung")

If answer = vbYes Then
   Eigentuemer.Show
Else
   answer2 = MsgBox("Weiterer Vertrag?", vbQuestion + vbYesNo + vbDefaultButton2, "Weiterer Vertrag?")
   If answer2 = vbYes Then
    With sheet
        lr = sheet.Range("D" & .Rows.Count).End(xlUp).Row
        Range("D" & sumEntschaedigung).Formula = "=Sum(D" & sumEntschaedigung + 1 & ":" & "D" & lr & ")" & "+" & "B" & sumEntschaedigung
        Range("C" & sumAnteil).Formula = "=Sum(C" & sumAnteil + 1 & ":" & "C" & lr & ")"
    End With
    Vertrag.Show
   Else
    With sheet
        lr = sheet.Range("D" & .Rows.Count).End(xlUp).Row
        Range("D" & sumEntschaedigung).Formula = "=Sum(D" & sumEntschaedigung + 1 & ":" & "D" & lr & ")" & "+" & "B" & sumEntschaedigung
        Range("C" & sumAnteil).Formula = "=Sum(C" & sumAnteil + 1 & ":" & "C" & lr & ")"
    End With
    FindReplaceAll
    answer3 = MsgBox("Programm abgeschlossen! Die Datei wird automatisch gespeichert.", vbInformation + vbOKOnly, "Entschädigungsrechner abgeschlossen")
    ActiveWorkbook.Save
End If
End If
End Sub

Sub FindReplaceAll()

Dim ws As Worksheet
Dim counter As Integer

counter = counter + 1

For Each ws In ActiveWorkbook.Worksheets
   ws.Cells.Replace What:="#", Replacement:=counter
Next ws

End Sub

如您所见,我添加了一个新方法“FindReplaceAll()”来替换当前的#,因此我使用了 Cells.Replace。但不幸的是,它不能以这种方式工作。

如果有人可以帮助我,我将非常感激。

问候

标签: excelvba

解决方案


查看您发布的表格,我假设您只想#用单词“Vertrag”替换。这是一个为您执行此操作的代码示例。确保更改范围,而且我无法通过屏幕截图确定表中的最大行数,因此我假设代码运行 100 行

Sub FindReplaceAll()
   Dim i as Integer
   Dim counter as Integer
   counter = 1
For i = 1 to 100 Step 1
   If  Not Range("A" & i).Find("#") Is Nothing then         'Execute only if "#" was found
      Range("A" & i).Value = Replace(Range("A" & i).Value, "#", counter)
      counter = counter + 1
   End If
Next i
End Sub

推荐阅读