プロが教える店舗&オフィスのセキュリティ対策術

先日、下記の質問をさせて頂いて

Excelでファイル1ファイル2ファイル3と3つあります。
ファイル1とファイル2にはそれぞれシートAとシートBがあり
 
  B   C   D  E 
 ナンバー 氏名 年齢 性別 
  1   山本  25  男
  2   鈴木  35  男
  3   田中  45  女
  ・    ・  ・   ・
  ・    ・  ・   ・
  ・    ・  ・   ・

シートAシートB共、上記のような感じです。

これをファイル3に抽出したいのですが、
ファイル3も
ナンバー 氏名 年齢 性別
と、同じです。

条件としてファイル1とファイル2を入力するのは
ランダムに入力していきます。
ファイル1ファイル2に入力された時、マクロボタンを
押した時ファイル3に抽出したいのですが・・・

以下の文で解決しました。

Sub ボタン1_Click()
With Workbooks("ファイル3").Sheets("Sheet1")
GYOU1 = Range("B" & Rows.Count).End(xlUp).Row
GYOU2 = .Range("B" & Rows.Count).End(xlUp).Row +1
.Range("B" & GYOU2 & ":E" & GYOU2).Value = Range("B" & GYOU1 + 6  & ":E" & GYOU1).Value
End With
End Sub

追加で抽出する条件を追加したいのでアドバイスを頂きたいのですが

①B列は最初から数字が入っているため、抽出するのはB列~E列がすべて入力されている時
②毎回2行づつ入力するので抽出するのは最終行とその上の1行の2列をファイル3に抽出したい。



【本題】
  上記の質問を実際のシートに対して、みなさんの回答を参考にさせて頂いて、

Sub 移動()
Dim GYO1 As Long
Dim GYO2 As Long
With Workbooks("ファイル3.xlsx").ActiveSheet
GYO1 = Range("C" & Rows.Count).End(xlUp).Row
GYO2 = .Range("B" & Rows.Count).End(xlUp).Row + 1
.Range("B" & GYO2 & ":E" & GYO2).Value = Range("B" & GYO1 -1 & ":E" & GYO1 -1).Value
.Range("B" & GYO2 +1 & ":E" & GYO2 +1).Value = Range("B" & GYO1 & ":E" & GYO1).Value
End With
End Sub

これでマクロボタンを登録したら行けたのですが、マクロボタン押し忘れ対策として
B列からE列まで入力していってE列に値が入った時点で
このマクロを実行するにはどのように記述すればいいですか?
自分なりに調べてWorksheet_Changeまではたどり着いたのですがうまくいきません。

長々と分かりにくい分ですいませんが、知恵をお貸しください。

A 回答 (3件)

No.1です。


ファイル1とファイル2は同じものと思いますので、この際無視します。

>ファイル3に飛んでいきません
これは目的のデータがファイル3に入力されないということですよね?
ファイル3にはマクロは不要と思いますが・・・

必要なのは
・ファイル1のシートAモジュールにWorksheet_Changeイベントのプロシージャを書いて
 移動()プロシージャを呼び出す。
・ファイル1の標準モジュールに移動()プロシージャを書く
の2点です。
移動() プロシージャの起動条件はいろいろと都合があると思いますので、If文の中身を十分に検討下さい。

申し訳ありませんがうまく動作しない場合はデバグして詳細に、
目的の動作をしているかをご確認いただく必要があると思います。

・Worksheet_Changeのマクロは起動しているのか
・Target.Column の値は 目的の値(5)か
・移動() プロシージャに処理が移るか
・移動() プロシージャの動きはボタンで起動したときと同じか
などなど。

質問文のコードを組まれているのでデバグはされていると思いますが、、、
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …

それはすでにやってるよ!と言われると申し訳ない。
    • good
    • 0
この回答へのお礼

いろいろとありがとうございます。頂いた回答を参考に試行錯誤して組んでいくと飛ぶようになりました。
まだ中身は理解出来てませんが・・・しっかり勉強します。
分かりにくい内容にお付き合い頂きありがとうございました。

お礼日時:2016/06/11 17:12

No.1です。


コードが標準モジュールに書かれているならそのままでよいはずです。
デバッグはされていますでしょうか?
動作確認して、「ダメ」の内容についてご確認ください。
Worksheet_Changeのマクロが起動しないのか、移動()のマクロにとばないのか・・・・
if文で一時停止するようにしてステップ(F8)で動作チェックすると問題点が出ると思います。

「入力するシート」=ファイル1,2のシートA, B のつもりですが勘違いないでしょうか?

記述されているコードもファイル1,2の標準モジュールですよね?
    • good
    • 0
この回答へのお礼

No.1さんありがとうございます。

ファイル1,2の標準モジュールには質問文のコードを記述しています。

動作確認しましたがファイル3に飛んでいきません。
ファイル3には回答頂いたコードの下にファイル1,2と同じコードを
記述しています。

分かりにくい内容ですが、よろしくお願いします。

お礼日時:2016/06/09 01:41

こんにちは。


ずぼらで申し訳ないですが、ひとまず最後の5行だけ読んで、、、、
E列に入力があったら上記のマクロを起動させるだけであれば、
「入力するSheetのモジュール」に

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then 移動
End Sub

でいけませんかね?
    • good
    • 0
この回答へのお礼

ありがとうございます。
やってみたのですがダメでした。

「入力するSheetのモジュール」に頂いたコードを入力したのですが
その下に質問文にあるコードは入力する必要はありますか?

移動元シートにも質問文にあるコードを入力したのですがうまくいきません。
あとどこを訂正すればよいのでしょう?

お礼日時:2016/06/09 00:18

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