プロが教えるわが家の防犯対策術!

Excelにて散布図のグラフを作成しました。
外れ値(異常値)を削除しようと試みています。
状況を箇条書きにします。どなたか助けていただけないでしょうか。

・1シートあたり5000桁以上程度
・複数のシートに分かれている。
・グラフ内の外れ値がどのセルにあるか知る必要がある。
(外れ値を削除してグラフがどう変化するか、様子を見ながら進めていく)
・ExcelのVBAを試したがうまくいかない
(1シートでのみ動作するが、それ以外は動かない)
・各シート内にグラフは複数ある
・この作業を今後も続ける事になるので、できる限り効率的に実施したい。

お願いします…

質問者からの補足コメント

  • ありがとうございます。補足します。

    ・データについて
    A列に5000行近くの数値が入力されています
    ・散布図の外れ値を消すと、関係する数式にも変化がでるようなシートになっています。
    ・VBA等について
    グラフの外れ値を選択すると、(9.8,206)のような数値が表示されますが、どのセルか判別できないため困っていました。ネットで検索し、コピペしたマクロです。グラフ内の外れ値を選択し、マクロを実行すると、外れ値が入力されているセルへカーソルが移動する仕組みになっています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/04/19 23:10
  • 文字数がオーバーするため、分割して補足します。マクロ内容です。https://oshiete.goo.ne.jp/qa/5363318.html

    Sub Test1()
    Dim myPoint As Point
    Dim myFormula As String
    Dim myPDLname As String
    Dim myWsName As String
    Dim x As String
    Dim y As String
    Dim n As Integer

      補足日時:2022/04/19 23:23
  • If TypeName(Selection) <> "Point" Then Exit Sub
    If TypeName(Selection) = "Point" Then
    Set myPoint = Selection
    myFormula = myPoint.Parent.Formula
    With myPoint
    .HasDataLabel = True
    myPDLname = myPoint.DataLabel.Name
    .HasDataLabel = False
    End With
    n = Split(myPDLname, "P")(1)
    x = Split(myFormula, ",")(1)
    y = Split(myFormula, ",")(2)
    myWsName = Split(x, "!")(0)
    End If

      補足日時:2022/04/19 23:25
  • MsgBox myWsName & "!" & Range(x)(n).Address & ":" & Range(y)(n).Address
    Sheets(myWsName).Select
    Sheets(myWsName).Range(Range(x)(n), Range(y)(n)).Select
    End Sub

    以上です。よろしくお願いします。

      補足日時:2022/04/19 23:26
  • はい。元々の質問です。このマクロでは複数シートを作成し、セル番地を取得しようとすると、実行時エラー9で動作せず困っています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/04/20 00:09

A 回答 (4件)

No3です。



>実行時エラー9で動作せず困っています。
ざっとしか見ていませんけれど、普通の環境で利用する限りはエラーの出るような書き方はしていないと思います。
もちろん、VBAは万能ではありませんので、作者の想定と異なる使い方をすれば、エラーを発生させることはできます。

失礼ながら、質問者様が特殊な使い方をなさっていませんか?
すぐに思いつく例として、
・シートが非表示、あるいはロック(=保護)がかかった状態である
・散布図の作成方法が、通常の「表から単純に参照」する方法ではない
 例えば、SERIES関数の引数が、単純なセル範囲の参照ではなく、関数を用いて
 間接的に指定しているなど
 >A列に5000行近くの数値が入力されています
 とありますが、「散布図」は通常2軸のデータなので、A:B列などとなるはずですが、
 1軸なのでしょうか?
 であるなら、元のVBAは散布図を想定しているので、2軸を対象にしています。
・(まさかとは思いますが)シートモジュールにマクロを置いている
・(こちらもまさかですが)別のマクロでエラーが発生した状態のまま、実行しようとしている
など。

元々のご質問文が、「VBAを試したがうまくいかない」という「one of them」としての表現ですし、「エラーが出る」という曖昧な情報だけなので・・・
仮に、「車が動かない」という情報だけからでは、
・キーを回していない
・バッテリーが上がっている
・ガス欠
・そもそも乗っているだけで、運転者がいない
・河の中で走ろうとしている
などなど、通常の車を想定してもいくらでも考えられます。
故障や特殊車両までを含めれば、それこそ数えきれないくらいの原因があり、考えるだけ無駄と言えます。
(当たりがあったとしても、その中のたった一つだけなので)

>はい。元々の質問です。
VBAを利用なさりたいのであれば、初めからコードを示し、「どこでどのようなエラーが発生しているか」を示さないと、上記と同様に妄想するだけ無駄なことになります。
    • good
    • 0
この回答へのお礼

助かりました

自分が何をしているか、どういう状態なのかがとてもよく理解できました。ありがとうございます!

お礼日時:2022/04/20 08:37

No1です。



補足でご提示の過去質問のNo3様の回答内容は、私の回答(No1)の内容とほとんど同じことを行っています。

>グラフ内の外れ値を選択し、マクロを実行すると、外れ値が入力
>されているセルへカーソルが移動する仕組みになっています。
それが、元々のご質問なのでは?
ですので、すでに実現できているってことだと思いますが。
この回答への補足あり
    • good
    • 0

こんばんは、


ごめんなさい、どのような処理なのか、意図するところなど分かりません

>・ExcelのVBAを試したがうまくいかない
>1シートでのみ動作するが、それ以外は動かない
私が回答できるかは分かりませんが、
動作が1シートでのみであるものの、希望するものでしたら、コードを示されるとなさりたい事も分かると思います。
    • good
    • 0

こんばんは



何をどのように表示していて、どのような操作をしたいのか抽象的にしか記されていないので、勝手に解釈しました。

>1シートあたり5000桁以上程度
「桁」が何の単位なのかわかりませんが、データ数のことであるら、5000件を一点一点操作しても面倒すぎる気がしますけれど・・
異常値を判定する方法などを考えて、まとめて削除する方が、目的には早く到達できそうな気がします。

散布図であれば、
>外れ値を削除してグラフがどう変化するか~
点を削除すればその点が消えるだけなので、グラフの変化と言われても・・
また、これを繰り返して、複数シート×5000データを処理しようとするのは、相当に大変な作業のように思われます。


それは置いておくとして・・

>グラフ内の外れ値がどのセルにあるか知る必要がある~
散布図上のデータポイントを選択すると、ポップアップで系列やデータが表示されるので、それを元に参照することは可能です。
速くアクセスしたければ、元データをソートしておく方が見つけやすいでしょう。

>ExcelのVBAを試したがうまくいかない
何をどのようになさったのか不明ですが、ポイントを指定すれば、その親要素は系列となっており、Formulaを見れば「データ系列の式」を得られます。
(数式バーに表示される数式と同様の内容です)
これには、データ範囲がシート名込みで記されているはずですので、これを参照すればデータがどのシートにあっても判別可能なはずです。
(それとも、データとグラフは同じシートにあって、そのセットが多数あるって
 ことなのでしょうか?
 もしそうなら、シートを判別する必要もなく、シートは決め打ちで良いはず。)

ポイントのName属性を見れば「S2P12」のようになっており、これは、系列2の12番目のポイントであることを意味していますので、削除したければ元データ範囲の12番目のデータを空白にすれば、グラフの表示からは消えます。
直接元データを削除してしまうと復帰できなくなるので、コピーデータを作成しておき、グラフで参照するのはこちらのコピーデータにしておく方が何かと便利かもしれません。

一方で、もしも、元データが1行に1データという構成になっているのであれば、削除せずとも行を非表示にすることでもグラフから表示を外すことができます。
こちらの方法を取れるのであれば、データを削除せずに表示を消せるので、コピーを取る必要はないかも知れません。


※ ご質問が抽象的にすぎるので、抽象的にしか回答できませんが、何かのヒントにでもなれば。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!