『指定した行に貼り付け。マクロ』(北国) 今、マクロを勉強中なんです。 B1で日付を指定し、それをA列のA7以降で日付を検索して 同じ日付のところに張り付けるのですが、B1の日付を数値と認識してしまい、 ずいぶんと下のセルに貼り付けになってしまいます。 どうしたらいいでしょうか? ちなみにマクロは下記です Sub Macro1() Range("c2:dv2").Activate 行 = Cells(1, 2) 行 = 行 + 6 Range("c2:dv2").Copy Range(Cells(行, 3), Cells(行, 3)).Select ' Selection.PasteSpecial Paste:=xlValues End Sub ---- いまいち、説明とコードの内容が把握できていませんが。。。   気がついた点をb ・勉強中との事ですので、変数の宣言はしたほうが良いと思います ・>行 = Cells(1, 2)  ここで、行っているのは「Cells(1, 2)」(B1)の値を「行」に代入しています。  B1 に入っているのは日付です。  エクセル君は、日付は「シリアル値」で考えています。  仮に、「2008/4/7」という日付が入っているとすると、、、  エクセル君は「39545」という数値で考えます。  (日付が入ったセルの表示形式を数値に変えるとわかると思います)  よって、次に行っている  >行 = 行 + 6  では「39545 + 6」を計算しています。  ここで、行は「39551」になってしまっています。 ・Range(Cells(行, 3), Cells(行, 3)).Select  それをふまえたうえで、上記のコードを考えてみてください。 ※行を調べるには、Row プロパティで取得できます。 ・>それをA列のA7以降で日付を検索して  検索と仰っていますが、検索しているようなコードが組み込まれていません。  範囲が決まっているのであれば、ループしていくのが簡単かもしれません。   内容を把握していないので、外してたらごめんなさい・・・ こんな感じの事でしょうか?   Sub test() Dim MyRow As Long Dim Rng As Range 'A列の最終行の取得 MyRow = Range("A" & Rows.Count).End(xlUp).Row 'A列の最終行までのループ For Each Rng In Range("A7:A" & MyRow) 'もし、B1の日付と同じなら次の処理へ If Rng = Range("B1") Then '範囲、C2:DV2をコピー Range("C2:DV2").Copy Destination:=Rng.Offset(0, 2) '違ったら次へ End If '範囲内であれば続けて処理 Next Rng End Sub   (キリキ)(〃⌒o⌒)b ---- キリキさんからコメントが入っていますが・・・・ (しかも衝突したし・・・。) ↓の様な事かと想像します。 [A] [B] [C] [D] [1] 日 7 項目1 項目2 [2] イ ロ [3] [4] [5] [6] 日 項目1 項目2 [7] 1 [8] 2 [9] 3 [10] 4 [11] 5 [12] 6 [13] 7 イ ロ [14] 8 [15] 9 [16] 10 A7が必ず1日から始まる。 B1に日にちを指定すると、必ず その日付+6行目が 該当の行と決定出来る。 この時に、B1に「7」と入っていれば、必ず+6された13行目が選択され その行にペーストされる事と思います。 ただし、キリキさんも仰って居られますが もしもB1に「2008/4/7」と言う日付を入れて表示形式で「7」と成っていた場合 (数式バーに日付が表示される) その本来の値は「39545」ですから、+6された「39551」行目が 選択され、その行にペーストされると思います。 セルに入力されている【本来の値】は何なのかを確かめてみるのはどうでしょう。 (HANA) ---- なるほどb 「何日」という事ですか〜   では、Day 関数で「何日」かを調べるのも良いかもしれませんね^^   (キリキ)(〃⌒o⌒)b ---- (HANA)さん   (キリキ)さん ありがとうございます つたない説明でご迷惑をおかけしてます 表は(HANA)さんの例の通りです。 B1に日付を記入し、7行目以降に日々貼り付けをしていきますので、A列から日付を検索して そこにC2からDV2までの数値のコピーを値として貼り付けをしたいのです。 これのどこを改良するとA列の同じ日付を検索してくれるでしょうか? (北国)   ---- >セルに入力されている【本来の値】は何なのかを確かめてみるのはどうでしょう。 と書いておりますが・・・・。 セルには何をどの様に入力していますか? また、セルの書式設定を「標準」にしたときに どんな数字が出ますか? 現在のコードはこの数字に+6した行に貼り付きます。 ですので、B1セルの書式設定が標準の時に「7」と成るように 値を入力すれば13行目(現在7が入力されている行)に 貼り付くようになると思います。 現在のB1セルの書式設定はどの様な物を設定していますか? (HANA) ---- B1のセルには日付の書式設定です 39543と認識してういるようです。 (キリキ)さんのコードでできたのですが、 貼り付けの際に値で張り付けしたいのです。 Range("C2:DV2").Copy Destination:=Rng.Offset(0, 2) CopyのところをValueに変えたのですが、エラーになりました。 値だけのコピーをするにはどうすればよいでしょうか? (北国) ---- 何故日付で入力するのですか? B1セルに「日にち」を入力すれば (例えば2007/4/7なら「7」と入力) 現在のコードがそのまま使えると思いますが。 ただし、A7が「1」から始まる場合だけですけど。 それとも最初のコードでは検索していませんが 「検索」と言う作業が必要になる と言う事ですかね? (HANA) ---- HANAさん 説明不足ですいません A7の始まりの日付がシートによってバラバラなので、B1の数値を日付で入力したかったのです (北国) ---- でしたら >表は(HANA)さんの例の通りです。 の後に 『ただし、シートによっては  >A7が必ず1日から始まる  とは限らない』 が必要でしょ? それぞれ別の項目のシートなのですかね? 関連する物で有れば、そろえておくのが 後々良さそうに思いますが・・・・。 まぁ、そのあたりは良く分かりませんので。 該当部分を Rng.Offset(0, 2).Resize(, 124).Value = Range("C2:DV2").Value に変えてみるのはどうでしょう。 (HANA) ---- HANAさん  ありがとうございます 説明不足でご迷惑をおかけしました。 上記の通りにコードを変えたらできました。 これからもっともっと勉強してきます。 またご相談することがあると思いますが、その時はよろしくお願いいたします (北国)