Excel 变量等于新月份时如何创建新形状

Excel 变量等于新月份时如何创建新形状,excel,vba,Excel,Vba,我目前有一个循环,检查某个范围内的单元格是否介于两个日期之间。“我的循环”当前为给定日期范围内的每个单元格创建一个新形状 我希望我的循环获取第一个给定的日期范围,并输出我的范围内介于日期范围之间的所有单元格的总和。我还想循环标题上方的形状与它搜索的月份单元格。 我的日期范围是startDate和endDate 代码 Sub foo() Dim oval As Shape Dim rCell As Range Dim rng As Range Dim h As Integer Dim w As I

我目前有一个循环,检查某个范围内的单元格是否介于两个日期之间。“我的循环”当前为给定日期范围内的每个单元格创建一个新形状

我希望我的循环获取第一个给定的日期范围,并输出我的范围内介于日期范围之间的所有单元格的总和。我还想循环标题上方的形状与它搜索的月份单元格。 我的日期范围是
startDate
endDate
代码

Sub foo()
Dim oval As Shape
Dim rCell As Range
Dim rng As Range
Dim h As Integer
Dim w As Integer
Dim x As Long
Dim shp As Object
Dim counter As Long
Dim startDate As Date, endDate As Date
Set rng = Sheet1.Range("A1:B6")


h = 495
startDate = "01/01/2019"
endDate = "03/10/2019"

For Each rCell In rng
    If IsDate(rCell.Value) Then
        If rCell.Value >= startDate And rCell.Value <= endDate Then

            counter = counter + 1

            Set oval = ActiveSheet.Shapes.AddShape(msoShapeOval, h + 70 * (counter - 1), w + 125, 60, 65)

            With oval
                .Line.Visible = True
                .Line.Weight = 2
                .Fill.ForeColor.RGB = RGB(255, 255, 255)
                .Line.ForeColor.RGB = RGB(0, 0, 0)
                .TextFrame.Characters.Caption = rCell.Value
                .TextFrame.HorizontalAlignment = xlHAlignCenter
                .TextFrame.VerticalAlignment = xlVAlignCenter
                .TextFrame.Characters.Font.Size = 12
                .TextFrame.Characters.Font.Bold = True
                .TextFrame.Characters.Font.Color = RGB(0, 0, 0)
            End With
        End If
    End If
Next rCell

End Sub
Sub-foo()
暗椭圆形
变暗rCell As范围
变暗rng As范围
作为整数的Dim h
作为整数的Dim w
暗x等长
将小水电作为对象
昏暗的柜台一样长
Dim startDate作为日期,endDate作为日期
设置rng=Sheet1.范围(“A1:B6”)
h=495
startDate=“01/01/2019”
endDate=“2019年10月3日”
对于rng中的每个rCell
如果是IsDate(rCell.Value),则

如果rCell.Value>=startDate和rCell.Value那么您基本上希望按一个月求和,而要做到这一点,数组可能是最简单的方法。我假设一次只需要一年,但您可以查找Redim Preserver来进行更改

这是增加设置范围内的每个值,并将其添加到与月数对应的数组中

 Sub BoOm()
Dim YourSTuff(1 To 12, 0 To 0) As Long, aCell As Range, YourRNG As Range, startDate As Date, endDate As Date

Set YourRNG = Range("A1:B99")

startDate = "01/01/2019"
endDate = "03/10/2019"


For Each aCell In YourRNG.Cells
    If IsDate(aCell.Value) Then
        If aCell.Value >= startDate And aCell.Value <= endDate Then
            YourSTuff(Month(aCell), 0) = YourSTuff(Month(aCell), 0) + 1
        End If
    End If
Next aCell


'when you're done.
Dim i As Long, c As Long
c = 1
    For i = LBound(YourSTuff) To UBound(YourSTuff)
        If YourSTuff(i, 0) > 0 Then


                Set Oval = ActiveSheet.Shapes.AddShape(msoShapeOval, h + 70 * (c), w + 125, 60, 65)
                c = c + 1

                With Oval
                    'not sure how to format as you want
                    .Line.Visible = True
                    .Line.Weight = 2
                    .Fill.ForeColor.RGB = RGB(255, 255, 255)
                    .Line.ForeColor.RGB = RGB(0, 0, 0)
                    .TextFrame.Characters.Caption = Choose(i, "January", "February", "March", "April", "May", "June", "" & _
                     "July", "August", "September", "October", "November", "December") & Chr(10) & YourSTuff(i, 0)
                    .TextFrame.HorizontalAlignment = xlHAlignCenter
                    .TextFrame.VerticalAlignment = xlVAlignCenter
                    .TextFrame.Characters.Font.Size = 12
                    .TextFrame.Characters.Font.Bold = True
                    .TextFrame.Characters.Font.Color = RGB(0, 0, 0)
                End With
        End If


    Next i


End Sub
Sub-BoOm()
将你的东西(1到12,0到0)调暗为一样长,A调为范围,Y调为范围,起始日期为日期,结束日期为日期
设置您的RNG=范围(“A1:B99”)
startDate=“01/01/2019”
endDate=“2019年10月3日”
对于每个单元格中的aCell
如果是IsDate(aCell.Value),则
如果aCell.Value>=startDate且aCell.Value为0,则
Set Oval=ActiveSheet.Shapes.AddShape(msoShapeOval,h+70*(c),w+125,60,65)
c=c+1
椭圆形
'不确定如何按需要格式化
.Line.Visible=True
.Line.Weight=2
.Fill.ForeColor.RGB=RGB(255、255、255)
.Line.ForeColor.RGB=RGB(0,0,0)
.TextFrame.Characters.Caption=选择(i)“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“月份”和_
“7月”、“8月”、“9月”、“10月”、“11月”、“12月”)&Chr(10)和YourSTuff(i,0)
.TextFrame.HorizontalAlignment=xlHAlignCenter
.TextFrame.VerticalAlignment=xlVAlignCenter
.TextFrame.Characters.Font.Size=12
.TextFrame.Characters.Font.Bold=True
.TextFrame.Characters.Font.Color=RGB(0,0,0)
以
如果结束
接下来我
端接头

我很困惑
输出给定范围内属于日期范围的所有单元格的总和
?您给定的范围是A1到A7。您正在尝试比较和b吗?@pgSystemTester是的,我正在尝试比较我的日期范围
A1:A7
为什么三月在您想要的输出中?我在B列看到了6个单元格,但你没有和它比较吗?顺便说一句,你是根据我的代码写的吗。。。这看起来像是我写的@pgSystemTester对输入错误表示歉意。编辑我的帖子。我的范围是
A1:B6
我不是根据你的代码来确定的。我从其他人那里得到了答案here@pgSystemTester我的第二个循环请求有点让人困惑,这就是为什么我发布了一张我想要循环做什么的图片。你的代码几乎实现了我想要的,我只需要找出如何均匀分布形状。我的原始代码按照我的图片所示分发它们,我刚刚算出来,哈哈。谢谢你的帮助。现在编辑的代码是您的;)您的解决方案是否有办法显示一周内日期为一周的圆圈,比如“2019年3月3日-2019年3月9日”@jose您可以根据您想要的日期修改标题文本。下面是显示您描述的日期的示例代码: