Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何创建可以检测数据的宏?_Excel_Vba - Fatal编程技术网

Excel 如何创建可以检测数据的宏?

Excel 如何创建可以检测数据的宏?,excel,vba,Excel,Vba,下午好 我希望你们能帮助我使用Excel宏:我对这一切都不熟悉,我喜欢使用Excel,但我对它知之甚少,我在工作中被分配了一个项目,该项目要求我在工作簿上制作宏,并让它完成一些简单的任务,如使用公式创建新列、创建透视表、创建图表等 我的问题是,现在我拥有了所有这些,我意识到如果下一个图表每6个月左右就会有一个图表,甚至比我制作宏的那一行多出一行,那么它将被排除在外 因此,我试图找到一种基本上告诉宏的方法:不只是从$a$1到$BA$350获取数据,而是获取所有包含数据的单元格。因此,如果我添加一行

下午好

我希望你们能帮助我使用Excel宏:我对这一切都不熟悉,我喜欢使用Excel,但我对它知之甚少,我在工作中被分配了一个项目,该项目要求我在工作簿上制作宏,并让它完成一些简单的任务,如使用公式创建新列、创建透视表、创建图表等

我的问题是,现在我拥有了所有这些,我意识到如果下一个图表每6个月左右就会有一个图表,甚至比我制作宏的那一行多出一行,那么它将被排除在外

因此,我试图找到一种基本上告诉宏的方法:不只是从$a$1到$BA$350获取数据,而是获取所有包含数据的单元格。因此,如果我添加一行,它会自动看到它,并从$a$1到$BA$351$。看看下一排。如果有数据,就拿去吧。如果没有,就停在这里。列也一样

我希望这是有道理的,如果它是困惑,我道歉,我花了这么长时间在这方面的工作,我实际上是困惑自己。如果您需要更多信息来回答,请随时询问我,并提前感谢您的帮助

安东尼


PS:这可能不重要,但以防万一,我使用的是Excel 2013,用于PC。

这里有一个非常简单的示例,您可以进行调整。假设我们有如下数据:

但我们不知道数据会下降多少。此宏将检测限值并绘制曲线图:

Sub Macro1()
    Dim N As Long
    N = Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("A1:A" & N)
    ActiveChart.ChartType = xlXYScatter
End Sub

听起来您已经将宏记录器用于上面描述的带有图表的项目。其中可能有一行代码如下所示:

ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$B$350")

如果您知道您的数据范围将从某个点开始,比如$a$1,那么您可以使用range.End方法查找数据范围的结尾并指定图表的数据范围

例如:

您的数据从$A$1开始,向下延伸了许多行,但您不知道有多少行。上面的第一行代码变成:

Activechart.SetSourceData Source:=Range(Range("A1"), Range("A1").End(xlDown))
相反,上面的第二行将更改为:

ActiveChart.FullSeriescollection(1).Values = Range(Range("A1"), Range("A1").End(xlDown))
最后,如果您想让宏询问您要指定的范围,可以使用输入框获取范围。将以下行添加到代码顶部:

Dim Rng As Range
Set Rng = Application.InputBox("Please select the range for the chart.", Type:=8)
然后,上面的两行变成:

ActiveChart.SetSourceData Source:=Rng

希望有帮助!
-Matt,通过www.ExcelArchitect.com

我的可能副本可能是错误的,但您提到的另一个问题似乎不能解决我的问题。在我的问题中我应该坚持这一点:我不需要宏来查找电子表格中使用的lats单元格,而是在第一个空行处停止。就像我说的,我想计算每一行:下一行有数据吗?如果是,继续;如果不是,停止。因此,它包括完整的图表,但不包括下面几行的图例。抱歉给你带来困惑。嗨,加里的学生!非常感谢您的快速回答!!它就像一个符咒,但我仍然有一个问题:在图表下面,有一个传奇。有几行空行将它与图表分开,所以我希望宏不会考虑它,但它确实是,这会弄乱数据。有没有办法告诉宏在遇到第一个空行时停止,而不是继续查找数据?谢谢好的,我通过简单地把图例放在图表上方而不是下方来修复上面的事情。。。我太专注于问题,以至于忘记了最简单的解决方案。。。。。。。。现在,Gary的学生,除了行和列之外,您是否有类似于上面的代码?我正在尝试将此代码改编为透视表的源代码范围。当前的代码如下所示:SourceData:=\uReport1!R5C1:R355C58现在,我想将Dim X应用于R355C58的行和列,但即使我一直在尝试,我似乎也找不到如何编写它。帮助谢谢嗨,马特!非常感谢你的回答。不幸的是,到目前为止,我无法将您的解决方案应用于我的宏noob,我知道。最后一个解决方案可能有效,但我知道我的经理不会喜欢它,他真的希望所有的解决方案都是自动的,而之前的解决方案我尝试应用于宏的一部分,其中公式应用于列,直到某个单元格:RangeF2。选择Selection.AutoFill Destination:=RangeF2:F350,Type:=xlFillDefault,但我无法使其工作。有小费吗?谢谢
ActiveChart.SetSourceData Source:=Rng
ActiveChart.FullSeriesCollection(1).Values = Rng