[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定した行に貼り付け。マクロ』(北国)
今、マクロを勉強中なんです。
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)さんの例の通りです。
B1に日付を記入し、7行目以降に日々貼り付けをしていきますので、A列から日付を検索して
そこにC2からDV2までの数値のコピーを値として貼り付けをしたいのです。
これのどこを改良するとA列の同じ日付を検索してくれるでしょうか?
(北国)
>セルに入力されている【本来の値】は何なのかを確かめてみるのはどうでしょう。 と書いておりますが・・・・。
セルには何をどの様に入力していますか? また、セルの書式設定を「標準」にしたときに どんな数字が出ますか? 現在のコードはこの数字に+6した行に貼り付きます。
ですので、B1セルの書式設定が標準の時に「7」と成るように 値を入力すれば13行目(現在7が入力されている行)に 貼り付くようになると思います。
現在のB1セルの書式設定はどの様な物を設定していますか?
(HANA)
39543と認識してういるようです。
(キリキ)さんのコードでできたのですが、
貼り付けの際に値で張り付けしたいのです。
Range("C2:DV2").Copy Destination:=Rng.Offset(0, 2)
CopyのところをValueに変えたのですが、エラーになりました。
値だけのコピーをするにはどうすればよいでしょうか?
(北国)
何故日付で入力するのですか? B1セルに「日にち」を入力すれば (例えば2007/4/7なら「7」と入力) 現在のコードがそのまま使えると思いますが。 ただし、A7が「1」から始まる場合だけですけど。
それとも最初のコードでは検索していませんが 「検索」と言う作業が必要になる と言う事ですかね?
(HANA)
A7の始まりの日付がシートによってバラバラなので、B1の数値を日付で入力したかったのです
(北国)
でしたら >表は(HANA)さんの例の通りです。 の後に 『ただし、シートによっては >A7が必ず1日から始まる とは限らない』 が必要でしょ?
それぞれ別の項目のシートなのですかね? 関連する物で有れば、そろえておくのが 後々良さそうに思いますが・・・・。 まぁ、そのあたりは良く分かりませんので。
該当部分を Rng.Offset(0, 2).Resize(, 124).Value = Range("C2:DV2").Value に変えてみるのはどうでしょう。
(HANA)
ありがとうございます
説明不足でご迷惑をおかけしました。
上記の通りにコードを変えたらできました。
これからもっともっと勉強してきます。
またご相談することがあると思いますが、その時はよろしくお願いいたします
(北国)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.