• ベストアンサー

マクロ アドバイスお願いいたします。

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です。)

質問者が選んだベストアンサー

  • ベストアンサー
  • izmlz
  • ベストアンサー率55% (67/120)
回答No.1

Sub a修正後() Worksheets("い").Range("E27:G27").Value = Worksheets("あ").Range("C25:E25").Value Worksheets("い").Range("E29:G29").Value = Worksheets("あ").Range("C26:E26").Value End Sub こんな感じでいかがでしょうか?

参考URL:
http://www2.odn.ne.jp/excel/waza/macro.html
minnye
質問者

お礼

ありがとうございます。参考にさせて頂きます。

minnye
質問者

補足

サイトも教えていただき有難うございました。分かりやすい式を一番初めに回答していただいたので良回答とさせていただきました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >コピーの貼り付け元と貼り付け先のセルが異なるため、セル一つずつコピー、貼り付けををしなければなりません。 よく分からないです。コードを見る限りは、単に、ループすればよいのではないでしょうか? シート「い」の方は、一行おきに貼り付けるわけなら、以下のようにします。 ------------------------------- 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

minnye
質問者

お礼

説明不十分な質問に回答いただきありがとうございます。 ループは難しそうですが、参考にさせて頂き、やってみます。

minnye
質問者

補足

ループを分かりやすく教えていただきありがとうございます。10ポイントつけさせていただきます。

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

  Selectメソッドは必要なとき以外は省きませう。 '------------------------------------------------  Sub Test()  Sheets("あ").Range("C25:E25").Copy Sheets("い").Range("E27")  Sheets("あ").Range("C26:E26").Copy Sheets("い").Range("E29")     '・・ 以下同様 ・・ End Sub '------------------------------------------------ 以上。

minnye
質問者

お礼

ありがとうございます。selectは省けるのですね。初心者なので無知ですみません。もっと勉強いたします。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

ここに質問する前に、 操作で出来るだけ、複数セルの範囲指定をして、別シートに貼り付ける そういう操作をツール(新しい)マクロの記録で記録ををとりコードを見れば、参考になるでしょう。 もっと本とか、WEBとかで他人の書いたコードを勉強しないと。 VBAはエクセルの操作と密接にかかわっているので、そちらの勉強も必要。

minnye
質問者

お礼

ありがとうございます。おっしゃる通りです。もっと勉強してから質問いたします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

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 です。

minnye
質問者

お礼

ありがとうございます。"Application.CutCopyMode"初めて聞いたので参考にさせていただきます。

関連するQ&A

専門家に質問してみよう