excel - 如何使用 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。但不幸的是,它不能以这种方式工作。
如果有人可以帮助我,我将非常感激。
问候
解决方案
查看您发布的表格,我假设您只想#
用单词“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
推荐阅读
- node.js - 我对 nodejs usb 模块有些好奇
- linux - 致命:无法读取“https://gitlab.com”的用户名:gitlab 上没有这样的设备或地址
- azure-devops - Azure DevOps 权限报告 - 超出默认计数 100
- python - Windows 和 Mac 中的路径
- java - Micronaut AWS Lambda 注入依赖项 NULL
- python - 在 seaborn 条形图中设置条形宽度
- xml - Powershell:在 SelectNodes 中使用变量不起作用
- pdf - Itext7 清理方法抛出错误 - 索引超出范围
- android - UPI 付款在 razorpay Android 集成中不起作用
- javascript - Node.js - 服务器端命令提示符命令输入?