Excel VBA宏,用于根据日期计算特定单词出现的次数(将转换为周数)
所以我有A列(包含单词)和C列(包含日期),如下所示。列之间偶尔会有新的标题分隔,例如“Word”和“Date”以及一个空格Excel VBA宏,用于根据日期计算特定单词出现的次数(将转换为周数),excel,vba,date,text,count,Excel,Vba,Date,Text,Count,所以我有A列(包含单词)和C列(包含日期),如下所示。列之间偶尔会有新的标题分隔,例如“Word”和“Date”以及一个空格 Word Date BV 12/06/2017 BV 12/06/2017 BV 13/06/2017 BV 13/06/2017 BR 17/07/2017 BR
Word Date
BV 12/06/2017
BV 12/06/2017
BV 13/06/2017
BV 13/06/2017
BR 17/07/2017
BR 17/07/2017
BR 24/07/2017
Word Date
BT 30/07/2017
BT 30/07/2017
Word Date
BY 05/08/2017
首先,该日期将根据周数转换为新的D列,如2017年6月12日至第24周
使用类似于:
Sub TimeConverter()
Dim I as Long, MaxRow as Long
MaxRow = Range("A" & Rows.count).End(xlUp).Row
For I = 2 to MaxRow
Cells(I, "D").Value = DatePart("ww", Cells(I, "C"), 7)
Next
End Sub
=COUNTIF(A:A, "BV")
=COUNTIF(A:A, "BR")
Output
# 4
# 3
然后,我希望VBA宏代码在A列中查找单词出现的次数,并在新的B列中与同一周的日期匹配
使用类似于:
Sub TimeConverter()
Dim I as Long, MaxRow as Long
MaxRow = Range("A" & Rows.count).End(xlUp).Row
For I = 2 to MaxRow
Cells(I, "D").Value = DatePart("ww", Cells(I, "C"), 7)
Next
End Sub
=COUNTIF(A:A, "BV")
=COUNTIF(A:A, "BR")
Output
# 4
# 3
现在将它们组合在一起,以便将唯一的单词(A列)计数(B列)分隔为相应的周数(D列)
所需输出:
BV 4 24
BR 2 29
BR 1 30
BT 2 30
BY 1 31
任何建议都很好!
谢谢。假设使用VBA代码,您可以获得如下内容作为输入: 然后,正如评论中所提到的,要得到这样的结果: 如你所见,字典的关键是单词+周数。因此BR29与BR30不同 复制示例输入,运行下面的代码,您将获得所需的输出:
Option Explicit
Public Sub TestMe()
Dim myDict As Object
Dim lngCounter As Long
Dim strKey As String
Dim objKey As Object
Set myDict = CreateObject("Scripting.Dictionary")
For lngCounter = 1 To 14
strKey = Cells(lngCounter, 1) & Cells(lngCounter, 3)
If myDict.exists(strKey) Then
myDict(strKey) = myDict(strKey) + 1
Else
myDict(strKey) = 1
End If
Next lngCounter
For lngCounter = 0 To myDict.Count - 1
Cells(lngCounter + 1, 6) = myDict.Items()(lngCounter)
Cells(lngCounter + 1, 7) = myDict.keys()(lngCounter)
Next lngCounter
End Sub
然后,您必须进行更多的工作,以找到一种将关键帧从BV24拆分为BV和24的方法。你还需要找到一种方法来消除结果中的零。一个字典结构可以帮你完成这项工作-看看这里,做一点练习,你就能做到-@Vityata是否可以为我的情况看一个例子来更好地理解字典结构?在你的情况下,关键是单词+周的组合,价值是重复次数。例如,键
BV24
。每次你看到它,你会增加1。为什么你需要vba?您可以使用pivot完成此操作table@SkirmanteValentaite您好,VBA会更好,因为我需要对多个文件执行此操作。您将日期转换为每行的周数的方法是什么?@F.Lee-WEEKNUM()
哦,好的,我只是尝试将其写入VBA,而不是作为工作表上的公式