[[20181108100108]] 『1日の列に値で貼り付け』(赤由良) ページの最後に飛ぶ

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

 

『1日の列に値で貼り付け』(赤由良)

 Sheet1のC1:AM30を選択、コピー。Sheet2のE3に値で貼り付け。
 上の内容をマクロの記録で取ったコードが下になります。
 Sheet2の一行目には月の日付が数値で月/日の形式で入力されています。

 Sub 値で貼り付け()
 '
 ' 値で貼り付け Macro
 '

 '
     Range("C1:AM30").Select
     Selection.Copy
     ActiveWindow.SmallScroll Down:=-33
     Sheets("Sheet2").Select
     ActiveWindow.SmallScroll Down:=-21
     Range("E3").Select
     Selection.PadteSpecial Paste:=xlPasteValues, Operation:=xINone, SKipBlanks _
         :=False, Transpose:=False
     End Sub

 今月はE列が1日だったのでE3に貼り付けましたが、1日の列は毎月変わります。
 やりたいのは、Sheet1のC1:AM30を選択してSheet2の一行目の1日の列の3行目に値で貼り付けるというものです。
 マクロは記録をとることしか使えないレベルです。そもそも上のコードを実行しても何故かコピー範囲にない日付と曜日の情報が入り、2行ずれた状態で、貼り付けされました。

 ご教授お願いします。

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


まず、何日に貼りたいかの情報はどこにあるのでしょうか?
次に、貼り付け先が1日の場合はE3セルからだと判りましたが、2日の場合はどこになるのでしょう? C1:AM30 と、コピーする行数も列数もかなりあるのですが、SHeet2の1行目が日付ということは、横にとても長くなっていくのでしょうか? 月が変わった後は、またE3セルに戻って貼り付け?
(???) 2018/11/08(木) 11:52

 >何日に貼りたいかの情報はどこにあるのでしょうか?

 必ず1日の2行下、3行目に貼り付けをしたいです。

 >貼り付け先が1日の場合はE3セルからだと判りましたが、2日の場合はどこになるのでしょう?

 今回は1日がE3にあっただけで、1日の列は毎月変わります。2日の場合は、1日の右隣になりますがコピー範囲を貼り付けたら自然に揃います。1日の位置が動くという説明が不足していました。1から31日の表で、始まりの1日の位置が可変します。

 >SHeet2の1行目が日付ということは、横にとても長くなっていくのでしょうか?

 その通りです。ただ、列幅は狭いのでスクロールしない範囲に収まります。

 >月が変わった後は、またE3セルに戻って貼り付け?

 月が変わっても、1日の位置に貼り付けは変わらないです。
(赤由良) 2018/11/08(木) 12:17

 >1日の位置が動くという説明が不足していました

 最初の質問でも動くことはわかりますが、何で動くのかがわかりません。
 1日からの表なら常に固定では?
 それとも貼り付け先は1週目の月曜とか日曜から始まるのでしょうか?
 そういったことをきちんと書いて下さい。
(コナミ) 2018/11/08(木) 12:33

 マクロには疎く説明が不足して申し訳ありません。
 1日という情報があればそのセルを参照して・・・というものを勝手にイメージしていましたが、考えると1日は1日でも月が違うと中身も変わり参照できないですよね。

 毎月1日の位置が変わってもその列に貼りつけることをやりたかったのですが。

 位置が変わる理由についてはお待ちください。
(赤由良) 2018/11/08(木) 12:51

 理由ですが、前の月の最終月曜日から最終日までを表の最初にいれており、その隣から来月の1日を入れるためです。
(赤由良) 2018/11/08(木) 15:46

1日目がどの列なのか変わる、というのは判りました。 E3セルは常に月曜日、という事ですね。
10月は1日始まりだからE3セルに貼っているのでしょうけど、11月の場合はどうなりますか? E3セルは10/29なのか、11/5なのか。 前の月の最終…、との事だと、10/29ですかね?

まぁ、1行目に手入力で年月日を入れていれば、ここから探すだけなのですが、1行目を自動で埋める処理があっても良いですよね? 今は31日分手打ち、または足し算する数式でも入っているのでしょうか。

それと、まだ判らないのは、Sheet1のコピー元範囲は常に同じでしょうけど、これをSheet2の何日目に貼ればよいのかは、何処を見れば判るのでしょう? Sheet1のどこかのセルに、年月日が書かれているのでは?、と思うのですが。
(???) 2018/11/08(木) 16:40


とりあえず、Sheet1のA1セルに、いつの情報に転記したいのか年月日が書いてあるものとした例なぞ。
セル違いとかは、ご自身で直せるでしょう。 もし何処にも指定が無かった!、なんて場合は、InputBox関数でも使って入力させてください。
 Sub test()
    Dim wk1 As Worksheet
    Dim wk2 As Worksheet
    Dim dw As Date
    Dim i As Long

    Set wk1 = Sheets("Sheet1")
    Set wk2 = Sheets("Sheet2")
    dw = wk1.Range("A1").Value

    For i = 5 To wk2.Cells(1, wk2.Columns.Count).End(xlToLeft).Column
        If dw = wk2.Cells(1, i).Value Then
            Exit For
        End If
    Next i

    wk1.Range("C1:AM30").Copy
    wk2.Cells(3, i).PasteSpecial Paste:=xlPasteValues
 End Sub
(???) 2018/11/08(木) 17:15

すみません、衝突しました。
試すのは明日になりそうです。ありがとうございます。
(赤由良) 2018/11/08(木) 17:32

 作動しました。ありがとうございます。
 二点質問です。
 色々月を試していましたが、今年の10月のように1日が月曜の場合。つまり9月が日曜日で終わる場合は、Sheet2のAN列から右に一月分貼り付けされました。
 このような月は年に1、2回あるかないかなので、別にコピーしたものをそのままドラッグして左に動かすだけですから困りはしませんが、何故AMの隣、ANに貼り付けされるのかが気になります。後学の為にご教授お願いします。
 二点目。このコードを使えば別ブックからコピーデータを参照することもできるのではないかと考えたのですが、フルパスを入れるくらいしか思い浮かばず。ヒントをいただけると幸いです。
(赤由良) 2018/11/09(金) 07:54

1列ずれるというのは良くわかりませんね。1行目の年月日と一致した列に貼っているだけなので、1行目が途中で1列ずれていたりしませんか?

そして、他ブックからのコピーももちろん可能です。 マクロ内でWorkBooks.Open を使ってブックを開いて(WorkBookオブジェクト宣言した変数に代入すると良いでしょう)、これのシートをwk1に代入するよう、変えてみてください。
(???) 2018/11/11(日) 02:28


コメント返信:

[ 一覧(最新更新順) ]


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