[[20170214133115]] 『コードの簡略化』(ダダンダン) ページの最後に飛ぶ

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

 

『コードの簡略化』(ダダンダン)

ブック1の一部のデータをブック2に貼り付け、貼り付け後、
表示したデータをオートフィルタで自動にまとめてるファイルがあります。

マクロの記録を使ってコードを作成した為、
下記の様な、ブック1からブック2に貼り付けるコードが沢山あるのですが、
上手く短く纏められないでしょうか?
宜しくお願いします。

 Windows(Book1).Activate
  Worksheets("Sheet1").Activate
     Sheets("Sheet1").Columns("F:G").Select
     Application.CutCopyMode = False
     Selection.Copy
 Windows(Book2).Activate
  Sheets("Sheet2").Columns("B:C").Select
     ActiveSheet.Paste

Windows(Book1).Activate

  Worksheets("Sheet1").Activate
     Sheets("Sheet1").Columns("B:C").Select
     Application.CutCopyMode = False
     Selection.Copy
 Windows(Book2).Activate
  Sheets("Sheet2").Columns("D:E").Select
     ActiveSheet.Paste

Windows(Book1).Activate

  Worksheets("Sheet1").Activate
     Sheets("Sheet1").Columns("H:I").Select
     Application.CutCopyMode = False
     Selection.Copy
 Windows(Book2).Activate
  Sheets("Sheet2").Columns("F:G").Select
     ActiveSheet.Paste

        .
        .
        .
        .
        .

< 使用 アプリ:Excel2000、使用 OS:WindowsXP >


こんにちは

Sub test()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = Workbooks("Book1").Worksheets("Sheet1")
    Set sh2 = Workbooks("Book2").Worksheets("Sheet2")
    With sh2
        sh1.Columns("F:G").Copy .Columns("B:C")
        sh1.Columns("B:C").Copy .Columns("D:E")
        sh1.Columns("H:I").Copy .Columns("F:G")
        .
        .
        .
        .
        .
    End With
End Sub

こんな感じで。

(ウッシ) 2017/02/14(火) 14:01


ウッシさん ありがとうございます!
完璧です!とても助かりました!
(ダダンダン) 2017/02/14(火) 15:10

追加で教えて欲しいんですけど、
以前教えて頂いた方法で、
下記コードを簡略化したいのですが、上手く行きません。
どの様にしたら良いのでしょうか?

  Windows(Book1).Activate

    Sheets("Sheet1").Cells(ActiveCell.Row, 1).Select
    Selection.Copy
    Windows(Book2).Activate
    Sheets("Sheet2").Range("C5").Select
    Selection.PasteSpecial Paste:=xlValues

    Windows(Book1).Activate
    Sheets("Sheet1").Cells(ActiveCell.Row, 2).Select
    Selection.Copy
    Windows(Book2).Activate
    Sheets("Sheet2").Range("C7").Select
    Selection.PasteSpecial Paste:=xlValues
              ・
       ・
       ・
    Windows(Book1).Activate
    If Sheets("Sheet1").Cells(ActiveCell.Row, 19) = "TRUE" Then
    Windows(Book2).Activate
    Sheets("Sheet2").Range("F8").Value = "○"
    Else
    Windows(Book1).Activate
    Sheets("Sheet1").Cells(ActiveCell.Row, 19) = "FALSE"
    Windows(Book2).Activate
    Sheets("Sheet2").Range("F8").Value = "×"
    End If
    Windows(Book1).Activate
    If Sheets("Sheet1").Cells(ActiveCell.Row, 20) = "TRUE" Then
    Windows(Book2).Activate
    Sheets("Sheet2").Range("F9").Value = "○"
    Else
    Windows(Book1).Activate
    Sheets("Sheet1").Cells(ActiveCell.Row, 20) = "FALSE"
    Windows(Book2).Activate
    Sheets("Sheet2").Range("F9").Value = "×"
    End If
              ・
       ・
       ・

を、
以前教えて頂いた方法で、
   With sh2

          sh1.Cells(ActiveCell.Row, 1).Copy .Range("C5).PasteSpecial Paste:=xlValues
            sh1.Cells(ActiveCell.Row, 2).Copy .Range("C7).PasteSpecial Paste:=xlValues

な感じになるのかなと思ったんですが、ダメでした。

(ダダンダン) 2017/02/20(月) 18:18


本題と別のことで質問です。

>sh1.Cells(ActiveCell.Row, 1).Copy

このActiveCellは、どのセルのつもりでしょうか

(マナ) 2017/02/20(月) 19:26


ブック1のシート1の任意のセルを選択し(これがActiveCell)
その行のセルを別ブックのシート2に転記するマクロと考えてよいですか。

つまり、ブック1のシート1がActiveな状態で実行するマクロということですか。

(マナ) 2017/02/20(月) 19:38


こんにちは

Sub test()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim r   As Long
    Set sh1 = Workbooks("Book1").Worksheets("Sheet1")
    sh1.Activate
    r = ActiveCell.Row
    Set sh2 = Workbooks("Book2").Worksheets("Sheet2")
    With sh2
        .Range("C5").Value = sh1.Cells(r, 1).Value
        .Range("C7").Value = sh1.Cells(r, 2).Value
        .
        .
        .
        If sh1.Cells(r, 19) = "TRUE" Then
            .Range("F8").Value = "○"
        Else
            sh1.Cells(r, 19) = "FALSE"
            .Range("F8").Value = "×"
        End If
        If sh1.Cells(r, 20) = "TRUE" Then
            .Range("F9").Value = "○"
        Else
            sh1.Cells(r.Row, 20) = "FALSE"
            .Range("F9").Value = "×"
        End If
        .
        .
    End With
End Sub

こういう事ですか?

(ウッシ) 2017/02/21(火) 09:01


コメント遅くなりすみません。

マナさん コメントありがとうございます!

ウッシさん 正にそういうことです!
ありがとうございます!バッチリ動作しました!!

でも簡略化って難しいですね。
理解してないと応用が出来そうで出来ないものなんですね。
言葉を調べて意味が分かっても、組み合わせれないとダメですし。。。
(ダダンダン) 2017/02/21(火) 11:51


>理解してないと応用が出来そうで出来ないものなんですね。
そうですね。
コード眺めて傾向と対策を見つけて変えればいいかなと思っても、
なかなか、意図通り動いてくれません。

でも、書いてもらったサンプルコードを落ち着いて眺めれば、
日本語の文法に近い部分も多いので、
そこまで難しくはないと思います。

(まっつわん) 2017/02/21(火) 12:02


コメント返信:

[ 一覧(最新更新順) ]


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