advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 27286 for マクロ (0.014 sec.)
[[20180216125441]]
#score: 2168
@digest: e1d66cdd34d404b10d5406c533773127
@id: 75554
@mdate: 2018-03-08T14:02:22Z
@size: 52429
@type: text/plain
#keywords: 322 (193410), 前wi (162670), 後wi (143406), b328 (130936), xlpastevalues (128643), b1294 (114558), f347 (97601), pastespecial (90939), 日( (86783), f1313 (85919), f47 (83422), b650 (79949), b972 (79949), f25 (79579), の午 (78673), paste (55478), 日用 (39893), b28 (39433), 午前 (36735), 値貼 (32172), 午後 (32049), offset (28889), 2018 (17717), 月) (17602), マナ (15955), ロ初 (15519), (マ (10430), 土) (8362), 者) (7736), 日分 (7697), 貼り (7461), 初心 (7354)
『基本データから一括取り込みするマクロ』(マクロ初心者)
[[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 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201802/20180216125441.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97040 documents and 608054 words.

訪問者:カウンタValid HTML 4.01 Transitional