Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2731 / 13645 ツリー ←次へ | 前へ→

【66322】連続散布図作成&異常点削除 ここ 10/8/23(月) 8:54 質問[未読]
【66326】Re:連続散布図作成&異常点削除 kanabun 10/8/23(月) 10:20 発言[未読]
【66328】Re:連続散布図作成&異常点削除 ここ 10/8/23(月) 13:44 お礼[未読]
【66329】Re:連続散布図作成&異常点削除 kanabun 10/8/23(月) 13:59 発言[未読]
【66327】Re:連続散布図作成&異常点削除 kanabun 10/8/23(月) 11:21 発言[未読]

【66322】連続散布図作成&異常点削除
質問  ここ  - 10/8/23(月) 8:54 -

引用なし
パスワード
   すみません
VBA初心者です。

VBAで以下の内容の作業を
したく、いろいろ勉強中なのですが
なかなかうまくいきません。
ご教授お願いします。
(excel2003)

A列をY軸でb・c〜複数列をそれぞれX軸として、
dataとは別sheetに値が入力されている列全て
A列との散布図を作成し表記したいです。
(下の表だとA・B列、A・C列の2つの散布図を作成)
グラフが多数になるので、グラフは縦並びで
1つ1つのグラフには、Y軸:温度
X軸:変化・個数・・・・のタイトルを表示。

又、そのグラフの中から
C列の様に99999という異常点を
ダブルクリックすればグラフには反映しない様にする
事は可能でしょうか。
(元dataから削除など)


A列  b列  c列 ・・・・・・・
温度 変化  個数
23  0.76  432
43  0.68  408
24  0.65  478
16  0.85  99999


いろいろ難しくて。。。
よろしくおねがいします。

【66326】Re:連続散布図作成&異常点削除
発言  kanabun  - 10/8/23(月) 10:20 -

引用なし
パスワード
   ▼ここ さん:
こんにちは。


>A列をY軸でb・c〜複数列をそれぞれX軸として、
>dataとは別sheetに値が入力されている列全て
>A列との散布図を作成し表記したいです。
>(下の表だとA・B列、A・C列の2つの散布図を作成)
>グラフが多数になるので、グラフは縦並びで
>1つ1つのグラフには、Y軸:温度
>X軸:変化・個数・・・・のタイトルを表示。

この部分だけですが、以下のような感じでどうでしょう。

Sub Try1()
 Dim r As Range
 Dim c As Range
 Dim i As Long
 Dim ChtObj As ChartObject
 
 Set r = Range("A1").CurrentRegion.Resize(, 3) '元データ範囲
 Set r = Intersect(r, r.Offset(1))   '一行目をオミット
 Set c = Range("B10").Resize(18, 7)  'グラフを描画するセル範囲
 
 Set ChtObj = ActiveSheet.ChartObjects.Add(c.Left, c.Top, c.Width, c.Height)
 With ChtObj.Chart
   .ChartType = xlXYScatterLines
   For i = 2 To 3
     With .SeriesCollection.NewSeries
       .XValues = r.Columns(i)
       .Values = r.Columns(1)
       .Name = r.Item(0, i)
     End With
   Next
   .SeriesCollection(1).AxisGroup = 2
    
   .HasAxis(xlCategory, xlPrimary) = True
   With .Axes(xlCategory, xlPrimary)
     .HasTitle = True
     .AxisTitle.Characters.Text = "個数"
   End With
   
   .HasAxis(xlCategory, xlSecondary) = True
   With .Axes(xlCategory, xlSecondary)
     .HasTitle = True
     .AxisTitle.Characters.Text = "変化"
   End With
   
   .HasAxis(xlValue, xlPrimary) = True
   With .Axes(xlValue, xlPrimary)
     .HasTitle = True
     .AxisTitle.Characters.Text = "温度"
   End With
 End With

End Sub

ポイントは 第2軸の追加、です。
>   .SeriesCollection(1).AxisGroup = 2
>   .HasAxis(xlCategory, xlSecondary) = True


>又、そのグラフの中から
>C列の様に99999という異常点を
>ダブルクリックすればグラフには反映しない様にする
>事は可能でしょうか。
>(元dataから削除など)

こちらは ノーアイデアです。

【66327】Re:連続散布図作成&異常点削除
発言  kanabun  - 10/8/23(月) 11:21 -

引用なし
パスワード
   ▼ここ さん:
>C列の様に99999という異常点を
>ダブルクリックすればグラフには反映しない様にする

ヒントです。

ダブルクリックは「オブジェクトの書式設定」の動作ですから、
それはだめ。
手動で、ある系列のある特定の点を選択する(Pointする)方法は
ご存知ですよね?
手動で、ある系列の異常点をPointしてから、
以下のマクロを走らせてみてください。

Sub GetPointNo()
 Dim myPoint As Point
 Dim ss As String
 
 If TypeName(Selection) = "Point" Then
   Set myPoint = Selection
   With myPoint
    .HasDataLabel = True
    ss = myPoint.DataLabel.Name
    .HasDataLabel = False
   End With
   MsgBox Split(ss, "P")(1)
 End If
End Sub

myP.DataLabel.Nameを取得すると、
"文字列 S2P4"のように系列と要素が判ります。
(by あすなろさん)

うえの MsgBox のところを
   Dim nSeries As Long
   Dim nPoint As Long
   Dim srcRange As String
   
   nSeries = Val(Split(ss, "S")(1))  '系列番号
   nPoint = Val(Split(ss, "P")(1))  'Point番号
   
   srcRange = Split(ActiveChart.SeriesCollection _
        .Item(nSeries).Formula, ",")(1) 'X軸データ範囲
   MsgBox Excel.Range(srcRange).Item(nPoint).Value

に変更して、実行してみてください。
X軸元データ範囲のPointされた番号の位置の値が表示されると思います。

【66328】Re:連続散布図作成&異常点削除
お礼  ここ  - 10/8/23(月) 13:44 -

引用なし
パスワード
   kanabunさん
ありがとうございます。

ただ、一つのグラフに表記するのではなく、
A列をY軸として、それぞれX軸をB列、X軸をC列の
2つ以上のグラフをつくる事は可能でしょうか?
(D列・E列と多数DATAの場合もあり)

よろしくおねがいします!

【66329】Re:連続散布図作成&異常点削除
発言  kanabun  - 10/8/23(月) 13:59 -

引用なし
パスワード
   ▼ここ さん:

>kanabunさん
>ありがとうございます。
>
>ただ、一つのグラフに表記するのではなく、
>A列をY軸として、それぞれX軸をB列、X軸をC列の
>2つ以上のグラフをつくる事は可能でしょうか?
>(D列・E列と多数DATAの場合もあり)

いかようにも可能ですけど。
まだ サンプルコード 試してませんね?

2731 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free