[[20080407003325]] 『指定した行に貼り付け。マクロ』(北国) ページの最後に飛ぶ

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

 

『指定した行に貼り付け。マクロ』(北国)

今、マクロを勉強中なんです。

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さん 

ありがとうございます
説明不足でご迷惑をおかけしました。
上記の通りにコードを変えたらできました。

これからもっともっと勉強してきます。
またご相談することがあると思いますが、その時はよろしくお願いいたします
(北国)


コメント返信:

[ 一覧(最新更新順) ]


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