我正在编写一个宏来为大量数据创建大量散点图。每个图表的数据集都在其自己的选项卡上。自变量始终在列J中,但因变量的位置可以更改。我将因变量的名称放在单元格K1中,告诉宏哪个列是此图表的因变量。我需要编写逻辑,在标题行中查找变量的名称,以便我可以设置Chart.SeriesCollection.NewSeries.Values
的范围。
这是我的数据集的样子(由于专有信息,我无法展示真实的东西):
我尝试了find方法,但是它返回了一个错误,表明它无法找到它正在寻找的内容:
For Each ws in ThisWorkbook.Sheets
Set oChart = ws.ChartObjects.Add (Left:=0, Width:=375, Top:=0, Height:=225)
Set rXVal = ws.Range("J3")
Set rXVal = Range(rXVal, rXVal.End(xlDown))
sLookup = ws.Range("K1").Value
Set rHeader = Range(ws.Range("J2"), ws.Range("J2").End(xlToRight))
Set rCell = rHeader.Find(What:=sLookup, LookIn:=xlValues, LookAt:=xlPart, After:=Cells(1, 1), SearchOrder:=xlByColumns)
Set rYVal = Range(rCell.Offset(1, 0), rCell.Offset(1, 0).End(xlDown))
With oChart.Chart.SeriesCollection.NewSeries
.XValues = rXVal
.Values = rYVal
End With
Next
然后我尝试了Match,但是我仍然收到一个错误,表明它找不到查找值:
For Each ws in ThisWorkbook.Sheets
Set oChart = ws.ChartObjects.Add (Left:=0, Width:=375, Top:=0, Height:=225)
Set rXVal = ws.Range("J3")
Set rXVal = Range(rXVal, rXVal.End(xlDown))
sLookup = ws.Range("K1").Value
Set rHeader = Range(ws.Range("A2"), ws.Range("A2").End(xlToRight))
iCol = Application.WorksheetFunction.Match(sLookup, rHeader, 0)
Set rYVal = ws.Cells(3, iCol)
Set rYVal = Range(rYVal, rYVal.End(xlDown))
With oChart.Chart.SeriesCollection.NewSeries
.XValues = rXVal
.Values = rYVal
End With
Next
我尝试将sLookup
更改为CLng(sLookup)
并省略WorksheetFunction
条,但我仍然收到错误消息,表明找不到我想要的内容。
答案 0 :(得分:0)
我认为你的主要问题是对rHeader
的分配是错误的。尝试
Set rHeader = ws.Range(ws.Cells(2, 10), ws.Cells(2, ws.Columns.Count).End(xlToLeft))
然后,在第一个变体中,摆脱After:=Cells(1, 1)
最后,检查Find-Command是否通过检查结果返回任何内容:
if rCell is nothing then
Debug.print "Not found..."
else
...
end if