Excel VBA宏,用于根据日期计算特定单词出现的次数(将转换为周数)

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

所以我有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                 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代码,您可以获得如下内容作为输入:

然后,正如评论中所提到的,要得到这样的结果:

如你所见,字典的关键是单词+周数。因此BR29BR30不同

复制示例输入,运行下面的代码,您将获得所需的输出:

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,而不是作为工作表上的公式