【发布时间】:2018-02-02 04:47:06
【问题描述】:
我目前正在尝试使用 VBA 解析单元格的内容。这是我的代码:
Sub Button1_Click()
Dim integ As Integer
Dim counter As Range
Dim counts As Integer
Dim num As Integer
num = 2
counts = 0
Dim element As Variant
Dim count As Integer
Dim players(1 To 100) As String
Dim lineup As String
Dim salary As Integer
For Each counter In Range("F2:F11")
starter_letter = "L"
lineup = counter.Value
Dim arr() As String
arr() = Split(lineup)
For Each element In arr
If element = "PG" Or element = "SG" Or element = "SF" Or element = "PF" Or element = "C" Or element = "G" Or element = "F" Or element = "UTIL" Then
counts = counts + 1
Else
players(counts) = players(counts) + element + " "
End If
Next element
For count = 1 To 8
letter = Chr(Asc(starter_letter) + count)
Range(letter + CStr(num)).Value = Trim(players(count))
Next count
num = num + 1
Next counter
End Sub
我将附上图片来说明问题。
我正在尝试从每个单元格中提取名称并将它们分配给不同的单元格。
它适用于我解析的第一个单元格,但计数器不会进入下一个单元格。任何帮助或见解将不胜感激。
这里是每个单元格的内容:
SF Ben Simmons C Marc Gasol PG CJ McCollum F Nicolas Batum PF Enes Kanter G Terry Rozier SG Andrew Harrison UTIL Wayne Selden Jr.
PG Kemba Walker C Marc Gasol G CJ McCollum UTIL Nicolas Batum F Enes Kanter SG Terry Rozier SF Al-Farouq Aminu PF Channing Frye
PG Kemba Walker C Kristaps Porzingis UTIL CJ McCollum SF Nicolas Batum G Terry Rozier F Josh Jackson PF Dirk Nowitzki SG Dwyane Wade
F LeBron James C Marc Gasol UTIL CJ McCollum SF Jaylen Brown SG Terry Rozier G Josh Jackson PG Wayne Selden Jr. PF Marreese Speights
C Dwight Howard PG Kemba Walker SG CJ McCollum PF Enes Kanter F Bobby Portis G Terry Rozier UTIL Wayne Selden Jr. SF Jae Crowder
SF LeBron James PF Al Horford G CJ McCollum C Myles Turner SG Denzel Valentine PG Terry Rozier UTIL Wayne Selden Jr. F Marreese Speights
C Dwight Howard SG CJ McCollum G Elfrid Payton SF Nicolas Batum PF Enes Kanter F Wesley Matthews PG Terry Rozier UTIL Channing Frye
PG Kemba Walker G CJ McCollum UTIL Dennis Smith Jr. SF Brandon Ingram F Enes Kanter C Bobby Portis SG Terry Rozier PF Jarrett Allen
G Kemba Walker F Al Horford UTIL CJ McCollum SG Jordan Clarkson SF Nicolas Batum PG Terry Rozier PF Dirk Nowitzki C Jahlil Okafor
SF LeBron James C Joel Embiid SG Nicolas Batum UTIL Bobby Portis G Terry Rozier PG Wayne Selden Jr. F Jarrett Allen PF Marreese Speights
这些是需要解析的单元格。
这些是当前 VBA 代码的输出。
【问题讨论】:
-
您有 3 个 For 循环。哪个没有循环播放?
-
首先连接字符在 vba 中是
&而不是+所以将Range("F" + CStr(counter))更改为Range("F" & counter) -
& 和 + 仅在文本时起作用。如果任何值恰好是数字,VBA 会将它们加在一起,而不是连接它们。
-
第三:了解
Cells()它将消除在尝试设置列时将数字转换为字符串的需要。只是让excel将它们转换回数字。这就像将直流电转换为交流电只是为了将其转换回直流电为您的手机供电。 -
这些都是加快代码速度的建议。