[[20190322220110]] 『VBA 可視セルのコピーを別ブックに貼り付け』(JIRO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 可視セルのコピーを別ブックに貼り付け』(JIRO)

VBA初心者です。教えてください。

開いている2つのBookがあります
TENKI元.xlsm
TENKI先.xlsm (このBOOKにマクロを作成)

...................................................................
TENKI元.xlsmの中身 項目行は11行目
加工日 加工順 親コード 子コード1 子コード2 機械 数
2019/03/15 1 xxxxx1 yyyyyy1 zzzzzz1 3 2
2019/03/15 1 xxxxx2 zzzzzz2 2 1
2019/03/18 1 xxxxx3 zzzzzz3 1 1
2019/03/18 1 xxxxx4 zzzzzz4 1 2
2019/03/19 1 xxxxx5 yyyyyy2 zzzzzz5 4 1
2019/03/19 1 xxxxx6 yyyyyy3 zzzzzz6 6 2
2019/03/20 1 xxxxx7 zzzzzz7 3 3
2019/03/20 1 xxxxx8 zzzzzz8 4 1
2019/03/20 1 xxxxx9 yyyyyy4 zzzzzz9 5 2
2019/03/20 1 xxxxx10 zzzzzz10 6 1
...................................................................
TENKI先.xlsmの中身 項目行は11行目
加工日 子コード1 子コード2 数 更新日
...................................................................

とりあえず、1行分をブック間で転記できることまでは確認できたものの、先にすすめず・・・、すみませんが、教えてください。
Sub tenki()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set wb1 = ThisWorkbook 'TENKI先.xlms
Set wb2 = Workbooks("TENKI元.xlsm")
Set ws1 = wb1.Worksheets("saki") 'TENKI先.xlmsのシート
Set ws2 = wb2.Worksheets("moto") 'TENKI元.xlmsのシート

ws1.Range("A12").Value = ws2.Range("A12").Value
ws1.Range("B12").Value = ws2.Range("D12").Value
ws1.Range("C12").Value = ws2.Range("E12").Value
ws1.Range("D12").Value = ws2.Range("G12").Value

End Sub

やりたいことと、条件ですが、
1)TENKI元.xlsmから、加工日、子コード1、子コード2、数をTENKI先.xlsmに転記したい
2)TENKI元.xlsmの機械列の6でオートフィルタをかけた可視セルのみをTENKI先.xlsmに転記したい
3)子コード1は必ず全行には入力されていない
4)行は可変ですが、子コード1以外は空白行はない
5)範囲はCellsで指定をしたい

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


>5)範囲はCellsで指定をしたい

どういう意味でしょうか?

(マナ) 2019/03/22(金) 22:43


オートフィルタではなく、フイルタオプションだと
抽出と、指定の列の転記を、同時に実行できます。
それでは、だめですか。

 >1)TENKI元.xlsmから、加工日、子コード1、子コード2、数をTENKI先.xlsmに転記したい 
 >2)TENKI元.xlsmの機械列の6でオートフィルタをかけた可視セルのみをTENKI先.xlsmに転記したい

(マナ) 2019/03/22(金) 23:07


マナ様 返信が遅くなりすみませんでした。
回答ありがとうございます。

5)の件は
ws1.Range("A12").Value = ws2.Range("A12").Value
↓このようにしたいという意味でした。
ws1.Cells(12, 1).Value = ws2.Cells(12, 1).Value

最初↓としてしまい、エラーですすまず、質問させていただきました。
ws1.Range(Cells(12, 1)).Value = ws2.Range(Cells(12, 1)).Value
ws1.Range(ws1.Cells(12, 1)).Value = ws2.Range(ws2.Cells(12, 1)).Value
RangeとCellsの使い方がイマイチな理解なもので、わかりづらい質問になってしまい、すみません

マナ様のメッセージを見て目が覚め↓これにすると良いのかなと思い、実行したら転記できました。
ws1.Cells(12, 1).Value = ws2.Cells(12, 1).Value

1)2)はAdvancedFilterを使用するということでしょうか?
フィルタオプション自体知りませんでした。教えていただき、ありがとうございます。
元にするデータは日時で読み込んで(1週間分)、約3000行表示されます、転記は約120行になります。
TENKI元.xlsmに影響がなければ問題はないです。

(JIRO) 2019/03/23(土) 09:25


転記先には、先週までのデータを残すのでしょうか。
それとも、最新の分だけ表示するのでそうか。

(マナ) 2019/03/23(土) 09:33


マナ様

転記先は、最新分だけの表示にしたいです。

(JIRO) 2019/03/23(土) 14:46


>転記先は、最新分だけの表示にしたいです。

ならば、全く問題ありません。
シンプルのコードになると思います。

>1)2)はAdvancedFilterを使用するということでしょうか?

はい。ですが、その前に、

>フィルタオプション自体知りませんでした。

ということであれば、まずは手作業で試してみるとよいです。
http://www4.synapse.ne.jp/yone/excel2010/excel2010_filter21.html

そのうえで、「マクロの記録」あるいはネット検索で
たたき台となるものは簡単に入手できます。

(マナ) 2019/03/23(土) 15:39


マナ様

ありがとうございます。
いろいろ試してみたいと思います。

(JIRO) 2019/03/23(土) 16:15


すみません、タイトルはブック間のコピーですが、
シート間のコピーで質問させてください。

シート(moto)のA列を
条件で絞ったセルのみ CriteriaRange:=ws1.Range(ws1.Cells(1, 6), ws1.Cells(2, 6))
シート(saki)のA列に転記する
つもりで書いたのですが、A列のすべての行が転記されてしまい、条件でしぼれていないようです、
どこが悪いのかを教えて頂きたく・・・

11行目はタイトル行

Sub tenki()
Dim wb1 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim n As Long

Set wb1 = ThisWorkbook 'TENKI先.xlms
Set ws1 = wb1.Worksheets("moto") '転記元のシート
Set ws2 = wb1.Worksheets("saki") '転記先のシート

wb1.Activate

    n = ws1.Cells(11, 1).End(xlDown).Row

    ws1.Range(ws1.Cells(12, 1), ws1.Cells(n, 1)).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=ws1.Range(ws1.Cells(1, 6), ws1.Cells(2, 6)), _
        CopyToRange:=ws2.Range("A12"), _
        Unique:=False

ws2.Activate
End Sub

(JIRO) 2019/03/23(土) 23:20


F1とF2には、何が入力されていますか。
手作業でも同じ結果ですか。

(マナ) 2019/03/24(日) 08:27


>11行目はタイトル行

 >    ws1.Range(ws1.Cells(12, 1), ws1.Cells(n, 1)).AdvancedFilter _
 >        Action:=xlFilterCopy, _
 >        CriteriaRange:=ws1.Range(ws1.Cells(1, 6), ws1.Cells(2, 6)), _
 >        CopyToRange:=ws2.Range("A12"), _
 >        Unique:=False

リスト範囲、抽出範囲、どちらも間違っていますね。
これだと手作業でもできないはずです。

(マナ) 2019/03/24(日) 08:56


マナ様 
返信が遅くなり、すみません。
回答ありがとうございます。

F1は「機械」F2は「6」が入ります

手動での設定がイマイチ理解できず(思うような結果を得られず)
あるサイトのサンプルを元に作成したのが質問のコードでした。
間違いを指摘していただき、マクロの記憶でよく考えてみました。
最初にマクロの記憶をやるべきでした・・・反省・・・指摘していただいたので、冷静になれました。

↓結果を得ることができました。良かった(泣)(ToT)明日進められます。

項目をmotoとsakiで合わせておくことが、列の抽出になるのだと分かりました。

    ws1.Range(ws1.Cells(11, 1), ws1.Cells(n, 7)).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=ws1.Range(ws1.Cells(1, 6), ws1.Cells(2, 6)), _
        CopyToRange:=ws2.Range(ws2.Cells(11, 1), ws2.Cells(11, 4)), _
        Unique:=False

ありがとうございました。

(JIRO) 2019/03/24(日) 22:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.