• ベストアンサー

Excel2000マクロ

お世話になっております。 マクロのことで教えてください(マクロ初心者です(^_^;)) A列・・日付 B列・・時刻 C列・・数値データ “時刻”が2秒おきのデータなので1分おきのデータを抽出したいので、D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、 B列がX軸でC列がY軸のグラフを作ります。 これをマクロで記録して自動的にやりたかったのです。 ですが、 「D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、・・」 のところは、うまくマクロで自動化できるのですが、 別シートに出来たグラフを見ると、一番最初に記録して作ったグラフがそのまんまできてしまいます。 次のデータでグラフをつくりたかったのですが。。 これはどうしてでしょう? グラフまではうまくできないのでしょうか?

  • aimer
  • お礼率75% (432/575)

質問者が選んだベストアンサー

  • ベストアンサー
  • abekkan
  • ベストアンサー率27% (83/305)
回答No.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?

aimer
質問者

お礼

本当にありがとうございましたm(__)m データが手元になくなってしまい,(提出しました。。) うまく再現できなくなってしまいました。 (高等技術者ならここで変わりのダミーデータでも作って検証できるのでしょうが。。) でも、おっしゃることはよくわかりました ほかのデータを扱うときは、 VBAで編集が必要なのですよね 本当にありがとうございました

その他の回答 (7)

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.7

(1) >グラフをつくりときも直接D列は使わないので、 >D列はコピーして貼り付ける必要はないですよね??? →必要大ありです。オートフィルタでD列が0の行を選択するんでしょ。これをやっとかないと選択できないはず。 >(形式を選択して→値→貼り付け・・・ですよね?) →それでもいいですが。。。ただの貼り付けでいいと思います。 (2)マクロを記録するときに保存先を個人用マクロブックにして記録し、bookを閉じてからだと「表示されていないブックのマクロは編集できません~」となりますね。マクロを選択するときに「PERSONAL.XLS!マクロ名」と書かれていますか? そうだとしたらツール>マクロ>VisualBasicEditor を開いてプロジェクトウィンドウのVBAProject(PERSONAL.XLS)の標準モジュールのModule1のあたりをダブルクリックすればソースが見れます。 (3)マクロは他のシートにも他のBOOKにも使えます。が、ちょっとソースに手を加える必要があります。

aimer
質問者

補足

何度も何度もありがとうございます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)
回答No.6

4)D3~D100を選んで貼り付け。 >この部分がわからないのですが、なにを貼り付けるのでしょう。。。 →(3)でコピーしたセルをそのまま貼り付けます。 い でマクロを実行するときですが、あ があったシートにデータを貼り付けてやっっているのでしょうか? そうでなくて、い 用に新しいシートを開いてからやっていたとしたら、もとの あシートを処理対象として同じことが再度自動実行されているのではないですか? だとするとマクロのソースにどう書かれているかわかれば対処できそうですが。 てっとり早いのは上記の あ シートにデータを貼り付けるやり方かなと思いますが。。。

aimer
質問者

補足

ありがとうございますm(__)m 4)D3~D100を選んで貼り付け。 >この部分がわからないのですが、なにを貼り付けるのでしょう。。。 →(3)でコピーしたセルをそのまま貼り付けます。 グラフをつくりときも直接D列は使わないので、 D列はコピーして貼り付ける必要はないですよね??? (形式を選択して→値→貼り付け・・・ですよね?) い 用に新しいシートを開いてからやっていたとしたら、もとの あシートを処理対象として同じことが再度自動実行されているのではないですか? →そのとおりです! それだとだめだったんですか? 全く初心者で(^_^;)マクロって、他のシート(ブックはもちろんですか?)にはつかえなかったんですか? ソース、みたいのですが、 「表示されていないブックのマクロは編集できません。「マクロの再表示」コマンドを実行して。。」 というダイヤログがでてきてしまいます。 いったいどうやったら「マクロの再表示コマンド」が 実行できるのでしょう?

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.5

追記です。 ダメだったら、オートフィルタで0を選択するのではなく、「0と等しくない」をオプションで選択してからすべての行を選んで削除し、残った行でグラフを作ればできるのでは。。。

aimer
質問者

補足

すいません、↓の補足です。 4)D3~D100を選んで貼り付け。 この部分がわからないのですが、なにを貼り付けるのでしょう。。。 と書いてしまったのですが、 ひょっとしてDをコピーして形式を選択して値だけはりつけのことですか?それをやらなくてはだめですか?

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.4

再度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の設定で計算方法とかが違うのか、とも思ったのですがどこが悪いのかは予想できません。

aimer
質問者

補足

何度も何度もありがとうございます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)
回答No.3

絶対的な確信があるわけではないのですが、 「最初に記録して作ったグラフ」というのは、 1分おきに抽出されたデータではないのですね。 ・・・という前提で回答します。 「オートフィルタ」は単に余計な行を見えなくする だけで、完全に除去しているわけではありません。 したがって、マクロ上での行指定が  [行番号]+1 という単純な式だと、単に次の行が指定されます。 そこを直さないといけないですね。 たぶん。

aimer
質問者

補足

すみませんm(__)m私の表記がわるかったでしょうか? 1分おきに抽出されたデータです。 それはもう完璧なのですが、 ただ、マクロで記録して、 次の同じようなデータの処理にその設定した マクロを使うと、 グラフを作る直前まではいいのですが、 グラフが全く一番最初にマクロを設定したグラフと 全く同じフォーマットにできるのです。。 ちなみにグラフは散布図です。 全く初心者なので、 うまく説明できてなかったらすみませんm(__)m

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.2

abekkanです。 >ソースとはどうやってみるのでしょうか? →ツール マクロ で記録したときのマクロ名を選択して 編集 をクリックしてください。

aimer
質問者

補足

ありがとうございます!! でも。。なぜか。。 ダイヤログが出るのです。 「表示されてないブックのマクロは編集できません。 ”ウィンドウ表示”コマンドを選択してウィンドウを表示してください」 とでます。 マクロを記録したはずのブックを開いて操作しても 同じです。。。。 どうしたらよいでしょう。。。(涙

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.1

マクロをどう作ったのかわからないので予想ですが、 時刻をnow関数で取得すると、(すでに書込み済みのセルも)シートを更新した際に現在時刻に更新してしまうので結局は最後に更新したときの時刻が入って全部D列が同じになるとか...(?) マクロ作成の途中に、コピー、形式を選択して貼り付け(値) の操作をはさんでやって値を固定させたらどうでしょう。 ソースを見せてもらえればもうすこし何か言えるかもしれません。

aimer
質問者

補足

マクロは、ツール→マクロ→新しいマクロの記録 をクリックしてそのまんま操作を テープに録音するように?記録しました。 なので、VBAとかはよくわからないのですが、 ソースとはどうやってみるのでしょうか?

関連するQ&A

  • マクロとオートフィル

    オートフィルを使った「マクロの記録」の部分でつまずいてしまいました。 A列に名前、B列に数字が入っていて、2列にオートフィルタをかけている場合 B列の0の数字のみを非表示にしたかったので オートフィルのタブを使って「0」のチェックマークを外すという動作を「マクロの記録」で記録しました。 そこまではいいのですが、データの追加があったのでオートフィルタの範囲内に数字と名前をそれぞれの列に追加したあと上記のマクロを使ってみると、どうしても追加したデータと0が非表示になってしまいます。 これを避けるにはVBAで指示しないと行けないのでしょうか?

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • (Excel VBA)困っています・・・orz

    エクセルを使うとある業務でマクロを組み、最適化を図ろうと試みているのですが 気がつけば高度な領域に突入していまして、僕みたいなレベルじゃ全然???な状況になってしまいました。 まず A列の1行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の文字列(ABCなど)があるとします。 それからオートフィルタを使い、A列からある任意の文字列(ABCなど)を検索条件にしてデータを抽出します。 抽出されたデータベースのA列には検索条件にある「ABC」が任意の行まであり、その抽出されたデーターベースのD列に今度は「XYZ」とという文字列を 抽出された分の最終行まで割り振る・・・ つまりA列《ABC》で検索され抽出されたデータのD列には《XYZ》が自動に入力される もし、検索条件(ABC)で抽出されたデータが「0」件だった場合は、D列には何もせず、次の検索条件に進む・・・ というものをマクロで組みたいのですがどうやったらよいのでしょうか?? 何卒、ご教授お願い致します。

  • エクセル 当月分のデータを抽出したい

    Sub データ抽出() Selection.AutoFilter Field:=9, Criteria1:=">=2009/9/1", Operator:=xlAnd, _ Criteria2:="<=2009/9/30" End Sub 上記はI列の2009年9/1~9/30のデータをオートフィルタで抽出するという単純なマクロの自動記録ですが、例えば今日上記のマクロを実行すると2009年10/1~10/31、来月上記のマクロを実行すると2009年11/1~11/30、来年の1月上記のマクロを実行すると2010年1/1~1/31というように常に当月分のデーターを抽出したいのです。アドバイスをお願いします。

  • Excel2003でシート保護(オートフィルタ使用にはチェック)するとマクロのオートフィルタでエラーになる

    QNo.3901563で回答いただき、Excelの試用で保護後のオートフィルタは使えないのはわかりました。 そこで予めオートフィルタを設定し、シートに保護をかけました。 Excelの画面上ではオートフィルタは使用できます。 マクロよりオートフィルタの抽出条件を変更するコマンドを実行すると「保護されたシートに対して、このコマンドは実行できません」と表示されます。コマンドは新しいマクロの記録で操作を記録したものです。記録したときは特にエラーはでませんでした。 Selection.AutoFilter Field:=2, Criteria1:="AAA" マクロのコマンドでは保護のかかったシートのオートフィルタの抽出条件を変更することは出来ないのでしょうか。 マクロの前後にシート保護を解除するコマンドを入れようかとも思ったのですが、保護にパスワードがかかっており、本末転倒となるもので。

  • エクセル-マクロ-オートフィルタ

    エクセルのマクロで、 オートフィルタでデータを抽出する場合、 引数Criterial,Criterial2で文字列を指定しますが、 Criterial3…とできません。 ・3個以上抽出したい場合 ・「*~」以外を抽出したい場合 がわかりません。 教えて下さいmm。

  • エクセルで閉じるときのマクロ

    あるエクセルファイルがあり、 その一枚のシートにはオートフィルタ (A~Z列まで)を使用しています。 【質問1】 ファイルを保存して閉じる際、 オートフィルタで抽出したものを 「すべて」に戻す、 つまりなにも抽出されていない(=左端の行番号が黒字) に戻すマクロはどこにどのように書けばよいでしょうか? オートフィルタを戻すマクロは、 'オートフィルタのあるシートを選択 Sheets("買取リスト").Select 'T列のオートフィルタを「すべて」にする Selection.AutoFilter Field:=22 というところまでは理解できました。 【質問2】 上記のマクロを Sheets("顧客リスト") から、Sheets("商品リスト")へ移動した際、 ボタン等を使用せずに、 (ただ、下のタブをクリックするだけで) 実行させることは可能でしょうか? 可能であれば、どこにどのように記述すれば よいでしょうか??  よろしくお願いします。

  • オートフィルタの抽出結果をマクロで表示するには?

    A 1000  D 200 A 500 A 1000 B 2000 上表をオートフィルタでA及び1000で絞ると左下に『4レコードで2個です。』と抽出個数が表示されると思いますが、その個数(2個)をマクロを使って表示させるにはどうすればいいでしょうか? マクロの記録でオートフィルタをかけるところまではできるのですが、個数表示で壁にぶち当たっています。 ちなみに1000を検索させて個数を出すという方法もありますが、2行目のデータが他の行にもあるため、データを検索させて個数を導くマクロは作られないので、オートフィルタからのマクロを作成しています。 マクロ初心者のため、分かる方いらっしゃいましたらご教授をお願いします。

  • Excel2003 本日の行を選んで印刷するマクロ

    Excel2003の操作方法について教えてください。 ファイル  A列に日付がランダムに入力されています  B列以降に他の項目が入力されています。 やりたいこと  A列で当日を選んで印刷し、当日が無い場合には、  「当日分はなし」と書いてある同じブック内のワークシートを印刷。  上記を毎日「フォームボタンを押すと印刷までしてくれる」  マクロを作りたいです。 疑問点  1 マクロの記録中の操作で、    TODAYでフィルタを掛けられるのでしょうか。   2 フィルタを掛けた時に当日があれば当日分を印刷し、    当日分が無ければ別のシートを印刷などという、    分岐を作る事はできるのでしょうか。 知識のレベル  ビジネス上で使う関数や書式の設定などは分かると思います。  マクロは<記録開始 作業 記録終了>でしか作成した事が無く、  マクロの書き方は勉強不足のため分かりません。  質問しておいて申し訳無いですが簡単に出来る方法があれば、  教えていただきたいです。 よろしくお願いいたします。

  • マクロでオートフィルタを使い、抽出した表の特定の列に一定のデータを入れたい

    マクロを使い、オートフィルタをし、A列の人名でデータを抽出しました。 この抽出した表のB列全てに、「本社」という文字列を入れる為には、どうすれば良いでしょうか? 皆様の知恵をお貸し下さい。 よろしくお願い致します。

専門家に質問してみよう