Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3308 / 13645 ツリー ←次へ | 前へ→

【62981】エクセルマクロ初心者 kousen 09/9/29(火) 10:01 質問[未読]
【62982】Re:エクセルマクロ初心者 kanabun 09/9/29(火) 10:42 発言[未読]
【62983】Re:エクセルマクロ初心者 kousen 09/9/29(火) 12:06 質問[未読]
【62984】Re:エクセルマクロ初心者 kanabun 09/9/29(火) 13:08 発言[未読]
【62985】Re:エクセルマクロ初心者 kousen 09/9/29(火) 15:40 質問[未読]
【62986】Re:エクセルマクロ初心者 kanabun 09/9/29(火) 16:23 発言[未読]

【62981】エクセルマクロ初心者
質問  kousen E-MAIL  - 09/9/29(火) 10:01 -

引用なし
パスワード
   エクセルマクロを始めたばかりです質問もどのようにすればよいかよくわかりませんが、お願いします。

Sub Macro1()
'
' Macro1 Macro
'

  Windows("Book11.xls").Activate
  Range("A1:A10").Select
  Selection.Copy
  Windows("Book12.xls").Activate
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub
上の単純なブック同士のコピーの式ですが、
この場合ブック名が指定してありますが、ブック名が変化する場合
ブック名を指定しないで、オープンしているブック同士のこーピーをすることができるのでしょうか?
その場合上の式をどのよう変えればいいのでしょうか?

【62982】Re:エクセルマクロ初心者
発言  kanabun  - 09/9/29(火) 10:42 -

引用なし
パスワード
   ▼kousen さん:

>上の単純なブック同士のコピーの式ですが、
>この場合ブック名が指定してありますが、ブック名が変化する場合
>ブック名を指定しないで、オープンしているブック同士のこーピーをすることができるのでしょうか?

コピー元のシートをアクティブにしておいて、
以下を実行したらどうなりますか?

   With Application.Windows
     .Item(1).ActiveSheet.Range("A1:A10").Copy
     .Item(2).Activate
     ActiveSheet.Range("A1").PasteSpecial xlPasteValues
   End With
   Application.CutCopyMode = True

【62983】Re:エクセルマクロ初心者
質問  kousen E-MAIL  - 09/9/29(火) 12:06 -

引用なし
パスワード
   ▼kanabun さん:
>▼kousen さん:
>
>>上の単純なブック同士のコピーの式ですが、
>>この場合ブック名が指定してありますが、ブック名が変化する場合
>>ブック名を指定しないで、オープンしているブック同士のこーピーをすることができるのでしょうか?
>
>コピー元のシートをアクティブにしておいて、
>以下を実行したらどうなりますか?
>
>   With Application.Windows
>     .Item(1).ActiveSheet.Range("A1:A10").Copy
>     .Item(2).Activate
>     ActiveSheet.Range("A1").PasteSpecial xlPasteValues
>   End With
>   Application.CutCopyMode = True
kanabunさん早速の回答有難うございます。
いただいたマクロをコピーして実行してみましたらできました。

kanabunさんは、マクロについてお詳しいようなのでもう少し踏み込んだ質問をさせてもらってかまいませんか?
この式の場合、アクティブになっているブックのデーターをコピーすることになりますが、
マクロのあるブックのほうにデーターを取り込みたいのですが?
それとシート自体は、確定した方法で取り込みたいのですが?
どうも初心者なのでどう記入してよいかわかりませんが、
たとえば
マクロのあるブックのシート1に、もう一つのブックのシート1・2・3のデータをコピーする場合などです(シート名は変化しません)
分かり難い内容で申し訳ありませんがお願いします。

【62984】Re:エクセルマクロ初心者
発言  kanabun  - 09/9/29(火) 13:08 -

引用なし
パスワード
   ▼kousen さん:

> マクロのあるブックのシート1に、
> もう一つのブックのシート1・2・3のデータをコピーする場合
> (シート名は変化しません)

マクロのあるBookは ThisWorkbook です。
いまアクティブになっているBookはActiveWorkbook です。

このばあいは Windows オブジェクトを使わないで、
Book間のコピペを実行できます。

'コピー元Bookに「Sheet1」「Sheet2」「Sheet3」があるとします。
'この3つのシートから同じセル範囲を マクロのあるBookの「Sheet1」
 A列にコピペします。

'コピー元Bookのほうをアクティブにして以下を お試しください
Sub Copy_to_ThisWorkbook()
  Dim ws As Worksheet
  For Each ws In ActiveWorkbook. _
          Worksheets(Array("Sheet1", "Sheet2", "Sheet3"))
    ws.Range("A1:A10").Copy _
    ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1)
  Next
End Sub

【62985】Re:エクセルマクロ初心者
質問  kousen E-MAIL  - 09/9/29(火) 15:40 -

引用なし
パスワード
   ▼kanabun さん:
>▼kousen さん:
>
>> マクロのあるブックのシート1に、
>> もう一つのブックのシート1・2・3のデータをコピーする場合
>> (シート名は変化しません)
>
>マクロのあるBookは ThisWorkbook です。
>いまアクティブになっているBookはActiveWorkbook です。
>
>このばあいは Windows オブジェクトを使わないで、
>Book間のコピペを実行できます。
>
>'コピー元Bookに「Sheet1」「Sheet2」「Sheet3」があるとします。
>'この3つのシートから同じセル範囲を マクロのあるBookの「Sheet1」
> A列にコピペします。
>
>'コピー元Bookのほうをアクティブにして以下を お試しください
>Sub Copy_to_ThisWorkbook()
>  Dim ws As Worksheet
>  For Each ws In ActiveWorkbook. _
>          Worksheets(Array("Sheet1", "Sheet2", "Sheet3"))
>    ws.Range("A1:A10").Copy _
>    ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1)
>  Next
>End Sub
度々の回答有難うございます。
コピーして使用してみましたOKでした有難うございます。
ひつこいようですが今一度お願いします。
この式をほかにも応用しようと思って自分なりに修正したのですが、エラーになってしまいます。
sheet1とsheet1のようにたんいつSHEETだけでの場合上の式はどの程度省略できるのでしょうか?
如何せん式の内容が何を意味しているのかわからないのでよろしくお願いします。

【62986】Re:エクセルマクロ初心者
発言  kanabun  - 09/9/29(火) 16:23 -

引用なし
パスワード
   ▼kousen さん:

レスを全文引用されると、要旨が把握できにくくなるので、
質問に必要な個所のみに絞って引用をお願いします。

>ひつこいようですが今一度お願いします。
>この式をほかにも応用しようと思って自分なりに修正したのですが、エラーになってしまいます。
>sheet1とsheet1のようにたんいつSHEETだけでの場合上の式はどの程度省略できるのでしょうか?

ヘルプによると、RangeオブジェクトのCopyメソッドの構文は以下のようです:

 Range.Copy (Destination)

ここで、引数Destination:= には コピー先のセル範囲を指定します。
    この引数を省略すると、クリップボードへコピーされます。
とあります。

範囲のコピーには、これを使っているだけです。
まず、同じシート内で あるセル範囲を別のセルへコピーするには
  Range("A2:A12").Copy Destination:=Range("D2")
とします。
  引数名 Destination:= を省略して、
  Range("A2:A12").Copy Range("D2")
としても、OK です。

つぎに、あるシートの範囲を「同じBookの」別のシートへCOPYするときは
範囲の前に シートを明示的に指定してやります。
(そうしないと、範囲は ActiveSheet の範囲と解釈されます
 <標準モジュール> 内では)

  Worksheets("Sheet1").Range("A2:A12").Copy _
    Worksheets("Sheet2").Range("A2")
  (注)上の記述で、一行目のお尻に スペース+ _ がありますが、
    これは「文章が次の行に続くよ」という意味です。

  Worksheets("Sheet1").[A2:A12].Copy Worksheets("Sheet2").[A2]

と書いても同じことです。

今度は、本題の異なるBook間のコピーです。
このばあいは シートのまえに、Bookを明示してやります。
どのWorkbookかは Book名を使ってもいいし、
先述のように マクロのあるBookが ThisWorkbookオブジェクト、
いまアクティブになっているWorkbook が ActiveWorkbook で
あることを利用していもいいです。
たとえば、Rangeの簡略記法を使って書くと、

  ActiveWorkbook.Worksheets("Sheet1").[A2:A12].Copy _
   ThisWorkbook.Worksheets("Sheet2").[A2]

となります。

ActiveWorkbookの複数シートのセルを巡回してマクロのあるBookに
COPYを繰り返すときは、先述したように
For Each 〜 Next 構文を利用したりします。

3308 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free