[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『工程表(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.