- ベストアンサー
Excel2000マクロ
お世話になっております。 マクロのことで教えてください(マクロ初心者です(^_^;)) A列・・日付 B列・・時刻 C列・・数値データ “時刻”が2秒おきのデータなので1分おきのデータを抽出したいので、D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、 B列がX軸でC列がY軸のグラフを作ります。 これをマクロで記録して自動的にやりたかったのです。 ですが、 「D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、・・」 のところは、うまくマクロで自動化できるのですが、 別シートに出来たグラフを見ると、一番最初に記録して作ったグラフがそのまんまできてしまいます。 次のデータでグラフをつくりたかったのですが。。 これはどうしてでしょう? グラフまではうまくできないのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
一度足を突っ込んだら放っておけなくなってしまったabekkanです。 >「D列をコピーというのは、SECOND関数を下のセルへコピーするという意味」です。! (3)D2に~コピーする。(4)D3~D100を選んで貼り付け と書いたのでD列をコピーとは言ってませんよ。 で、ソースが見つからないようなので初めからやりましょう。 (1)新しいBOOKに「あ」のデータをコピーして回答No4のように再度マクロを記録してください。ただし、ツール→新しいマクロの記録 でマクロの保存先を作業中のブックにしてください。このブックは「編集ツール.xls」として保存しときましょう。 (2)記録終了後、ツール→マクロでさっきのマクロを選んで編集をクリック。→ソース表示。 (3)ソースの初め(マクロ記録日 とかの次)に以下のソース6行を追加します。 Dim MyBook As String Dim MySheet As String MyBook = InputBox("編集するBook名(拡張子なし)を入力するのじゃ") MySheet = InputBox("編集するシート名を入力するのじゃ") Windows(MyBook).Activate Sheets(MySheet).Cells(2, 4).Activate (この後、ActiveCell.FormulaR1C1 = "=SECOND(RC[-2])"と続く) (4)「い」のデータを用意します。仮にBook2.xlsのSheet1とします。列A,B,Cの2行目以降にデータがあるものとします。 (5)編集ツール.xlsから、ツール→マクロでさっき記録したマクロを選んで実行。ブック名とシート名を聞かれたら、Book2、Sheet1と入力します。(ただしテキストファイルを開いたときなどは、ブック名をText.txtと拡張子付にする必要ありかな) これでどうでしょ。別のシートを操作するときはこのように対象シートをアクティブにする命令が必要です。Do you understand?
その他の回答 (7)
- abekkan
- ベストアンサー率27% (83/305)
(1) >グラフをつくりときも直接D列は使わないので、 >D列はコピーして貼り付ける必要はないですよね??? →必要大ありです。オートフィルタでD列が0の行を選択するんでしょ。これをやっとかないと選択できないはず。 >(形式を選択して→値→貼り付け・・・ですよね?) →それでもいいですが。。。ただの貼り付けでいいと思います。 (2)マクロを記録するときに保存先を個人用マクロブックにして記録し、bookを閉じてからだと「表示されていないブックのマクロは編集できません~」となりますね。マクロを選択するときに「PERSONAL.XLS!マクロ名」と書かれていますか? そうだとしたらツール>マクロ>VisualBasicEditor を開いてプロジェクトウィンドウのVBAProject(PERSONAL.XLS)の標準モジュールのModule1のあたりをダブルクリックすればソースが見れます。 (3)マクロは他のシートにも他のBOOKにも使えます。が、ちょっとソースに手を加える必要があります。
補足
何度も何度もありがとうございますm(__)m 付き合ってくださって頭がさがります 1) >グラフをつくりときも直接D列は使わないので、 >D列はコピーして貼り付ける必要はないですよね??? →必要大ありです。オートフィルタでD列が0の行を選択するんでしょ。これをやっとかないと選択できないはず →はい、たしかに0の行だけを選択したいのですが、D列だけにオートフィルタをかけましたが、それだけで0だけの行が抽出され、と思います。 裏付け理由は、私のやっているデータは行が4万3000行以上もあるんです。Excelの仕様で、3万2千要素(つまりセル数ですよね)以上の1系列だけのグラフはつくれないはずです。 それとも。。私が受け取り方をかんちがいしているのかな?「D列をコピーというのは、SECOND関数を下のセルへコピーするという意味ではないですよね? 「PERSONAL.XLS!マクロ名」と書かれていますか? →はい、そうなっています。 はい、VBEをたちあげて、左側にあるエクスプローラ状のをみて、PERSONAL.XLSの下をみてみましたが、Module1という名前はありませんでしたが、Sheet1とかそういうのはありました。でも、どれをひらいてみても、(右側に ウィンドウがでますよね) ぜんぜんなにも書いてないのです。 そのウィンドウにはタイトルバーにその適当なタイトル、 その下に、General、Declarations とかかれたものがあって、それぞれ右側にプルダウンメニューを表示できるところがありました。 画面は真っ白です。 う~ん。。このソフト(VBA)をもうすこし私が勉強しなければよくわからないような気がしてきました。。。
- abekkan
- ベストアンサー率27% (83/305)
4)D3~D100を選んで貼り付け。 >この部分がわからないのですが、なにを貼り付けるのでしょう。。。 →(3)でコピーしたセルをそのまま貼り付けます。 い でマクロを実行するときですが、あ があったシートにデータを貼り付けてやっっているのでしょうか? そうでなくて、い 用に新しいシートを開いてからやっていたとしたら、もとの あシートを処理対象として同じことが再度自動実行されているのではないですか? だとするとマクロのソースにどう書かれているかわかれば対処できそうですが。 てっとり早いのは上記の あ シートにデータを貼り付けるやり方かなと思いますが。。。
補足
ありがとうございますm(__)m 4)D3~D100を選んで貼り付け。 >この部分がわからないのですが、なにを貼り付けるのでしょう。。。 →(3)でコピーしたセルをそのまま貼り付けます。 グラフをつくりときも直接D列は使わないので、 D列はコピーして貼り付ける必要はないですよね??? (形式を選択して→値→貼り付け・・・ですよね?) い 用に新しいシートを開いてからやっていたとしたら、もとの あシートを処理対象として同じことが再度自動実行されているのではないですか? →そのとおりです! それだとだめだったんですか? 全く初心者で(^_^;)マクロって、他のシート(ブックはもちろんですか?)にはつかえなかったんですか? ソース、みたいのですが、 「表示されていないブックのマクロは編集できません。「マクロの再表示」コマンドを実行して。。」 というダイヤログがでてきてしまいます。 いったいどうやったら「マクロの再表示コマンド」が 実行できるのでしょう?
- abekkan
- ベストアンサー率27% (83/305)
追記です。 ダメだったら、オートフィルタで0を選択するのではなく、「0と等しくない」をオプションで選択してからすべての行を選んで削除し、残った行でグラフを作ればできるのでは。。。
補足
すいません、↓の補足です。 4)D3~D100を選んで貼り付け。 この部分がわからないのですが、なにを貼り付けるのでしょう。。。 と書いてしまったのですが、 ひょっとしてDをコピーして形式を選択して値だけはりつけのことですか?それをやらなくてはだめですか?
- abekkan
- ベストアンサー率27% (83/305)
再度abekkanです。やってみました。 (1)A列・・日付、B列・・時刻、C列・・数値データが書いてある。(2行目~100行目とします) (2)新しいマクロの記録 (3)D2に=second(B1)と書き、コピーする。 (4)D3~D100を選んで貼り付け。 (5)1行目を選んでオートフィルタ。 (6)オートフィルタで列Dの0を選択 (7)挿入→グラフでグラフでデータ範囲をB2:C100にして作る。 (8)マクロ記録終了。 (9)オートフィルタOFF、D3~D100を削除後、記録したマクロを実行。 →D列が0のもののグラフができた。ただし、オートフィルタがかかっていて選択したものに応じてグラフが動的に変わる。 と、うまくいったのですが、このやり方と違いますか? あるいはExcelの設定で計算方法とかが違うのか、とも思ったのですがどこが悪いのかは予想できません。
補足
何度も何度もありがとうございますm(__)m 感謝です 1)A列・・日付、B列・・時刻、C列・・数値データが書いてある。(2行目~100行目とします) はい、実際には何千行とあったりします。もちろんExcelの機能の範囲内にはおさまっていますが。。 そのようなフォーマットのデータがいくつかあります。 (たとえば、あ、い、う、え、お。。という5つのデータがあると仮定します)もちろん、それぞれ、行数とかは違います。書いてある 中身も違います (2)新しいマクロの記録 (3)D2に=second(B1)と書き、コピーする。 そうですそうです、それで時刻から秒だけでますよね (4)D3~D100を選んで貼り付け。 この部分がわからないのですが、なにを貼り付けるのでしょう。。。 (5)1行目を選んでオートフィルタ。 はい、D列の1行目(タイトル行ですが、実際タイトルははいってません)を選択しました (6)オートフィルタで列Dの0を選択 (7)挿入→グラフでグラフでデータ範囲をB2:C100にして作る。 とくに、データ範囲をきっちり決めて範囲選択しませんでした。なぜかというと、あ、い、う、え、お、のデータそれぞれ行数が違うからです。 なので、グラフを作成したいB列C列を全部選択しました。 (8)マクロ記録終了。 (9)オートフィルタOFF、D3~D100を削除後、記録したマクロを実行。 “あ”のデータでマクロを作成して、“い”以降のデータでそのマクロを実行しました。。。 実行すると、(1)~(6)まではうまく出来るのですが、グラフが“あ”と同じようなグラフができたので。。。(汗涙 ちなみに「データ系列の書式設定」は、パターンタブでマーカーなし、線自動にしているので、ギザギザ?波状?のグラフです。
- TUNE0040
- ベストアンサー率26% (220/842)
絶対的な確信があるわけではないのですが、 「最初に記録して作ったグラフ」というのは、 1分おきに抽出されたデータではないのですね。 ・・・という前提で回答します。 「オートフィルタ」は単に余計な行を見えなくする だけで、完全に除去しているわけではありません。 したがって、マクロ上での行指定が [行番号]+1 という単純な式だと、単に次の行が指定されます。 そこを直さないといけないですね。 たぶん。
補足
すみませんm(__)m私の表記がわるかったでしょうか? 1分おきに抽出されたデータです。 それはもう完璧なのですが、 ただ、マクロで記録して、 次の同じようなデータの処理にその設定した マクロを使うと、 グラフを作る直前まではいいのですが、 グラフが全く一番最初にマクロを設定したグラフと 全く同じフォーマットにできるのです。。 ちなみにグラフは散布図です。 全く初心者なので、 うまく説明できてなかったらすみませんm(__)m
- abekkan
- ベストアンサー率27% (83/305)
abekkanです。 >ソースとはどうやってみるのでしょうか? →ツール マクロ で記録したときのマクロ名を選択して 編集 をクリックしてください。
補足
ありがとうございます!! でも。。なぜか。。 ダイヤログが出るのです。 「表示されてないブックのマクロは編集できません。 ”ウィンドウ表示”コマンドを選択してウィンドウを表示してください」 とでます。 マクロを記録したはずのブックを開いて操作しても 同じです。。。。 どうしたらよいでしょう。。。(涙
- abekkan
- ベストアンサー率27% (83/305)
マクロをどう作ったのかわからないので予想ですが、 時刻をnow関数で取得すると、(すでに書込み済みのセルも)シートを更新した際に現在時刻に更新してしまうので結局は最後に更新したときの時刻が入って全部D列が同じになるとか...(?) マクロ作成の途中に、コピー、形式を選択して貼り付け(値) の操作をはさんでやって値を固定させたらどうでしょう。 ソースを見せてもらえればもうすこし何か言えるかもしれません。
補足
マクロは、ツール→マクロ→新しいマクロの記録 をクリックしてそのまんま操作を テープに録音するように?記録しました。 なので、VBAとかはよくわからないのですが、 ソースとはどうやってみるのでしょうか?
お礼
本当にありがとうございましたm(__)m データが手元になくなってしまい,(提出しました。。) うまく再現できなくなってしまいました。 (高等技術者ならここで変わりのダミーデータでも作って検証できるのでしょうが。。) でも、おっしゃることはよくわかりました ほかのデータを扱うときは、 VBAで編集が必要なのですよね 本当にありがとうございました