[[20180216125441]] 『基本データから一括取り込みするマクロ』(マクロ初心者) ページの最後に飛ぶ

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

 

『基本データから一括取り込みするマクロ』(マクロ初心者)

[[20180215112325]]にて質問させていただきましたが、
別の内容の質問であるため、
改めて、質問させていただきます。

以下のようなシートがあります。
午前と午後それぞれ20行あります。
日付間は2行の空白行があります。
これが31日分あります。

___B_____C_____D_____E______F
_2_2018__2
_3
_4_______2/1___午前
_5_担当__名前__区分__開始___終了
_6_小平__山田__A____8:30___10:00
_7_羽生__鈴木__B____10:15__11:15

25_平野__岩田__C____11:00__11:55
26_______2/1___午後
27_担当__名前__区分__開始___終了
28_羽生__山下__B____12:00__13:00
29_宇野__久保__C____13:15__14:15

47_高木__柴田__A____16:00__17:00
48
49
50_______2/2___午前

上記の7日までが基本のデータとなります。
以下のような形になります。
もちろん、曜日は月によって変わります。
上記表のB2(年)とC2(月)を切り替えると日付が変わる仕組みです。
1日(月) B6:F25,B28:F47
2日(火) B52:F71,B74:F93
3日(水) B98:F117,B120:F139
4日(木) B144:F163,B166:F185
5日(金) B190:F209,B212:F231
6日(土) B236:F255,B258:F277
7日(日) B282:F301,B304:F323

上記の7日分のデータを基に、その月内の同じ曜日にデータを一括で取り込むマクロを組みたいです。
1日→8日、2日→9日、3日→10日という具合に取り込めればと思います。
当然、月によって日数も異なりますので、本年2月であれば28日までなので、上記表の29日から31日までの枠には、
日付欄(C列)は空欄となるようにしています。
1日〜7日分のデータを8日以降に一括で取り込む際、日付が空欄の箇所にはデータは取り込まない形にしたいのです。

みなさん、ご教授のほどよろしくお願いいたします。

日付は以下のセルに入っています。
上から二つずつが同じ日付になります。
C4とC26は1日、C50とC72は2日、以降31日まであります。

 C4 
 C26 
 C50 
 C72 
 C96 
 C118 
 C142 
 C164 
 C188 
 C210 
 C234 
 C256 
 C280 
 C302 
 C326 
 C348 
 C372 
 C394 
 C418 
 C440 
 C464 
 C486 
 C510 
 C532 
 C556 
 C578 
 C602 
 C624 
 C648 
 C670 
 C694 
 C716 
 C740 
 C762 
 C786 
 C808 
 C832 
 C854 
 C878 
 C900 
 C924 
 C946 
 C970 
 C992 
 C1016 
 C1038 
 C1062 
 C1084 
 C1108 
 C1130 
 C1154 
 C1176 
 C1200 
 C1222 
 C1246 
 C1268 
 C1292 
 C1314 
 C1338 
 C1360 
 C1384 
 C1406 

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


マクロを組みたいとおっしゃるなら、ご自身で調べて、書いて、試して、直してと、こつこつ繰り返す事です。 「こうしたい。お願いします。」だと、マクロの作成依頼です。 最後の問いに答えが付かなかったのも、質問ではなく作業依頼だったからではないですか?

全部聞くのではなく、ここが判らないとか、こう書いてみたけどこうなってしまったとか、ご自身で動いた結果を添えて質問してください。
(???) 2018/02/16(金) 13:09


すいません。
マクロの記録でやってはみたんですが、日付が空欄の箇所は取り込まないというやり方が全くわからなくて、
つい聞いてみた次第です。すいません。
(マクロ初心者) 2018/02/16(金) 23:40

>日付が空欄の箇所は取り込まないというやり方が全くわからなくて
ということは、とりえあえず、すべてを取り込むのはできるんですよね?

ものを見ないとアドバイスが可能かどうかわかりませんが、そちらをベースに改良していったほうがいいかもしれないので、まずはそのコードを提示されたらいかがでしょうか?

もっとも、マクロの記録〜 っておっしゃっているので多少は自力で整理してからにしていただきたいとは思いますが。。。。
(もこな2) 2018/02/16(金) 23:48


この学校でも度々、指摘されていますが。元情報、レコードは一行で管理された方が後々
作表されるとき。便利かと思います。担当者が複数の場合でも縦に並べず列に

年、月、日、曜日、担当1、担当2、担当3、.....開始、終了、午前/午後

28〜31行、年間でも365行です。
何かの参考になればです。

<< _ _ >>

(隠居じーさん) 2018/02/17(土) 10:04


追伸。
年月日はシリアル値が使えますので、一列に格納の方が使い方によっては
便利かもです。

(隠居じーさん) 2018/02/17(土) 10:12


>上記の7日分のデータを基に、その月内の同じ曜日にデータを一括で取り込むマクロを組みたいです。

どこから。どこに転記すればよいのか全くイメージできません。
単に、行の表示、非表示だけでできそうな気もします。

手作業でするとしたら、どんな手順になるか
箇条書きで説明しいただけますか。

(マナ) 2018/02/17(土) 17:27


みなさん、ありがとうございます。
???さん、もこな2さん、隠居じーさん、ご指摘ありがとうございます。

マナさんの問いにお答えします。
以下が基本になるデータです。
1日から31日まであって、一つの日付が午前と午後それぞれ20行あります。
日付と日付間は2行の空白行があります。
これが31日分あります。
1日(月) B6:F25,B28:F47
2日(火) B52:F71,B74:F93
3日(水) B98:F117,B120:F139
4日(木) B144:F163,B166:F185
5日(金) B190:F209,B212:F231
6日(土) B236:F255,B258:F277
7日(日) B282:F301,B304:F323
1日であれば、B6:F25,B28:F47にデータを手入力しています。
これを同じ曜日である8日、15日、22日、29日に1日のデータを一括で取り込みたいというものです。
もちろん、コピーして貼り付ければよいかもしれませんが、そこをマクロで一括で取り込めたらと思います。
2日〜7日も同様になりますので、2月で言えば、8日から28日までのデータを上記の基本となるデータ(同じ曜日)からマクロボタンを作成して一括で取り込めたらと思います。
2月であれば、28日までなので、以下の日付枠は空欄となるよう関数を設定してますので、
日付枠が空欄の範囲にはデータを取り込まないようにしたいのです。当然、月によって変動しますので、それに対応したいです。
29日 C1292

     C1314 
30日 C1338 
     C1360 
31日 C1384 
     C1406

説明がへたくそで分かりずらくて申し訳ありません。
何卒よろしくお願いいたします。

(マクロ初心者) 2018/02/17(土) 18:12


追伸
それと、これは同一のシートに1日から31日まであって、
1日から7日までのデータを8日以降の同じ曜日に一括で取り込みたいというものです。
(マクロ初心者) 2018/02/17(土) 18:17

>もちろん、コピーして貼り付ければよいかもしれませんが、

1日(月)のデータを手作業でコピー貼り付けする手順を
「箇条書き」で説明してください。

どのセル範囲をコピーして、
どのセルに貼り付けるのか
わかるように具体的に説明してください。

(マナ) 2018/02/17(土) 18:29


マナさん、ありがとうございます。

1日(月)のB6:F25をコピーして、8日(月)のB328:F347に貼り付けます
1日(月)のB28:F47をコピーして、8日(月)のB350:F369に貼り付けます

よろしくお願いします。
(マクロ初心者) 2018/02/17(土) 18:42


マクロを考えるお手伝いをしようと考えていましたが、その前に確認です。

8〜31日のセルを、1〜7日のセルとリンクしておくだけでは駄目なのですか?
そうすれば、マクロいらないと思うのですが。

(マナ) 2018/02/17(土) 18:43


マナさんがおっしゃるように、今の形がリンクさせているのです。
しかし、8日以降のデータが必ずしも1〜7日と同じではない場合もあり、その際は手入力で修正するというやり方なのですが、、、そうしてしまうとリンクの式が消えてしまうので、マクロで取り込めたらと思っております。
(マクロ初心者) 2018/02/17(土) 18:47

そうですか。

>1日(月)のB6:F25をコピーして、8日(月)のB328:F347に貼り付けます
>1日(月)のB28:F47をコピーして、8日(月)のB350:F369に貼り付けます

15日には、貼り付けしないのですか?

(マナ) 2018/02/17(土) 18:50


すいません。以下のとおりです。
これは、30日又は31日まである月の場合ですね。

1日(月)のB6:F25をコピーして、15日(月)のB650:F669に貼り付けます
1日(月)のB28:F47をコピーして、15日(月)のB672:F691に貼り付けます

1日(月)のB6:F25をコピーして、22日(月)のB972:F991に貼り付けます
1日(月)のB28:F47をコピーして、22日(月)のB994:F1013に貼り付けます

1日(月)のB6:F25をコピーして、29日(月)のB1294:F1313に貼り付けます
1日(月)のB28:F47をコピーして、29日(月)のB1316:F1335に貼り付けます
(マクロ初心者) 2018/02/17(土) 18:57


手作業で実施する場合、本当にその順番でしますか?

(マナ) 2018/02/17(土) 19:01


はい、そうします。
同日の午前と午後の間に行が2行入っているため、同じ日へのコピーも2度する必要があるです。
(マクロ初心者) 2018/02/17(土) 19:03

わたしなら、1日の午前をコピーしたら、8日、15日、22日、29日と貼付けると思いますが。
その後で、午後についてします。
そうはしないのですか。

(マナ) 2018/02/17(土) 19:32


マナさんのおっしゃる通りです。
私のやり方は効率悪いですよね。
(マクロ初心者) 2018/02/17(土) 19:49

では、手順を書き直していただけますか。

(マナ) 2018/02/17(土) 19:52


マナさん、ありがとうございます。
これでよいでしょうか。

1日(月)のB6:F25をコピーして、15日(月)のB650:F669に貼り付けます
1日(月)のB6:F25をコピーして、22日(月)のB972:F991に貼り付けます
1日(月)のB6:F25をコピーして、29日(月)のB1294:F1313に貼り付けます
1日(月)のB28:F47をコピーして、15日(月)のB672:F691に貼り付けます
1日(月)のB28:F47をコピーして、22日(月)のB994:F1013に貼り付けます
1日(月)のB28:F47をコピーして、29日(月)のB1316:F1335に貼り付けます
(マクロ初心者) 2018/02/17(土) 19:59


8日も入れてください。
あと何度も同じセル範囲をコピーする必要ありますか。
無駄だと思いませんか。

(マナ) 2018/02/17(土) 20:03


8日入れてませんでした。抜け作でごめんなさい。
同じ範囲を何度もコピー無駄だとは思いますが・・・

1日(月) B6:F25 → 8日(月) B328:F347
1日(月) B6:F25 → 15日(月) B650:F669
1日(月) B6:F25 → 22日(月) B972:F991
1日(月) B6:F25 → 29日(月) B1294:F1313

1日(月) B28:F47 → 8日(月) B350:F369
1日(月) B28:F47 → 15日(月) B672:F691
1日(月) B28:F47 → 22日(月) B994:F1013
1日(月) B28:F47 → 29日(月) B1316:F1335
(マクロ初心者) 2018/02/17(土) 20:10


>同じ範囲を何度もコピー無駄だとは思いますが・・・

ならば、なぜ繰り返すのですか。
手作業で、そんな面倒なことしますか。
普通は、貼付けだけを場所を変えて実行しませんか。

想像はつきますが、→の意味はなんですか。
これからマクロを作るための手順でもあります。
誰もが、同じことを再現できる手順にしていただけますか。

(マナ) 2018/02/17(土) 20:27


できれば、同じこのシートでコピー、貼り付けできればと思います。
→は、コピーして貼り付けの意味でした。簡略化した方がよいと思いましたが、
わかりづらくなってしまいました。修正しました。

1日(月) B6:F25 コピー 8日(月) B328:F347 貼り付け
1日(月) B6:F25 コピー 15日(月) B650:F669 貼り付け
1日(月) B6:F25 コピー 22日(月) B972:F991 貼り付け
1日(月) B6:F25 コピー 29日(月) B1294:F1313 貼り付け
1日(月) B28:F47 コピー 8日(月) B350:F369 貼り付け
1日(月) B28:F47 コピー 15日(月) B672:F691 貼り付け
1日(月) B28:F47 コピー 22日(月) B994:F1013 貼り付け
1日(月) B28:F47 コピー 29日(月) B1316:F1335 貼り付け
(マクロ初心者) 2018/02/17(土) 20:37


>1日(月) B6:F25 コピー 8日(月) B328:F347 貼り付け

手作業で、↑の作業を本当に実施しますか?
面倒ではないですか。

わたしなら

1)1日(月) B6:F25 をコピー
2)8日(月) B328:F347に貼り付け

と、2ステップの操作をします。

まぁ、マクロなら面倒でもないのですが。
今は、手作業ですることをイメージして、
それを手順化してください。

(マナ) 2018/02/17(土) 20:48


これでよいでしょうか。

1)1日(月) B6:F25 をコピー
2)8日(月) B328:F347 に貼り付け
3)15日(月) B650:F669 に貼り付け
4)22日(月) B972:F991 に貼り付け
5)29日(月) B1294:F1313 に貼り付け
6)1日(月) B28:F47 をコピー
7)8日(月) B350:F369 に貼り付け
8)15日(月) B672:F691 に貼り付け
9)22日(月) B994:F1013 に貼り付け
10)29日(月) B1316:F1335 に貼り付け
(マクロ初心者) 2018/02/17(土) 21:06


確認ですが、貼付けは、書式も含めて「すべて」でよいですか。
それとも「値」のみですか。

(マナ) 2018/02/17(土) 21:11


値のみです!
(マクロ初心者) 2018/02/17(土) 21:25

でしたら、手順も修正してください。

で、コピー範囲、貼付け範囲に一定の位置関係があるのがわかりますか。

(マナ) 2018/02/17(土) 21:29


その前に、書式にはリストを設定していますが、
値のみの貼り付けでリストは消えたりはしないでねよね?

(マクロ初心者) 2018/02/17(土) 21:32


一定の位置関係とは、、、
B列からF列ということでしょうか。
的外れな答えでしたら、すみません。
(マクロ初心者) 2018/02/17(土) 21:35

>値のみの貼り付けでリストは消えたりはしないでねよね?

試せばわかることを、なぜ確認すえうのですか?
手作業ならできるのですよね。
それをマクロ化するのを、お手伝いしているのです。

(マナ) 2018/02/17(土) 21:47


すみません。
値のみの貼り付けで間違いありませんでした。
(マクロ初心者) 2018/02/17(土) 21:49

>値のみの貼り付けで間違いありませんでした。

ならば、値貼付けで手順を修正してください。

>一定の位置関係とは、、、

わからなければ、今はまだよいです。
2日(火)の場合の手順も考えてください。

(マナ) 2018/02/17(土) 21:54


まずは、値貼り付けでの手順は、
以下で良いでしょうか。

1)1日(月) B6:F25 をコピー
2)8日(月) B328:F347 に値貼り付け
3)15日(月) B650:F669 に値貼り付け
4)22日(月) B972:F991 に値貼り付け
5)29日(月) B1294:F1313 に値貼り付け
6)1日(月) B28:F47 をコピー
7)8日(月) B350:F369 に値貼り付け
8)15日(月) B672:F691 に値貼り付け
9)22日(月) B994:F1013 に値貼り付け
10)29日(月) B1316:F1335 に値貼り付け
(マクロ初心者) 2018/02/17(土) 21:59


はい。それでよいです。

貼り付け先は、左上の1セルでもよいのですが、
今回は、このままでよいです。

(マナ) 2018/02/17(土) 22:09


2日(火)の場合の手順です。
1)2日(火) B52:F71 をコピー
2)9日(火) B374:F393 に値貼り付け
3)16日(火) B696:F715 に値貼り付け
4)23日(火) B1018:F1037 に値貼り付け
5)30日(火) B1340:F1359 に値貼り付け
6)2日(火) B74:F93 をコピー
7)9日(火) B396:F415 に値貼り付け
8)16日(火) B718:F737 に値貼り付け
9)23日(火) B1040:F1059 に値貼り付け
10)30日(火) B1362:F1381 に値貼り付け
(マクロ初心者) 2018/02/17(土) 22:49

では、↓この部分だけ、マクロを考えてください。

1)1日(月) B6:F25 をコピー

わからなければ、「マクロの記録」です。

(マナ) 2018/02/17(土) 23:03


Range("B6:F25").Select
Selection.Copy
(マクロ初心者) 2018/02/17(土) 23:12

それで合っています。

○○.Select
Selection.△△

↑こういうのは、SelectとSelectionを省略し

○○.△△

1行にできます。つまり

コピー範囲.Copy

です。

次に、↓この部分だけ考えてください

2)8日(月) B328:F347 に値貼り付け

(マナ) 2018/02/17(土) 23:22


Range("B6:F25").Copy

マクロの記録でやりました。
Range("B328").PasteSpecial Paste

(マクロ初心者) 2018/02/17(土) 23:32


>Range("B328").PasteSpecial Paste

だめです。省略の仕方が間違っています。
記録されたものをそのまま教えてください。

(マナ) 2018/02/17(土) 23:35


Range("B328").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
(マクロ初心者) 2018/02/17(土) 23:39

こうです。

 Range("B328").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

で、これは貼り付け先に左上隅だけを選択したからで
もし、手順通りに「B328:F347 に値貼り付け」していたら

Range("B328:F347").Select

と記録されたはずです。
つまり、これでもよいです。

 Range("B328:F347").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

では、↓のマクロを考えてください

1)1日(月) B6:F25 をコピー
2)8日(月) B328:F347 に値貼り付け
3)15日(月) B650:F669 に値貼り付け
4)22日(月) B972:F991 に値貼り付け
5)29日(月) B1294:F1313 に値貼り付け

(マナ) 2018/02/17(土) 23:52


今日はここまでにさせてください。

(マナ) 2018/02/17(土) 23:55


はい、ありがとうございます。
明日から一泊で外泊します。
月曜日の夜にまたご連絡させてください。
本当にありがとうございます。
(マクロの初心者) 2018/02/17(土) 23:57

では、↓のマクロを考えてください
1)1日(月) B6:F25 をコピー
2)8日(月) B328:F347 に値貼り付け
3)15日(月) B650:F669 に値貼り付け
4)22日(月) B972:F991 に値貼り付け
5)29日(月) B1294:F1313 に値貼り付け

  Range("B6:F25").Copy Range("B328")
  Range("B6:F25").Copy Range("B650")
  Range("B6:F25").Copy Range("B972")
  Range("B6:F25").Copy Range("B1294")

(マクロの初心者) 2018/02/18(日) 00:16


割り込み失礼します。
「マクロの記録」のコードとくらべて見てください。
(semm) 2018/02/18(日) 07:25

それだと、こんな手順になりますよ。

1)1日(月) B6:F25 コピー 8日(月) B328 に貼り付け
2)1日(月) B6:F25 コピー 15日(月) B650 に貼り付け
3)1日(月) B6:F25 コピー 22日(月) B972 に貼り付け
4)1日(月) B6:F25 コピー 29日(月) B1294 に貼り付け

(マナ) 2018/02/18(日) 21:39


同じコピーを何度も繰り返している無駄があると思いますが、
それをマクロにするとなると、、、

Range("B6:F25").Copy Range("B328")
Range("B650")
Range("B972")
Range("B1294")

実際に動作させてみましたが、うまく取り込みできません。

(マクロ初心者) 2018/02/19(月) 16:32


横から失礼します。
私の環境で試してないから問題ないのかもしれないですけど・・・
本当に2018/02/19(月) 16:32の提示のとおり記述してるなら、エラーでとまりませんか?

Range("B6:F25").Copy Range("B328")  ←OK
Range("B650")     ←意味不明(NG)
Range("B972")     ←意味不明(NG)
Range("B1294")    ←意味不明(NG)

Excel君にセルだけ伝えたって何していいかわからないですよね?
そのセルをどうしたいのか命令(メソッド)がないからエラーでとまっちゃう気がします。
(もこな2) 2018/02/19(月) 18:22


はい、エラーで止まってしまいます…
(マクロ初心者) 2018/02/19(月) 18:49

 こんなのでいいような気がするなぁ・・(実環境を作るのが面倒なので、まともにテストしていないけど・・)

 Sub Copy1to4()
     Dim AmToCopy As Range
     Dim PmToCopy As Range
     Dim First7days As Long
     Dim UpTo As Long

     Application.ScreenUpdating = False

     For First7days = 1 To 7

         Set AmToCopy = Range("B6:F25").Offset((First7days - 1) * 46)
         Set PmToCopy = Range("B28:F47").Offset((First7days - 1) * 46)

         For UpTo = 1 To 4

             '日付が入っていたら処理する
             If AmToCopy.Offset(UpTo * 322).Cells(1, 1).Offset(, 1).Value <> "" Then
                 AmToCopy.Copy AmToCopy.Offset(UpTo * 322)
                 PmToCopy.Copy PmToCopy.Offset(UpTo * 322)
             End If
         Next UpTo
     Next First7days

     Application.ScreenUpdating = True
 End Sub

(半平太) 2018/02/19(月) 20:22


マナさんがフォローされてるところ、横からアレコレいっても混乱するだけなので特に気になったところだけ。

2018/02/19(月) 18:49 の
>はい、エラーで止まってしまいます…

↑なら、なんで直さないの?マナさんに手とり足取り教えてもらわないと進めたくないの?っておもいます。

2018/02/18(日) 21:39にマナさんが、
〜〜に貼り付け  っておしゃってるところ割と重要です。
   ^^^^^
    ↑
   ”値”貼り付けじゃなくて、ただの貼り付け って言ってるところに注目。

(もこな2) 2018/02/20(火) 00:21


みなさん、ありがとうございます。
もこな2さん、手とり足とりでないと進めたくないなんて、そんなことはありません。
ただ、週末から色々とあって、なかなか返事ができませんでした。
みなさんのご指導にとても感謝しております。

実際にエクセルでコード表に書いてやってみてます。
後ほどまたご連絡いたします。
(マクロ初心者) 2018/02/20(火) 18:51


ちょっとキツイ言い方になりましたが、回答者は質問者さんのパソコンや様子をみることができませんので、掲示板に書いたことだけがすべてです。

エラーになりました。困りました。だけではなく具体的にどのように考えてどうしたら、どううまくいかなかったのかを説明できるようになると、いろんな方からアドバイスがもらえるようになると思います。

ちなみに、「2018/02/19(月) 16:32 」のものをマナさん流にすると
Range("B6:F25").Copy Range("B328")
Range("B650")
Range("B972")
Range("B1294")
 ↓
1)1日(月) B6:F25 コピー  8日(月) B328 に(普通の)貼り付け
2)意味が通らない(命令がない)ので実行不能。
3)意味が通らない(命令がない)ので実行不能。
4)意味が通らない(命令がない)ので実行不能。

ってなるとおもいます。
(もこな2) 2018/02/20(火) 21:31


これでどうでしょうか?
実際にマクロの記録で試しました。
Range("B6:F25").Copy Range("B328")
Range("B650").Select
Range("B972").Select
Range("B1294").Select
(マクロの初心者) 2018/02/20(火) 23:13

完成形が提示されましたので
もう必要ないかと思いましたが、
まだ続ける気持ちがあるのなら、

2018/02/17(土) 23:03
から
2018/02/17(土) 23:52
までを、

もう一度、読んでいただけますか。

(マナ) 2018/02/20(火) 23:22


はい、読みました。
以下でよいですか?
Range("B6:F25").Copy Range("B328")
Range("B650").Select
Range("B972").Select
Range("B1294").Select
(マクロの初心者) 2018/02/20(火) 23:42

では、もう一度

↓この部分だけのマクロを考えてください。

1)1日(月) B6:F25 をコピー

(マナ) 2018/02/20(火) 23:49


Range("B6:F25").Copy
(マクロの初心者) 2018/02/20(火) 23:50

次に、↓この部分だけ考えてください

2)8日(月) B328:F347 に値貼り付け

1)の部分は、必要ないですよ。
2)の部分だけ。

(マナ) 2018/02/20(火) 23:54


Range("B328:F347").Select
(マクロの初心者) 2018/02/20(火) 23:59

2018/02/17(土) 23:22
から
2018/02/17(土) 23:52
までを

もう一度、読んでいただけますか。

(マナ) 2018/02/21(水) 00:03


ごめんなさい。今日はここまでです。

(マナ) 2018/02/21(水) 00:04


はい、ありがとうございます。
 Range("B328:F347").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
(マクロの初心者) 2018/02/21(水) 00:07

>Range("B6:F25").Copy

 コピー範囲.Copy

 これが指定した範囲をコピーするマクロです。

> Range("B328:F347").PasteSpecial Paste:=…

 貼り付け先.PasteSpecial 

 これが、形式を選択して貼付けのマクロです。
http://www.moug.net/tech/exvba/0050104.html

 Paste:=xlPasteValuesをつけると、値貼り付けになります。
 省略すると、すべて貼付けになります。
 値貼り付けしたいだけなら、Operation:=以下は省略できます。

 つまり

 >2)8日(月) B328:F347 に値貼り付け 

 は、↓これだけでもOKです。

 Range("B328:F347").PasteSpecial Paste:=xlPasteValues

'---

もう一度、↓のマクロを考えてください

 1)1日(月) B6:F25 をコピー 
 2)8日(月) B328:F347 に値貼り付け 
 3)15日(月) B650:F669 に値貼り付け 
 4)22日(月) B972:F991 に値貼り付け 
 5)29日(月) B1294:F1313 に値貼り付け 

(マナ) 2018/02/21(水) 19:43


これで良いでしょうか?
Range("B6:F25").Copy
Range("B328:F347")
Range("B650:F669").PasteSpecial
Range("B972:F991").PasteSpecial
Range("B1294:F1313").PasteSpecial
(マクロの初心者) 2018/02/21(水) 20:55

すいません。スマホから打っていて、最初の張り付けに、Paste Specialが
抜けてしまっます。
(マクロの初心者) 2018/02/21(水) 20:58

2018/02/21(水) 19:43 
を、もう一度読んでみてください

 > Paste:=xlPasteValuesをつけると、値貼り付けになります。
 > 省略すると、すべて貼付けになります。

>スマホから打っていて、

わたしは、あわてません。
エクセルが使える環境で、動作確認してから
返事いただけますか。

(マナ) 2018/02/21(水) 21:20


動作確認しました。
実行すると、B1294:F1313が選択された状態で、ここに移動するんですね。
また、 Paste:=xlPasteValuesを省力しても同様の状態でした。
Range("B6:F25").Copy
Range("B328:F347").PasteSpecial Paste:=xlPasteValues
Range("B650:F669").PasteSpecial Paste:=xlPasteValues
Range("B972:F991").PasteSpecial Paste:=xlPasteValues
Range("B1294:F1313").PasteSpecial Paste:=xlPasteValues
(マクロの初心者) 2018/02/21(水) 22:01

>実行すると、B1294:F1313が選択された状態で、ここに移動するんですね。

どういう意味でしょうか

>また、 Paste:=xlPasteValuesを省力しても同様の状態でした。

それは、同じ書式で、値貼り付けでも、すべて貼付けでも同じということでは?

(マナ) 2018/02/21(水) 22:49


どういう意味でしょうか すいません。問題にするようなことではありませんでした。

それは、同じ書式で、値貼り付けでも、すべて貼付けでも同じということでは? おっしゃるとおりですよね。

以下で良いでしょうか?
Range("B6:F25").Copy

 Range("B328:F347").PasteSpecial Paste:=xlPasteValues 
 Range("B650:F669").PasteSpecial Paste:=xlPasteValues 
 Range("B972:F991").PasteSpecial Paste:=xlPasteValues 
 Range("B1294:F1313").PasteSpecial Paste:=xlPasteValues
(マクロの初心者) 2018/02/22(木) 08:04

マナさん、実際には以下のようになるのでしょうか。
Sub test()
 Range("B328:F347").PasteSpecial Paste:=xlPasteValues 
 Range("B650:F669").PasteSpecial Paste:=xlPasteValues 
 Range("B972:F991").PasteSpecial Paste:=xlPasteValues 
 Range("B1294:F1313").PasteSpecial Paste:=xlPasteValues
 ・
 ・
 ・
End Sub

半平太さん、ご提示いただいているコードを実際に試してみましたが、貼り付けがされません。
実環境がきちんとお伝えできていないからですね、申し訳ありません。
(マクロの初心者) 2018/02/22(木) 12:58


貼り付けがされません・・・で終わってはいけませんね。
状況としては、マクロボタンを押しても何にも取り込まれません。空白の状態です。
(マクロの初心者) 2018/02/22(木) 13:00

横から口出しですが、「2018/02/22(木) 12:58」に提示されたコードだと

Range("B328:F347") に形式を選択して貼り付け(値のみ) を実行しなさい
Range("B650:F669") に形式を選択して貼り付け(値のみ) を実行しなさい
Range("B972:F991") に形式を選択して貼り付け(値のみ) を実行しなさい
Range("B1294:F1313") に形式を選択して貼り付け(値のみ) を実行しなさい

っていう命令になっているので、「何を」形式を選択して貼り付け(値のみ)すればいいのかわからないExcel君はちゃんと動いてくれないでしょう。
(もこな2) 2018/02/22(木) 13:12


肝心なことが抜けてますね。すみません。
もこな2さん、ありがとうございます。

Sub test()

 Range("B6:F25").Copy 
 Range("B328:F347").PasteSpecial Paste:=xlPasteValues 
 Range("B650:F669").PasteSpecial Paste:=xlPasteValues 
 Range("B972:F991").PasteSpecial Paste:=xlPasteValues 
 Range("B1294:F1313").PasteSpecial Paste:=xlPasteValues
 ・
 ・
 ・
End Sub

(マクロの初心者) 2018/02/22(木) 13:34


これで、1日の午前のデータは転記できたと思います。

次に、1日の午後のデータを転記するマクロを考えてください。
同じことだから簡単ですよね。

(マナ) 2018/02/22(木) 20:55


マナさん、ありがとうございます。
1日の午後は以下のとおりです。

Sub test()

  Range("B28:F47").Copy 
  Range("B350:F369").PasteSpecial Paste:=xlPasteValues 
  Range("B672:F691").PasteSpecial Paste:=xlPasteValues 
  Range("B994:F1013").PasteSpecial Paste:=xlPasteValues 
  Range("B1316:F1335").PasteSpecial Paste:=xlPasteValues
End Sub
(マクロの初心者) 2018/02/22(木) 22:28

Sub test()
  '1日の午前
  Range("B6:F25").Copy 
  Range("B328:F347").PasteSpecial Paste:=xlPasteValues 
  Range("B650:F669").PasteSpecial Paste:=xlPasteValues 
  Range("B972:F991").PasteSpecial Paste:=xlPasteValues 
  Range("B1294:F1313").PasteSpecial Paste:=xlPasteValues
  '1日の午後
  Range("B28:F47").Copy 
  Range("B350:F369").PasteSpecial Paste:=xlPasteValues 
  Range("B672:F691").PasteSpecial Paste:=xlPasteValues 
  Range("B994:F1013").PasteSpecial Paste:=xlPasteValues 
  Range("B1316:F1335").PasteSpecial Paste:=xlPasteValues
End Sub
(マクロの初心者) 2018/02/22(木) 22:31

それで、あっています。
では、↓のマクロの意味はわかりますか?
わからなければ、ネット検索してください。

 Sub オフセット()
    Range("B6:F25").Offset(322).Select
 End Sub

(マナ) 2018/02/22(木) 22:48


B6:F25セル範囲を、行方向に322移動した、B328:F347セルになるという意味でしょうか。
(マクロの初心者) 2018/02/22(木) 22:55

では、これは

 Sub オフセット2()
    Range("B6:F25").Offset(322 * 2).Select
 End Sub

(マナ) 2018/02/22(木) 23:05


二つずらす?
(マクロの初心者) 2018/02/22(木) 23:08

さらに322移動する
(マクロの初心者) 2018/02/22(木) 23:12

332*2=664
664行下が、次の貼付け先ですね。

コピー範囲、貼付け範囲の位置関係の規則性がわかりますか。
こんなときには、Offsetが使えます。

2018/02/22(木) 22:31 のマクロをOffsetを使って書換えてみてください。

(マナ) 2018/02/22(木) 23:20


おはようございます。
以下でよいでしょうか。

Sub test()

  '1日の午前
  Range("B6:F25").Copy
  Range("B6:F25").Offset(322).Select
  Range("B6:F25").Offset(322 * 2).Select
  Range("B6:F25").Offset(322 * 3).Select
  Range("B6:F25").Offset(322 * 4).Select

  '1日の午後
  Range("B28:F47").Copy
  Range("B28:F47").Offset(322).Select
  Range("B28:F47").Offset(322 * 2).Select
  Range("B28:F47").Offset(322 * 3).Select
  Range("B28:F47").Offset(322 * 4).Select

End Sub
(マクロの初心者) 2018/02/23(金) 07:42


 考えたものをこうですか?と書き込むのではなくて、
 試してから書き込んでください。
 うまくいかない場合は、こう書きかえたけどこういうエラーが出るとか、
 こうなってしまうとか書き込んでください。
(semm) 2018/02/23(金) 10:22

英語は苦手ですか?

>Range("B6:F25").Offset(322).Select

は、B6:F25の322行下を選択(Select)する
という意味です。

Range("B6:F25").Offset(322)

Range("B328:F347")

なので、

Range("B328:F347").Select
と同じことになります。

範囲.Select
という構文は、セルを選択するものです。

Range("A1").Select
ならば、セルA1を選択です。

で、今回は選択(Select)したいのではなく
値貼り付けしたいのですよね。

値貼り付けの構文は

貼り付け先.PasteSpecial Paste:=xlPasteValues

です。

Selectしないで、PasteSpecialしてください。

(マナ) 2018/02/23(金) 20:42


マナさん、ありがとうございます。
風邪ぎみで今日は休んでます。ごめんなさい。感謝しております。
(マクロの初心者) 2018/02/24(土) 00:06

マナさん、こんばんは。
2018/02/23(金) 20:42 のマナさんのご指摘を読んで、
.Select(選択) → .PasteSpecial Paste:=xlPasteValues(貼り付け)
に修正して、実環境で確認しました。
思いどおりの貼り付けができました!
以下でよいですよね?
遅くにすみません。

Sub test()

  '1日の午前
  Range("B6:F25").Copy
  Range("B6:F25").Offset(322).PasteSpecial Paste:=xlPasteValues
  Range("B6:F25").Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
  Range("B6:F25").Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
  Range("B6:F25").Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
  '1日の午後
  Range("B28:F47").Copy
  Range("B28:F47").Offset(322).PasteSpecial Paste:=xlPasteValues
  Range("B28:F47").Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
  Range("B28:F47").Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
  Range("B28:F47").Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
End Sub
(マクロの初心者) 2018/02/24(土) 23:33

少し、プログラムっぽい記述に修正してみます。
http://officetanaka.net/excel/vba/beginner/16.htm

何回もでてくる、Range("B6:F25")とかRange("B28:F47")を
With〜End Withを使って、省略する書き方です。
動作確認してください。

結果的に行数は増えちゃいますが、
慣れると、このほうが見やすくなります。
With〜End Withについては、リンク先に目を通してください。

 Sub 値貼り付け1日用()
    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With

 End Sub

'---
これで、1日のデータをコピーできました。
これを7日分繰り返すことになります。

まずは、1日用のマクロを参考に、2日用のマクロを考えてみてください。

(マナ) 2018/02/25(日) 10:32


マナさん、感謝しております。
自宅に帰るのが夜遅くなるので、今夜遅くか明日の朝にご指示の回答を
させていただきます。
本当にありがとうございます!
(マクロの初心者) 2018/02/25(日) 18:14

おはようございます。
2日用のマクロを以下のとおり作成しました。
実環境で確認しました。うまく動作しました。
これを7日分まで繰り返しつくる感じでしょうか。

Sub 値貼り付け2日用()

    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午前
    With Range("B52:F71")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午後
    With Range("B74:F93")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
End Sub
(マクロの初心者) 2018/02/26(月) 07:20

>これを7日分まで繰り返しつくる感じでしょうか。

それでもOKですが、さずがに7日分となると長くなりすぎです。
なので、繰り返し用の構文を使います。

'----
まずは、今の2日用のマクロを少し修正から。

1日の午前の場合は、Range("B6:F25")をコピーしました
2日の午前の場合は、Range("B52:F71")をコピーしました
3日の午前の場合は、…

規則性があるはずです。

 Sub オフセット3()
    Range("B6:F25").Offset(46).Select
 End Sub

'----
Sub 値貼り付け2日用() を Offset を使って書換えてみてください。

(マナ) 2018/02/26(月) 19:48


おはようございます。
マナさんからの課題を私なりに書き換えてみました。
実環境にて試したところ、
「コンパイルエラー End Withが必要です。」が出てしまいます。

Sub 値貼り付け2日用()

    '1日の午前
    With Range("B6:F25").Offset(46).Select
    With Range("B28:F47").Offset(46).Select
    With Range("B52:F71").Offset(46).Select
    With Range("B74:F93").Offset(46).Select
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
End Sub
(マクロの初心者) 2018/02/27(火) 07:26

Withはそういった使い方出来ないと思いますよ。
一度「Excel VBA With」などで検索してみてください。

それとは別に、「Excel VBA 繰り返し」なども調べてみましょう。
(通りすがり) 2018/02/27(火) 09:51


↓を実行するとどうなりましたか

 Sub オフセット3()
    Range("B6:F25").Offset(46).Select
 End Sub

(マナ) 2018/02/27(火) 19:30


こんばんは。ありがとうございます。
2日目に移動します。
(マクロの初心者) 2018/02/27(火) 20:47

>Range("B6:F25").Offset(46).Select
は、B6:F25の46行下を選択(Select)する
という意味です。

Range("B52:F71")
は、Offsetを使って

Range("B6:F25").Offset(46)
と書き換えることが出来るということです。

理解できますか。

(マナ) 2018/02/27(火) 20:59


返事が遅くなり、すみません。
マナさんの説明、理解できます。
(マクロの初心者) 2018/02/28(水) 19:13

では、値貼り付け2日用は、
Offsetを使うと、こうなるのですが
理解できますか。
 Sub 値貼り付け2日用()
    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午前
    With Range("B6:F25").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午後
    With Range("B6:F25").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With

 End Sub

(マナ) 2018/02/28(水) 19:41


間違えました。こうです。
 Sub 値貼り付け2日用()
    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午前
    With Range("B6:F25").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午後
    With Range("B28:F47").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With

 End Sub

(マナ) 2018/02/28(水) 19:52


マナさん、ありがとうございます。
オフセット、理解できます。
それを応用して7日用を作ってみました。
実環境でもうまく動作出来ました!
ただ、日付のない範囲にも現状ではコピーしました。

 Sub 値貼り付け7日用()
    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午前
    With Range("B6:F25").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午後
    With Range("B28:F47").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '3日の午前
    With Range("B6:F25").Offset(46 * 2)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '3日の午後
    With Range("B28:F47").Offset(46 * 2)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '4日の午前
    With Range("B6:F25").Offset(46 * 3)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '4日の午後
    With Range("B28:F47").Offset(46 * 3)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '5日の午前
    With Range("B6:F25").Offset(46 * 4)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '5日の午後
    With Range("B28:F47").Offset(46 * 4)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '6日の午前
    With Range("B6:F25").Offset(46 * 5)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '6日の午後
    With Range("B28:F47").Offset(46 * 5)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '7日の午前
    With Range("B6:F25").Offset(46 * 6)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '7日の午後
    With Range("B28:F47").Offset(46 * 6)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
 End Sub
(マクロの初心者) 2018/02/28(水) 22:08

すみません、マナさん。
以下の通り訂正します。
4日目以降は、* 3 まででよいと思うからです。

 Sub 値貼り付け7日用()
    '1日の午前
    With Range("B6:F25")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '1日の午後
    With Range("B28:F47")
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午前
    With Range("B6:F25").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '2日の午後
    With Range("B28:F47").Offset(46)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '3日の午前
    With Range("B6:F25").Offset(46 * 2)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '3日の午後
    With Range("B28:F47").Offset(46 * 2)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
    End With
    '4日の午前
    With Range("B6:F25").Offset(46 * 3)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
    End With
    '4日の午後
    With Range("B28:F47").Offset(46 * 3)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
    End With
    '5日の午前
    With Range("B6:F25").Offset(46 * 4)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
    End With
    '5日の午後
    With Range("B28:F47").Offset(46 * 4)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
    End With
    '6日の午前
    With Range("B6:F25").Offset(46 * 5)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
     End With
    '6日の午後
    With Range("B28:F47").Offset(46 * 5)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
    End With
    '7日の午前
    With Range("B6:F25").Offset(46 * 6)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
     End With
    '7日の午後
    With Range("B28:F47").Offset(46 * 6)
        .Copy
        .Offset(322).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
        .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
     End With
 End Sub
(マクロの初心者) 2018/02/28(水) 22:26

>4日目以降は、* 3 まででよいと思うからです

確かに、そうですね。
でも、2月の場合はどうですか。1日目も、* 3 まででよいですよね。
今は、何も考えずに、* 4 まででよいです。

1日目も7日目も同じ処理にしておけば、
For〜Nextといった、繰り返し構文を使いやすいからです。

For〜Nextを使うと、7日目までのマクロでも
同じことを何行も記述する必要がなくなり
1日分+αの長さにすることが可能になります。

なので、もう少し、For〜Nextを使うための書換えを行います。

(マナ) 2018/03/01(木) 19:28


こんな感じにすると(オフセットの部分)
1日目から7日目までの処理を、さらに共通化できます。
違いは、* 0 の部分だけになります。
理解できますか。

    '1日の午前
    With Range("B6:F25").Offset(46 * 0)
	--途中省略--

    '2日の午前
    With Range("B6:F25").Offset(46 * 1)
	--途中省略--

    '3日の午前
    With Range("B6:F25").Offset(46 * 2)
	--以下省略--

(マナ) 2018/03/01(木) 19:39


はい。理解できます。
* 0 は、B6:F25の範囲そのものということですよね。
(マクロの初心者) 2018/03/01(木) 20:06

2018/02/28(水) 22:08のマクロを
For〜Nextを使うとこうなります。
完成までは、まだまだですが、動作確認してみてください。

 Sub 値貼り付け7日用()
    Dim i As Long

    For i = 0 To 6
        '午前
        With Range("B6:F25").Offset(46 * i)
            .Copy
            .Offset(322).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
        End With
        '午後
        With Range("B28:F47").Offset(46 * i)
            .Copy
            .Offset(322).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues
        End With
    Next

 End Sub

(マナ) 2018/03/01(木) 20:28


おはようございます。
実環境にて動作確認してみました。
すごいです。きちんとコピーしました。

(マクロの初心者) 2018/03/02(金) 07:16


Offsetする行数を
0から6まで、変化させならがら
繰り返し処理(今回はコピー貼付け)しています。

 For i = 0 To 6
   処理
 Next

こんな構文です。
理解できますか。
大事なことなので、わからなければ言ってください。

理解できたら、ようやく最初の質問の

>日付が空欄の箇所は取り込まないというやり方が全くわからなくて、

についてです。

(マナ) 2018/03/02(金) 08:04


おはようございます。
マナさん、ご返事が遅くなりすみません。
繰り返し処理の For i = 0 To 6 は、
iが0から始まって6まで繰り返しなさいという意味かと思います。
こんなに短い構文で表すことができるのですね。すごいです。

(マクロの初心者) 2018/03/05(月) 07:26


>4日目以降は、* 3 まででよいと思うからです

言い換えれば、月によって変わるのは

 > .Offset(322 * 4).PasteSpecial Paste:=xlPasteValues

 * 4 の場合だけですね。

'----

>日付枠は空欄となるよう関数を設定してますので

ということなので、
こんな感じで、空欄でないなら値貼り付け(PasteSpecial Paste:=xlPasteValues)
空欄なら、貼付け先のデータをクリア(ClearContents)します。

If .Cells(0, 1).Value <> "" Then
の部分が貼り付け先の一つ上(日付のセル)が空欄でないならに相当します。

 Option Explicit

 Sub 値貼り付け1カ月用()
    Dim i As Long

    For i = 0 To 6
        '午前
        With Range("B6:F25").Offset(46 * i)
            .Copy
            .Offset(322).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
            With .Offset(322 * 4)
                If .Cells(0, 1).Value <> "" Then
                    .PasteSpecial Paste:=xlPasteValues
                Else
                    .ClearContents
                End If
            End With
        End With
        '午後
        With Range("B28:F47").Offset(46 * i)
            .Copy
            .Offset(322).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
            With .Offset(322 * 4)
                If .Cells(0, 1).Value <> "" Then
                    .PasteSpecial Paste:=xlPasteValues
                Else
                    .ClearContents
                End If
            End With
        End With
    Next

 End Sub

これで、期待通りの結果となるはずです。
月を変えて動作確認してみてください。

(マナ) 2018/03/05(月) 22:02


↑これでもよいのですが、

午前と午後で、ほぼ同じで、
違うのは、
With Range("B6:F25").Offset(46 * i)

With Range("B28:F47").Offset(46 * i)
だけです。

こういときは、共通部分を抜き出して
別のマクロにする方法が使えます。

あくまで、こんな書き方もできるというだけで
わかりやすいほうを使えばよいです。

'----

実行するのは、Sub 値貼り付け1カ月です。

 Sub 値貼り付け1カ月()
    Dim i As Long

    For i = 0 To 6
        '午前
        値貼り付け半日分 Range("B6:F25").Offset(46 * i)
        '午後
        値貼り付け半日分 Range("B28:F47").Offset(46 * i)
    Next

 End Sub

 Private Sub 値貼り付け半日分(コピー範囲 As Range)

        With コピー範囲
            .Copy
            .Offset(322).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 2).PasteSpecial Paste:=xlPasteValues
            .Offset(322 * 3).PasteSpecial Paste:=xlPasteValues
            With .Offset(322 * 4)
                If .Cells(0, 1).Value <> "" Then
                    .PasteSpecial Paste:=xlPasteValues
                Else
                    .ClearContents
                End If
            End With
        End With

 End Sub

(マナ) 2018/03/05(月) 22:14


マナさん、ご返事が遅くなりすみません。
早速、実環境で確認しました。
すごいです!!期待通りの結果となりました!!
これまで、丁寧に教えていただいて、とても感謝しています。
今回教わったことをまた別のものに活かしていければと思います。
また、これからもよろしくお願いします。
本当にありがとうございました。
(マクロの初心者) 2018/03/08(木) 23:02

コメント返信:

[ 一覧(最新更新順) ]


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