[[20140817152501]] 『各シートに貼り付け』(和代) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『各シートに貼り付け』(和代)

お世話になっています。

シート名:”給与集計”にA1:aw51迄の元データがあります。データ内容は、アルバイトの支払で日付、名前、出勤、退勤時間、時給、金額等です。
他のシート名が"1日"(1は、全数字にしています)から"31日"までの31シートがあります。
シート名:"給与集計"で1日分が完了すれば、シート名:1日に貼り付け、2日分が終われば2日に貼り付け、31日が終われば31日のシートに貼り付けします
下記のVBAを作成したのですが、これであればシート名:”給与集計”の下記シートコードを31日分変更しなければいけません(フォームコントロール31個分作成)

教えて頂きたいのは、マクロボタンを押せばMsgBoxが出て何日のシートに貼り付けしますか?私が1(一日の意味)と入力すれば、1日でいですか(31と入力すれば31日でいいですか)?YES or NOの選択画面が出てきてそれのどちらかをクリックします。YESを押せばシート名”1日”に貼り付けされるように下記コードを追加修正して頂きます様にお願い致します。

Sub prcCellCopy給与集計1日()

 Worksheets("給与集計").Range("a1:aw51").Copy
 Worksheets("1日").Range("A1").PasteSpecial

< 使用 Excel:Excel2007、使用 OS:unknown >


 新規ブックの標準モジュールに以下のコードを貼り付けて実行してみてください。

 Option Explicit
 Sub test()
    Const cancel As Variant = "False"
    Dim dd As Variant
    dd = Application.InputBox("何日のシートに貼り付けしますか?", "シート選択", , , , , , 1)
    If dd <> cancel Then
       If MsgBox(StrConv(dd, vbWide) & "日 ですか?", vbOKCancel) = vbOK Then
          MsgBox "処理開始"
       End If
    End If
 End Sub

 testを実行してみてください。入力要求ダイアログが表示されます。

 数字を入力してください(数字以外は入力不可になっています、InputBoxメソッドを調べてください)。

 数字が入力されると、再度確認メッセージが表示されます。

 こんなコードですよね?

 後は、入力は、数字なら何でも入力できますから、これを1〜31に限定するためにチェックするか?

 そのまま、本処理を実行して、エラートラップを拾うか(ないシートを指定すればエラーになりますから・・・On Error Resume Next を調べる)?
 どちらかの処理が必要です。

 よくコードを調べて見てください。

(ichinose@明日から、また仕事) 2014/08/17(日) 17:54


ichinose@明日から、また仕事様、今晩は、
早速の回答を有難うございます。

「こんなコードですよね?」−−私:その通りです。喜んで実行しましたら、貼り付け先に何のデータもコピーされていません。?数字を入力してください、という事は、シート名も例えば"1日"の1は全角ではなく
半角の1ですよね、当初の質問で「他のシート名が"1日"(1)は、全数字にしています」と書いていましたが数字を入力してくださいとありましたので、シート名の日にちを半角の数字に置きなおしたのですが、
何もコピーされていませんでした。
私のどこが違っているのでしょうか?
教えて下さい。

(和代) 2014/08/17(日) 18:55


ichinose@明日から、また仕事様へ
上記で私が何もコピーされていません、後で確認をしましたら「Worksheets("給与集計").Range("a1:aw51").Copy Worksheets("1日").Range("A1").PasteSpecial」でのコピー、貼り付けのコードを
貼り付けしていません事に気付きました。後になってすみませんでした。
それで貼り付けしたのですが、当然何日のシートに貼り付けですか?とMsgBoxで聞いているのに
3行上のWorksheets("1日").なんて必要ないのですが、私の作ったコードとichinose@明日からまた仕事様
のコードをつなぎ合わせて色々やり直したのですが貼り付けが出来ません。
申し訳ありませんが、コードを私の作ったコードとつなぎ合わせたコードにして頂けませんか?

(和代) 2014/08/17(日) 19:17


 こんばんは、横入り失礼します。

 素人コードです、しかもシート名入力が 
 1or2or3でなく、1日、2日、3日・・・・・・31日となりますが。

 Sub prcCellCopy給与集計1日()
 Dim sht As Variant
 Dim v As Long
    sht = InputBox("シート名?")
    v = MsgBox(sht & "でいいですか?", vbYesNo)
       If v = vbYes Then
          Worksheets("給与集計").Range("a1:aw51").Copy
          Worksheets(sht).Range("A1").PasteSpecial
       End If
 End Sub
(ところてん) 2014/08/17(日) 20:04

ところてん様へ
有難うございます。

実行しましたら、実行時エラー’9’インデックスが有効範囲にありませんと出ます。シート名は半角の数字と日(例えば1月)にしています−−−−解りませんが、Sub prcCellCopy給与集計1日()の給与集計1日の1日
は必要ですか?

(和代) 2014/08/17(日) 20:33


こんばんは

>シート名は半角の数字と日(例えば1月)にしています
ということですので

InputBox("シート名?")に入力するのを半角の数字と日にしてください。

>給与集計1日の1日 は必要ですか?

 Sub prcCellCopy給与集計1日()←1日の有無は問題ないです。
 

(ところてん) 2014/08/17(日) 20:52


ところてん様へ
有難うございました。
うまく行きました。
1日の有無の件解りました。

ichinose@明日から、また仕事様も有難うございました。
(私の知識不足で申し訳ございませんでした。)

(和代) 2014/08/17(日) 21:30


 もう見ていないかも知れませんが?

 下記コードに変更すればInputBox("シート名?")入力が
 半角の数字だけでOKとなります。

 Sub prcCellCopy給与集計1日()
   Dim sht As Variant
   Dim v As Long
    sht = InputBox("シート名?")
    v = MsgBox(sht & "日でいいですか?", vbYesNo)
       If v = vbYes Then
          Worksheets("給与集計").Range("a1:aw51").Copy
          Worksheets(sht & "日").Range("A1").PasteSpecial
         '入力された^^^^^^^^^^半角数字+日となります。
       End If
 End Sub

(ところてん) 2014/08/18(月) 11:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.