excel - 代码在执行中途停止正常工作
问题描述
我正在尝试从一个电子表格中收集有关球员统计数据的数据,对该数据执行计算,然后如果名称匹配,则将该数据粘贴到另一张表格的单元格中。
它有点棘手,因为带有统计数据的工作表的记录少于我的其他工作表,并且名称是缩短版本而不是全名。
我一直在使用 Range.Find 函数来检查统计表上的球员姓名是否在第一张表的姓名单元格内,如果是,请粘贴公式。
到目前为止,我的方法是: 1. 搜索长列表以查看长名称集中是否存在统计表名称 2. 如果存在,则检查长列表中的名称是否与当前行对应单元格与统计表中的名称相同,如果不是,则移至长列表中的下一个单元格并再次检查。3. 重复直到我找到与统计表单元格名称匹配的单元格位置,然后在与长列表中的名称位于同一行的单元格中填写公式。
我的代码是(它开始说所有名称都不在列表中,即使它们是):
'
' PlayerImpact Macro
'
'
Dim rng As Range, cell As Range, PSrng As Range, player As Range, namerng As Range, FDaddress As Range, playercheck As Range
'Dim namek As String
Dim i As Long, j As Long, k As Long
Dim a As Single, b As Single, c As Single, d As Single, tot As Single
Set rng = Sheet1.Range("P2:P542")
Set namerng = Sheet1.Range("A2:A542")
Set PSrng = Sheet6.Range("A2:S390")
k = 1
i = 2
j = 2
'For j = 1 To rng.Rows.Count
Do While j < rng.Rows.Count
Debug.Print " "
Debug.Print "i: " & " " & i
Debug.Print "j: " & " " & j
Debug.Print "k: " & " " & k
Debug.Print "Filtered Data Player:" & " " & namerng(k)
Debug.Print "Stats Player:" & " " & PSrng.Cells(i, 3).Value
Set cell = rng(j)
Set player = namerng.Find(PSrng.Cells(i, 3).Value, LookIn:=xlValues, Lookat:=xlPart)
If Not player Is Nothing Then
Debug.Print "namerange loop: " & " " & player.Value
Debug.Print "namerange k in loop: " & " " & namerng(k)
Debug.Print "Stats Player in loop:" & " " & PSrng.Cells(i, 3).Value
Set playercheck = namerng(k).Find(PSrng.Cells(i, 3).Value, LookIn:=xlValues, Lookat:=xlPart)
If Not playercheck Is Nothing Then
j = k
'cell.Formula = "=('Player Stats Value'!G" & (i + 1) & "-'Player Stats Value'!$G$2)/'Player Stats Value'!$G$2+('Player Stats Value'!I" & (i + 1) & "-'Player Stats Value'!$I$2)/'Player Stats Value'!$I$2+('Player Stats Value'!J" & (i + 1) & "-'Player Stats Value'!$J$2)/(2*'Player Stats Value'!$J$2)+('Player Stats Value'!K" & (i + 1) & "-'Player Stats Value'!$K$2)/(2*'Player Stats Value'!$K$2)+('Player Stats Value'!Q" & (i + 1) & "-'Player Stats Value'!$Q$2)"
i = i + 1
k = k + 1
j = j + 1
Debug.Print "In List, Player Check Match: " & " " & player.Value
Debug.Print "Playercheck Value: " & " " & playercheck.Value
Else
Debug.Print "In List, No match Player Check:" & " " & player.Value
k = k + 1
If k > namerng.Rows.Count Then
k = 1
End If
End If
Else
Debug.Print "Not in List: " & " " & PSrng.Cells(i, 3).Value
i = i + 1
'cell.Value = 0
j = j + 1
'k = k + 1
End If
Loop
开始出错时的输出示例:
i: 13
j: 14
k: 14
Filtered Data Player: Ademola Lookman
Stats Player: Adrián
namerange loop: Adrián San Miguel del Castillo
namerange k in loop: Ademola Lookman
Stats Player in loop: Adrián
In List, No match Player Check: Adrián San Miguel del Castillo
i: 13
j: 14
k: 15
Filtered Data Player: Adrian Mariappa
Stats Player: Adrián
namerange loop: Adrián San Miguel del Castillo
namerange k in loop: Adrian Mariappa
Stats Player in loop: Adrián
In List, No match Player Check: Adrián San Miguel del Castillo
i: 13
j: 14
k: 16
Filtered Data Player: Adrián San Miguel del Castillo
Stats Player: Adrián
namerange loop: Adrián San Miguel del Castillo
namerange k in loop: Adrián San Miguel del Castillo
Stats Player in loop: Adrián
In List, Player Check Match: Adrián San Miguel del Castillo
Playercheck Value: Adrián San Miguel del Castillo
i: 14
j: 17
k: 17
Filtered Data Player: Ahmed El Mohamady
Stats Player: Adrian Mariappa
Not in List: Adrian Mariappa
i: 15
j: 18
k: 17
Filtered Data Player: Ahmed El Mohamady
Stats Player: Ahmed Elmohamady
Not in List: Ahmed Elmohamady
i: 16
j: 19
k: 17
Filtered Data Player: Ahmed El Mohamady
Stats Player: Ainsley Maitland-Niles
Not in List: Ainsley Maitland-Niles
i: 17
j: 20
k: 17
Filtered Data Player: Ahmed El Mohamady
Stats Player: Alex Iwobi
Not in List: Alex Iwobi
解决方案
根据我对您的问题的了解,此代码应该可以满足您的所有需求:
Sub PlayerImpact()
Dim rng As Range, namerng As Range, PSrng As Range
Dim lngCol As Long
Set rng = Sheet1.Range("P2:P542")
Set namerng = Sheet1.Range("A2:A542")
Set PSrng = Sheet6.Range("C3:C390")
For j = 1 To namerng.Rows.Count
If Not PSrng.Find(namerng(j).Value2, LookIn:=xlValues, Lookat:=xlPart) Is Nothing Then
lngRow = PSrng.Find(namerng(j).Value2, LookIn:=xlValues, Lookat:=xlPart).Row
rng(j).Formula = "=('Player Stats Value'!G" & lngRow & "-'Player Stats Value'!$G$2)/" & _
"'Player Stats Value'!$G$2+('Player Stats Value'!I" & lngRow & "-'Player Stats Value'!$I$2) /" & _
"'Player Stats Value'!$I$2+('Player Stats Value'!J" & lngRow & "-'Player Stats Value'!$J$2)/" & _
"(2*'Player Stats Value'!$J$2)+('Player Stats Value'!K" & lngRow & "-'Player Stats Value'!$K$2)/" & _
"(2*'Player Stats Value'!$K$2)+('Player Stats Value'!Q" & lngRow & "-'Player Stats Value'!$Q$2)"
Else
rng(j).Value2 = 0 'alternative: rng(j).Value2 = ""
End If
Next
End Sub
推荐阅读
- elisp - 从闭包创建一个实例
- html - 水平对齐并水平添加 div 项
- video.js - brightcove player how to set options in custom component
- javascript - 如何在数据库中循环集合并从中提取元素
- python - Pycharm 输出的显示与其他解释器不同
- javascript - 在动画定义文件中获取服务
- sql - 没有键名时如何对数据进行从窄到宽的转换
- cqrs - 如何在 axon 框架中处理从 saga 发送的命令
- javascript - 让卡片慢慢向左伸展
- python-3.x - 如何通过单击html按钮运行python函数?