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

マクロで貼り付け位置を可変させる方法が知りたいです。



計算処理用のブックから、集計用のブックへデータを貼り付ける際、
データの分類ごとに貼り付ける位置を可変させる方法を知りたいです。

・Book1は、計算処理用のブックです。
・このBook1で処理したデータを、Book2に貼り付けます。
・今Book1にあるデータは「東京」となっていますので
 集計用のBook2のA列ににデータをコピペします。
・貼り付ける際は、Book2にある既存のデータの最後尾から1行空けて貼り付けます。
・もし、Book1のデータが「大阪」であれば、Book2のC列に貼り付けます。

手動で分類ごとに場所を探して貼り付けていると効率が悪く、
マクロで分類の場所を自動で特定して、データを蓄積したいのです。

ご教授の程、宜しくお願い申し上げます。

「マクロで貼り付け位置を可変させる方法が知」の質問画像

質問者からの補足コメント

  • 質問の不備でした。

    マクロは、Book1に記述したいです。
    また、「東京・大阪」等の分類は多数あります。

      補足日時:2018/02/10 10:34
  • はい、ぜひお願い致します。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/02/10 11:40
  • すみません。

    「該当するセルが見つかりません」というエラーになりました。

    >'コピー
    >Union(ws1.Range("A2:A" & Rows.Count).SpecialCells(xlCellTypeFormulas, 1), _
    >ws1.Range("A2:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 23)).Copy

    上記の部分が、黄色でハイライトされています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/02/10 11:58
  • 質問の添付画像ではA列にのみデータがありますが、
    実際には複数列にデータがあります。

    そこで、Book1の都市名はA1のままで、その下のデータがA2からK列まであった場合、
    コードのどの部分を変更すれば宜しいでしょうか。

    データの列数は常に一定です。

    No.6の回答に寄せられた補足コメントです。 補足日時:2018/02/10 21:49
  • すみません、
    >For 列 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column Step 2
    の最後の数字を変更する事で、自己解決しました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2018/02/10 22:11

A 回答 (6件)

No.5 の追補



※「集計ブック名」は適当に直して下さい。
※ 集計ブックが開いていたらそのまま処理します。開いていない場合は同じフォルダーに有れば自動で開きますが無いとエラーになると思います。事前に開いておくからそんな機能不要というなら以下の数行を削除してください。
--------------------------------------------------------------------------------
For Each ワークブック In Workbooks
If ワークブック.Name = 集計ブック名 Then
有 = True
Exit For
End If
Next
If 有 Then
--------------------------------------------------------------------------------
Else
Workbooks.Open Filename:=集計ブック名
End If
--------------------------------------------------------------------------------
この回答への補足あり
    • good
    • 0
この回答へのお礼

希望通りの処理が出来ました。

多くのデータを蓄積しなければならないので、本当に助かりました。

No.4さんのご回答も同様の結果が得られたのですが、
「未登録の都市だった場合は自動で追加」という点が大変有り難く、
ベストアンサーにさせて頂きます。

本当に有難うございました。

お礼日時:2018/02/10 22:21

こんなのはいかがですか?


--------------------------------------------------------------------------------
Sub 集計()
Const 集計ブック名 As String = "Book2.xlsx"
Dim ワークブック As Workbook
Dim 有 As Boolean
Dim 終 As Long
Dim 都市名 As String
Dim 列 As Long
ThisWorkbook.Activate
Sheets("計算処理用").Select
終 = Cells(Rows.Count, 1).End(xlUp).Row
If 終 = 1 Then Exit Sub
Range("A2:A" & 終).Copy
都市名 = Range("A1").Value
For Each ワークブック In Workbooks
If ワークブック.Name = 集計ブック名 Then
有 = True
Exit For
End If
Next
If 有 Then
Windows(集計ブック名).Activate
Else
Workbooks.Open Filename:=集計ブック名
End If
Sheets("集計用").Select
For 列 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column Step 2
If Cells(1, 列).Value = 都市名 Then Exit For
Next
終 = Cells(Rows.Count, 列).End(xlUp).Row
If 終 = 1 Then
Cells(1, 列).Value = 都市名
Cells(2, 列).Select
Else
Cells(終 + 2, 列).Select
End If
ActiveSheet.Paste
Application.CutCopyMode = False
ThisWorkbook.Activate
Columns("A:A").ClearContents
End Sub
--------------------------------------------------------------------------------
※ 未登録の都市だった場合は自動で追加します。
この回答への補足あり
    • good
    • 0

失礼しました。

では、こうしてみて下さい。

'コピー
ws1.Range(ws1.Range("A2"), ws1.Cells(Rows.Count, "A").End(xlUp)).Copy
    • good
    • 0
この回答へのお礼

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

No.4さんとNo.5さんのどちらも、希望通りの処理が出来たのですが、
No.5さんの多機能性が有り難く、心苦しいですがNo.5さんをベストアンサーにさせて頂きます。

No.4さんもベストアンサーにさせて頂きたかったのですが…

申し訳ありません。

本当に有難うございました。

お礼日時:2018/02/10 22:17

ペースト先を特定する方法のご質問のようですが、それよりもコピー元を特定する方が難しそうですね~。


計算処理用シートとのことなので、数式なども含まれている前提で考えてみました。

Sub sample()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim c As Range
Set ws1 = Workbooks("Book1").Sheets("計算処理用")
Set ws2 = Workbooks("Book2").Sheets("集計用")
'コピー先のセルを取得する
On Error Resume Next
Set c = ws2.Cells(Rows.Count, WorksheetFunction.Match(ws1.Range("A1").Value, ws2.Rows(1), 0)).End(xlUp).Offset(2)
On Error GoTo 0
If c Is Nothing Then
MsgBox "該当なし"
Exit Sub
End If
'コピー
Union(ws1.Range("A2:A" & Rows.Count).SpecialCells(xlCellTypeFormulas, 1), _
ws1.Range("A2:A" & Rows.Count).SpecialCells(xlCellTypeConstants, 23)).Copy
'ペースト(値張り付け)
c.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
この回答への補足あり
    • good
    • 0

貼り付け後 Book1 のデータは、2重貼付けの防止用にクリアした方が良いでしょうか?

この回答への補足あり
    • good
    • 0

ちなみにマクロのコードは次のどのブックに記述する予定ですか?


① Book1
② Book2
③ 別のブック
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A