|
ま、あくまでひとつの考え方ですが、
A列の数字がすべて一桁だとすると、
A列をTransposeしてよこ1行にした値を Joinすれば A列データを結合した
単一文字列となります。
たとえば
A列
2 9
3 8
4 1
5 4
6 0
7 7
8 0
9 0
10 0
とあるとき、以下を実行してみてください。
Sub Try1()
Dim r As Range
Dim ss As String
Dim i As Long
Set r = Range("A2", Cells(Rows.Count, 1).End(xlUp))
ss = Join(Application.Transpose(r), "")
MsgBox ss ' -------> "981407000"
i = InStr(ss, "000")
If i > 0 Then
MsgBox "範囲の " & i & " 番目から 0 が3つ連続しています"
Else
MsgBox "A列に 0 が3つ連続するデータの並びはありません"
Exit Sub
End If
End Sub
'2桁とかもあるばあいは この考え方の応用で、各セルから先頭1文字だけを
抽出して 上と同じように "000"を探します。
Sub Try2()
Dim r As Range
Dim ss As String
Dim i As Long
Set r = Range("A2", Cells(Rows.Count, 1).End(xlUp))
ss = Join(Application.Transpose(Application.Replace(r, 2, 10, "")), "")
MsgBox ss
i = InStr(ss, "000")
If i > 0 Then
MsgBox "範囲の " & i & " 番目から 0 が3つ連続しています"
Else
MsgBox "A列に 0 が3つ連続するデータの並びはありません"
Exit Sub
End If
End Sub
さて、[A2]セル以降を結合した文字列の i番目に "000"が見つかったとすれば、
グラフの元データ範囲は
[A2].Resize(i+2)
の一つ右ともうひとつ右の範囲をUnion したものということになりますので、
こんな感じで埋め込みグラフにSourceData範囲を指定できます。
(↓グラフの元データ範囲と グラフを描画するシートは同じシートのとき)
Sub Try3()
Dim r As Range
Dim ss As String
Dim i As Long
Dim c As Range
With Worksheets("Sheet1")
Set r = .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
ss = Join(Application.Transpose(r), "")
i = InStr(ss, "000")
If i > 0 Then
MsgBox ss & vbCr _
& "範囲の " & i & " 番目から 0 が3つ連続しています"
Else
MsgBox "A列に 0 が3つ連続するデータの並びはありません"
Exit Sub
End If
With r.Resize(i + 2)
Set r = Union(.Offset(, 1), .Offset(, 2))
End With
Set c = .Range("D8").Resize(15, 5)
With .ChartObjects.Add(c.Left, c.Top, c.Width, c.Height).Chart
.ChartType = xlXYScatterSmooth
.SetSourceData Source:=r, PlotBy:=xlColumns
End With
End With
End Sub
補足
> Charts.Add
は グラフシートを作成するコードです。
いま作りたいのは 埋め込みグラフですから、そのばあいは
上の例のように、
> With .ChartObjects.Add(c.Left, c.Top, c.Width, c.Height).Chart
グラフを描画する場所とサイズを指定して 埋め込みグラフ(ChartObjects)を
Add したほうが効率よいと思います。
|
|