[[20170607075821]] 『工程表(B)の2行を切り取り工程表(A)へ貼り付ax(素人) ページの最後に飛ぶ

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

 

『工程表(B)の2行を切り取り工程表(A)へ貼り付け』(素人)

下記の様なマクロを組んでみたのですが、型が一致しないという
が出て、

内容的には、

Sub Macro1()

' Macro1 Macro

Dim i As Long, F As Long, l As Long, G As Long

 F = F9
 l = 11
 G = F9

    For i = 9 To 100 Step 2

    Sheets("工程表 (B)").Select
    Rows("i:i+1").Select
    Range("F").Activate
    Selection.Cut
    Sheets("工程表(A)").Select
    Rows("l:l").Select
    Range("G").Activate
    Selection.Insert Shift:=xlDown

    F = F + 2
    l = l + 4
    G = G + 2

    Next i

End Sub

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


 少しこのマクロの意図を整理したいのですが、
 私の認識が違っていたらすみません。

 「工程表(B)」シートの9行目からその下の1行までの2行分の
 範囲を切り取って「工程表(A)」シートの11行目に挿入貼り付けする。
 これを「工程表(B)」シートの100行目まで2行ごと繰り返す。

 ですか?

 とりあえず文法的に間違っているのがいくつかあります。
 まず質問のエラーが出ているのは
 Rows("i:i+1").Select
 の部分だと思います。書くのであれば
 Rows(i & ":" & i + 1).Select
 のように記述します。

 次に
 Range("F").Activate や Range("G").Activate
 でもエラーとなります。
 セルの行番号が指定されていませんので、
 Range("F9").Activate 
 のように記述します。

 同じく
 Rows("l:l").Select
 もエラーになります。
 l = 11とありますので
 ここも素直に
 Rows(l).Select
 でいいと思います。

 これでも貼り付け時にエラーが出ると思いますので
 投稿者さんの意図がわかればまた。
(秀丸) 2017/06/07(水) 09:04

 たぶん
 >F = F9
 でFという変数にF9セルをいれて
 >Range("F").Activate
 でF9セルをアクティブに。

 >F = F + 2
 でFという変数をF11セルに。
 ということを目指しているのだろうな。

 で、Option Explicitを付けていないので
 >F = F9
 がコンパイルエラーになっていないのだろう。
(ねむねむ) 2017/06/07(水) 09:11

秀丸さん、ねむねむさん、回答ありがとうございます。
マクロの意図は、お二人の見解で間違いないと思います。

以下のマクロを「工程表(B)」シートの100行目まで2行ごとに繰り返したいのです。
今朝投稿したマクロどのように書くのが正しいのでしょうか。

それと、下記のマクロを実行してみると、なぜかマクロを記録した時とは違う結果になります。
なぜなのでしょうか。

Sub Macro1()
'
' Macro1 Macro
'

'

    Rows("9:10").Select
    Range("F9").Activate
    Selection.Cut
    Sheets("工程表(A)").Select
    Rows("11:11").Select
    Range("F11").Activate
    Selection.Insert Shift:=xlDown
        Sheets("工程表 (B)").Select
    Rows("11:12").Select
    Range("F11").Activate
    Selection.Cut
    Sheets("工程表(A)").Select
    Rows("15:15").Select
    Range("F15").Activate
    Selection.Insert Shift:=xlDown
    Sheets("工程表 (B)").Select
    Rows("13:14").Select
    Range("F13").Activate
    Selection.Cut
    Sheets("工程表(A)").Select
    Rows("19:19").Select
    Range("F19").Activate
    Selection.Insert Shift:=xlDown
End Sub

(素人) 2017/06/07(水) 23:24


後者の質問の、マクロ記録時と違う結果になる理由が判りました。
最初にシートを選択していませんでした。

Sheets("工程表 (B)").Select

文頭に、これを追記したら、結果が同じになりました。

前者の質問について、どなたかご教授願います。宜しくお願いします。

(素人) 2017/06/07(水) 23:46


おはようございます。
アドバイスを参考にして
書いてみました。
これでもエラーが。。。

Sub Macro1()
' Macro1 Macro
Dim i As Long, F As Long, l As Long, G As Long

    For i = 9 To 100 Step 2
    For j = 9 To 100 Step 2
    For k = 11 To 200 Step 4
    For l = 9 To 200 Step 4

    Sheets("工程表 (B)").Select
    Rows(i & ":" & i + 1).Select
    Range("F" & j).Activate
    Selection.Cut
    Sheets("工程表(A)").Select
    Rows("k").Select
    Range("F" & l).Activate
    Selection.Insert Shift:=xlDown

    Next i, j, k, l
End Sub

(素人) 2017/06/08(木) 08:10


 エラーが出たのはNextのところではないですか?
 For〜Nextで1ステートメントですから、
 For i=9 ・・・・ Next i
 For j=9 ・・・・ Next j
 とひとつずつくくりましょう。

 では本題で、整理しましょう。
 「工程表 (B)」は9行目から2行づつ切り取り、100行目まで。
 「工程表(A)」の11行目から4行ごとに挿入貼り付け。

 つまり 
 「工程表 (B)」のセル行(変数i)は9〜100の範囲で2行ずつ増える、
 「工程表(A)」のセル行(変数l)は11から始まり、変数iの繰り返し分増える。
 その間カットペーストを繰り返す、わけですので
 繰り返しの処理は1回分で、変数iは2ずつ、変数lは4ずつ増やすのを
 「工程表 (B)」の変数iの範囲分(9〜100のstep2)繰り返せばいい。
 となります。
 使う変数は2つでOK、繰り返し処理は1つでOK、です。

 これを単純に書くと下記のようになります。
 Sub Macro1()
    Dim i As Long, l As Long
    l = 11
    For i = 9 To 100 Step 2
        Sheets("工程表 (B)").Select
        Rows(i & ":" & i + 1).Select
        Selection.Cut
        Sheets("工程表(A)").Select
        Rows(l).Select
        Selection.Insert Shift:=xlDown
        l = l + 4
    Next i
 End Sub

 selectする部分を省略して書くと、
 Sub Macro2()
    Dim i As Long, l As Long
    l = 11
    For i = 9 To 100 Step 2
        Sheets("工程表 (B)").Rows(i & ":" & i + 1).Cut
        Sheets("工程表(A)").Rows(l).Insert
        l = l + 4
    Next i
 End Sub

 のようになります。
(秀丸) 2017/06/08(木) 08:55

ありがとうございます!思い通りにできました!
とても助かります。

selectする必要はなかったのですね。
一体どうすれば、皆さんの様にスラスラとスマートニ書けるようになるのでしょうか。
実践有るのみでしょうか。

下手な質問に丁寧に答えていただき、本当にありがとうございました。
(素人) 2017/06/08(木) 22:04


コメント返信:

[ 一覧(最新更新順) ]


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