- ベストアンサー
マクロ アドバイスお願いいたします。
Sub a() Sheets("あ").Select Range("C25").copy Sheets("い").Select Range("E27").PasteSpecial Sheets("あ").Select Range("D25").copy Sheets("い").Select Range("F27").PasteSpecial Sheets("あ").Select Range("E25").copy Sheets("い").Select Range("G27").PasteSpecial ・・・(1) Sheets("あ").Select Range("C26").copy Sheets("い").Select Range("E29").PasteSpecial Sheets("あ").Select Range("D26").copy Sheets("い").Select Range("F29").PasteSpecial Sheets("あ").Select Range("E26").copy Sheets("い").Select Range("G29").PasteSpecial ・・・・(2) End Sub コピーの貼り付け元と貼り付け先のセルが異なるため、セル一つずつ コピー、貼り付けををしなければなりません。 以上のように、シート"あ" と "い" を行ったりきたりになって しまい、(5)まで続きます。(1)のなかで既に10回くらい行きき しなければなりません。 ★何か動作を単純化することはできますでしょうか。 ★またもし動作自体単純化できなくても、書き方を簡略することはできますでしょうか。(長すぎて格好悪く感じます。) 全く初心者なのでアドバイスをお願いいたします。 (エクセル2003、OSはXPです。)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Sub a修正後() Worksheets("い").Range("E27:G27").Value = Worksheets("あ").Range("C25:E25").Value Worksheets("い").Range("E29:G29").Value = Worksheets("あ").Range("C26:E26").Value End Sub こんな感じでいかがでしょうか?
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >コピーの貼り付け元と貼り付け先のセルが異なるため、セル一つずつコピー、貼り付けををしなければなりません。 よく分からないです。コードを見る限りは、単に、ループすればよいのではないでしょうか? シート「い」の方は、一行おきに貼り付けるわけなら、以下のようにします。 ------------------------------- Sub CopyLoop() Dim a As Worksheet Dim b As Worksheet Dim i As Long Set a = Worksheets("あ") Set b = Worksheets("い") For i = 0 To 1 '繰り返す回数から、1 を引く a.Range("C25:E25").Offset(i).Copy b.Range("E27").Offset(i * 2) Next i 'オブジェクトを開放 Set a = Nothing: Set b = Nothing End Sub
お礼
説明不十分な質問に回答いただきありがとうございます。 ループは難しそうですが、参考にさせて頂き、やってみます。
補足
ループを分かりやすく教えていただきありがとうございます。10ポイントつけさせていただきます。
- onlyrom
- ベストアンサー率59% (228/384)
Selectメソッドは必要なとき以外は省きませう。 '------------------------------------------------ Sub Test() Sheets("あ").Range("C25:E25").Copy Sheets("い").Range("E27") Sheets("あ").Range("C26:E26").Copy Sheets("い").Range("E29") '・・ 以下同様 ・・ End Sub '------------------------------------------------ 以上。
お礼
ありがとうございます。selectは省けるのですね。初心者なので無知ですみません。もっと勉強いたします。
- imogasi
- ベストアンサー率27% (4737/17070)
ここに質問する前に、 操作で出来るだけ、複数セルの範囲指定をして、別シートに貼り付ける そういう操作をツール(新しい)マクロの記録で記録ををとりコードを見れば、参考になるでしょう。 もっと本とか、WEBとかで他人の書いたコードを勉強しないと。 VBAはエクセルの操作と密接にかかわっているので、そちらの勉強も必要。
お礼
ありがとうございます。おっしゃる通りです。もっと勉強してから質問いたします。
- merlionXX
- ベストアンサー率48% (1930/4007)
Sheets("い")に持ってくるのが値だけでいいなら#1さんのでいいですが、書式も持ってくるなら Sub test01() Sheets("あ").Range("C25:E25").Copy Sheets("い").Range("E27").PasteSpecial Sheets("あ").Range("C26:E26").Copy Sheets("い").Range("E29").PasteSpecial Application.CutCopyMode = False End Sub です。
お礼
ありがとうございます。"Application.CutCopyMode"初めて聞いたので参考にさせていただきます。
お礼
ありがとうございます。参考にさせて頂きます。
補足
サイトも教えていただき有難うございました。分かりやすい式を一番初めに回答していただいたので良回答とさせていただきました。