- ベストアンサー
Excel2000でのVBAの記述の仕方
- Excel2000でのVBAを使用して、指定したセルに月の文字を入力し、それに応じてデータを別のシートに貼り付ける方法について教えてください。
- 具体的には、セルE5に1月から12月までの月の文字が入力される想定です。セルE5に入力された月の文字に応じて、セルE6からE38の範囲のデータを別のシートのR17からR38(1月の場合)またはQ17からQ38(それ以外の場合)に貼り付ける方法を教えてください。
- 例えば、セルE5に5月が入力された場合、セルE6からE38のデータを別のシートのR17からR38に貼り付けます。同様に、4月の場合はQ17からQ38、6月の場合はS17からS38、7月の場合はT17からT38、8月の場合はU17からU38、9月の場合はV17からV38に貼り付けるように設定したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
E6~ E38とR17~R38ではデータの数が違いますね。 何かの勘違いかと思われますが・・・最後の38行目はあってるという仮定でアドバイス差し上げますと・・・ VBAじゃなくても R38=if(E5="5月",E38,"") S38=if(E5="6月",E38,"") ・ ・ ・ ・ で対処できますが、VBAじゃないと気に入りませんか?
その他の回答 (3)
- taisuke555
- ベストアンサー率55% (132/236)
>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 ********************この上まで**************** 何か分からない事があれば、補足してください。
- taisuke555
- ベストアンサー率55% (132/236)
>たとえば、E5に5月という文字が入ったら、セルのE6~ >E38のセルに入っているデータをコピーして >別シートのR17~R38の所にデータを貼り付けたい。 コピー元とコピー先のセル数が一致しないのですが、書き間違いですか? それとも空白のセルを除く等の処理が必要なのですか?
補足
すいません下記違えていました・ たとえば、E5に5月という文字が入ったら、セルのE6~ >E38のセルに入っているデータをコピーして >別シートのE6~E38の所にデータを貼り付けたい。 たとえば、E5に4月という文字が入ったら、セルのE6~ >E38のセルに入っているデータをコピーして >別シートのF6~F38の所にデータを貼り付けたい。 よろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
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()に入れていませんが、残りの月も入れてください。 少数例でテスト済み。急いで手抜き済みません。 この方法はコピーと貼りつけ範囲に規則性がなくても改造して使えると思います。
補足
回答有難うございます。 計算式を入れるのが面倒ですので、 できたらVBAで教えてください。