- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 Excel VBA 函数来做两件事。首先,它将确定每种类型的电影数量,并使用我编写的 printMovieData 函数将其打印到即时窗口。其次,它将使用我编写的 FindMax 函数返回电影数量最多的类型。我已经提供了 printMovieData、FindMax 的代码,以及到目前为止我为 MoviesByGenre 提供的代码,但是,我不确定我做错了什么,并且正在寻求帮助以使该功能正常工作。目前,Excel 正在返回 #VALUE!
错误。
打印电影数据:
Function printMovieData(title As String, arrayTopic, arrayOther)
printMovieData = ""
For i = 1 To UBound(arrayTopic)
Debug.Print arrayTopic(i) & " : " & arrayOther(i)
Next i
End Function
Function FindMax(valueArray, nameArray) As String
Dim i As Integer
Dim maxValue As Variant
maxValue = 0
For i = 1 To UBound(valueArray)
If valueArray(i) >= maxValue Then
maxValue = valueArray(i)
FindMax = nameArray(i)
End If
Next i
End Function
Function MoviesByGenre(genreRng As Range) As String
Dim i As Integer
Dim genreArray(1 To 4) As String
Dim countArray
genreArray(1) = Action
genreArray(2) = Comedy
genreArray(3) = Drama
genreArray(4) = Musical
For i = 1 To UBound(genreArray)
For j = 1 To genreRng.Count
If genreRng.Cells(j) = genreArray(i) Then
countArray(i) = countArray(i) + 1
End If
Next j
Next i
MoviesByGenre = printMovieData("Movies by Genre", genreArray, countArray)
MoviesByGenre = FindMax(countArray, genreArray)
End Function
最佳答案
TBH 我不希望您的代码能够正常工作的原因有很多。
有一些假设,例如您如何使用 genreRng.Count
.这是假设要计数的数据是一行或一列。
以下假设 genreRng.Cells.Count
, Ubound(genreArray)
和 UBound(countArray)
都是一样的。你不能确保这一点。
缺少变量声明,没有使用 Option Explicit
和其他一些事情。
不过,最重要的是,我认为您想要一个不同的对象来处理您的计数。这是Collection
和 Scripting Dictionaries
非常有用。
您可以将键作为流派,并将计数保存在关联的值中。如果键已经存在,即重复流派,只需在现有计数中添加一个。
考虑到这一点,一个起点可能类似于(对不起,没有添加错误处理):
Option Explicit
Public Sub test()
Dim genreCount As Object
Set genreCount = CreateObject("Scripting.Dictionary")
Set genreCount = MoviesByGenre(ActiveSheet.Range("A1:A3"), genreCount)
printMovieData "Movies by genre", genreCount
FindMax genreCount
End Sub
Public Function MoviesByGenre(ByRef genreRng As Range, ByVal genreCount As Object) As Object
Dim j As Long
For j = 1 To genreRng.Count 'assumes 1 column/row
Dim currentGenre As String
currentGenre = genreRng.Cells(j, 1)
If Not genreCount.Exists(currentGenre) Then
genreCount.Add currentGenre, 1
Else
genreCount(currentGenre) = genreCount(currentGenre) + 1
End If
Next j
Set MoviesByGenre = genreCount
End Function
Public Function printMovieData(ByVal title As String, ByVal genreCount As Object)
Dim key As Variant
Debug.Print title & vbCrLf 'put to next line
For Each key In genreCount.keys
Debug.Print key & " : " & genreCount(key)
Next key
End Function
Public Function FindMax(ByVal genreCount As Object) As String
Dim maxValue As Long
Dim maxGenre As String
Dim key As Variant
For Each key In genreCount.keys
If genreCount(key) > maxValue Then
maxValue = genreCount(key)
maxGenre = key
End If
Next key
Debug.Print vbNewLine & "Max genre is " & maxGenre & " with " & maxValue
End Function
关于vba - Excel VBA : MoviesByGenre Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845272/
我正在尝试编写一个 Excel VBA 函数来做两件事。首先,它将确定每种类型的电影数量,并使用我编写的 printMovieData 函数将其打印到即时窗口。其次,它将使用我编写的 FindMax
我是一名优秀的程序员,十分优秀!