2017-05-15 8 views
0

大量のデータに対して多数の散布図を作成するマクロを作成しています。各グラフのデータセットは、独自のタブにあります。独立変数は常にJ列にありますが、従属変数の位置は変更できます。私はK1セルに従属変数の名前を入れて、どの列がこのチャートの従属変数であるかをマクロに伝えます。 Chart.SeriesCollection.NewSeries.Valuesの範囲を設定できるように、ヘッダ行の変数の名前を探すロジックをプログラムする必要があります。Excel VBAマクロのFindメソッドとMatch関数を使用したエラー

は、ここに私のデータセットは、(私が原因専有情報に本物を表示することはできません)のように見えるものです:

Sample Data Table

私はfindメソッドを試してみましたが、それはそれができることを示しますエラーを返しました「Tは、それが探しているものを見つける:

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 

それから私はマッチを試してみましたが、私はまだそれがルックアップ値を見つけることができないことを示すエラーが表示されます。

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 

sLookupCLng(sLookup)に変更して、WorksheetFunctionの部分を省いてみましたが、まだ私が探しているものが見つからないことを示すエラーが表示されます。

+3

クイックノート - ほとんどすべての作業を行いますが、常に範囲の前にワークシートを追加するようにします。たとえば、 'set rHeader = ws.Range(ws.Range(" A2 ")、...'、 'rYVal'などと同じです。 – BruceWayne

答えて

0

私はあなたが主な問題だと思うのは、rHeaderへの割り当てが間違っていると思います。検索-コマンドは、それが結果だチェックすることで何かを返された場合は、

Set rHeader = ws.Range(ws.Cells(2, 10), ws.Cells(2, ws.Columns.Count).End(xlToLeft))

を試してみて、第1の変形例では、After:=Cells(1, 1)

最終取り除く、チェック:

if rCell is nothing then 
    Debug.print "Not found..." 
else 
    ... 
end if 
関連する問題