プロが教えるわが家の防犯対策術!

セルE5に1月、2月、3月、4月、5月~12月という文字が
入るようになっています。

たとえば、E5に5月という文字が入ったら、セルのE6~
E38のセルに入っているデータをコピーして
別シートのR17~R38の所にデータを貼り付けたい。

たとえば、E5に4月という文字が入ったら、セルのE6~
E38のセルに入っているデータをコピーして
別シートのQ17~Q38の所にデータを貼り付けたい。という場合の

E5に6月の場合は、貼り付ける場所が、S17~S38
E5に7月の場合は、貼り付ける場所が、T17~T38
E5に8月の場合は、貼り付ける場所が、U17~U38
E5に9月の場合は、貼り付ける場所が、V17~V38
になります。
マクロの記述の仕方を教えてください。

A 回答 (4件)

>E5に5月という文字が入ったら



5月と入ったらすぐに(ボタンを押さないで)コピーしていいのか
ボタンを押した時に,5月と入っていたらなのか
ちょっと分からないのですが・・・

下記はボタンを押してから処理するようになっています。
(5月と入力されてすぐプログラムが動くようにする事もできますが、
間違えて入力した時にも、処理されますから、
ワンクッションいれた方が良いと思います。)

(1)元シート名、別シート名が分かりませんので、
   Sheet1、Sheet2にしてあります。
  違う場合は、
  Set ws1 = Worksheets("Sheet1")
  Set ws2 = Worksheets("Sheet2")
  の""内を変更してください。
(2)1月ならばA列、2月ならばB列、・・・11月ならばK列、12月ならばL列
  にコピーします。
(3)いろいろな書き方ができますので、私の書き方が最善とはいえません。
   (もちろん、Copyメソッドを使った書き方もできます。)

********************この下から****************
Sub Test()
  Dim ws1 As Worksheet 'コピー元
  Dim ws2 As Worksheet 'コピー先
  Dim mm As Integer  '月
  
  Set ws1 = Worksheets("Sheet1")
  Set ws2 = Worksheets("Sheet2")
  
  'E5セルに、[月]の入力があれば、[月]をなくし、数字に変換する
  mm = CInt(Replace(ws1.Range("E5"), "月", ""))
  
  ws2.Range(ws2.Cells(6, mm), ws2.Cells(38, mm)).Value = ws1.Range("E6:E38").Value
  '変数の開放  
  Set ws1 = Nothing
  Set ws2 = Nothing
End Sub
********************この上まで****************

何か分からない事があれば、補足してください。
    • good
    • 0

>たとえば、E5に5月という文字が入ったら、セルのE6~


>E38のセルに入っているデータをコピーして
>別シートのR17~R38の所にデータを貼り付けたい。

コピー元とコピー先のセル数が一致しないのですが、書き間違いですか?
それとも空白のセルを除く等の処理が必要なのですか?

この回答への補足

すいません下記違えていました・
たとえば、E5に5月という文字が入ったら、セルのE6~
>E38のセルに入っているデータをコピーして
>別シートのE6~E38の所にデータを貼り付けたい。
たとえば、E5に4月という文字が入ったら、セルのE6~
>E38のセルに入っているデータをコピーして
>別シートのF6~F38の所にデータを貼り付けたい。

よろしくお願いします。

補足日時:2003/07/14 08:42
    • good
    • 0

E5セルには5,6など数字だけ入れて、表示形式で5月


、6月・・・になるようにします。
VBE画面でF5キーでモジュール1でやりましたが
Sub test01()
a = Array("", "", "", "", "", "s17", "t17", "u17", "")
Range("E6:e38").Copy
Range(a(Cells(5, "E"))).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
本当はシートにコマンドボタンを1つ貼りつけ、クリックイベントに変える方法が良いでしょうが、改造方法はわかりますよね。
上例では5,6,7月しかArray()に入れていませんが、残りの月も入れてください。
少数例でテスト済み。急いで手抜き済みません。
この方法はコピーと貼りつけ範囲に規則性がなくても改造して使えると思います。
    • good
    • 0

E6~ E38とR17~R38ではデータの数が違いますね。


何かの勘違いかと思われますが・・・最後の38行目はあってるという仮定でアドバイス差し上げますと・・・

VBAじゃなくても
R38=if(E5="5月",E38,"")
S38=if(E5="6月",E38,"")




で対処できますが、VBAじゃないと気に入りませんか?

この回答への補足

回答有難うございます。
計算式を入れるのが面倒ですので、
できたらVBAで教えてください。

補足日時:2003/07/12 11:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!