[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート追加し前日までの人数の累計を反映』(りこ)
シートを追加し前日までの人数の累計を反映させるには。
おはようございます。いつも大変お世話になっています。 今回は、毎日の日報を作成し累計を計算したいのですが・・・。
Sheet名 11月1日 sheet名 11月2日 当日 累計 当日 累計 鳶工 1 1 鳶工 1 2 土工 2 2 土工 1 3 型枠 3 3 型枠 1 4
補足 @sheetの追加はユーザーフォームのテキストボックスより日付を指定して、 原本のシートをコピーしてシートを追加しています。 A累計には作成する日の当日と前日までの累計がたしたものが表示できるようにする。
上の@でシートをコピーした時に累計が計算されてシート追加することってできるので しょうか・・・。
Private Sub CommandButton1_Click() Worksheets("原本").Copy after:=Worksheets("原本") Range("w4") = 作成日.TextBox4.Text ’打合年 Range("z4") = 作成日.TextBox5.Text ’打合月 Range("ac4") = 作成日.TextBox6.Text ’打合日
Range("w6") = 作成日.TextBox1.Text ’作業年 Range("z6") = 作成日.TextBox2.Text ’作業月(シート名に) Range("ac6") = 作成日.TextBox3.Text ’作業日(シート名に) ActiveSheet.Name = Range("z6") & "月" & Range("ac6") & "日" Range("a12").Select
Unload 作成日 End Sub
何分初心者なもので宜しくお願いいたします。
りこさん、こんちわ。 え〜っと、この鳶工、土工、型枠等をどの列に入力してあるんか分かりまへんさかい 一応A1からりこさんが呈示してくれた案配になっとるとして書きましたんでな、 違うようやったら中身を書き換えておくんなはれや。 それと、シートの並びは当然原本から日付の浅い順に「原本」「11月2日」「11月 1日」、と並んでますわなぁ。そのつもりで書いてます。 累計欄に関数を挿入しましたさかい、当日の人数を記入したらその日の累計が出るよう になったますわ、えぇ。
あとひとつ、作成日.textbox.textとフォーム名を入れて有りますけど、これは無うて もええんとちゃいまっしゃろか。 ほな...(弥太郎) 'ActiveSheet.Name = Range("z6") & "月" & Range("ac6") & "日" 'の下に data_a = ActiveSheet.Name data_b = Worksheets(3).Name n = Range("a2").End(xlDown).Row Range("c2") = "=sum(" & data_b & "! c2 ," & data_a & "!b2)" Range("c2").Copy Destination:=Range("c2:c" & n)
Range("a12").Select
弥太郎様、 北海道より大阪のUSJに2泊3日で遊びにいってきて返事が遅くなりました。 弥太郎様は関西の方なのでしょうか・・・。 早速ですが、セル番地をあわせて作ってみたのですが、 “結合されたセルの一部を変更することはできません”というエラーが でて黄色になってとまってしまいます。 Range("c2").Copy Destination:=Range("c2:c" & n)
私のセル番地にあわせると上記コードの部分を 'ActiveSheet.Name = Range("z6") & "月" & Range("ac6") & "日" 'の下に data_a = ActiveSheet.Name data_b = Worksheets(5).Name n = Range("ba57").End(xlDown).Row Range("bf57") = "=sum(" & data_b & "! bf57 ," & data_a & "!ba57)" Range("bf57").Copy Destination:=Range("bf57:bf" & n) Range("bf57").Copy Destination:=Range("bf57:bf" & n) Range("a12").Select に直しました。 しかし、計算結果は1行目だけはきちんと表示されているんです・・・。
実際のシートの中身を表示します。 <Sheet1> AT BA BF BM BT BY 当日 累計 当日 累計 57 鳶工 1 1 雑工 1 2 58 土工 2 2 塗装 1 3 59 型枠 3 3 埋設 1 4 60 ・ ・ 76 舗装 77
AT57鳶工からBM76舗装工までのBF57:BF77,BY57:BY76の累計を出したいのですが。 頼りっぱなしで申しわけございません。(りこ)
りこさん、こんばんわ。 北海道からこっちへ来てはったんやてなぁ。エライ又豪勢な...。さてはりこさんの会 社、相当儲かってまんな。(笑)
ところで、マクロの天敵は「結合セル」ですわ。これがあったら「チョッとお待ち!」 と手を広げられます。融通効きまへんさかいなぁ、ホンマに。
も一回初めからいきまひょか。 「原本」のインデックス番号は何番でっか?シートの左下にシート名が並んでまっしゃ ろ。りこさんの修正したVBAから推測すると3番目になっとる筈ですわなぁ。 累計を出すのは原本のすぐ後に新しいシートを作成して、その以前のシートの累計欄を 拾うて新しいシートに書き込むようになってますさかいな。コレ大事でっせ。 さ〜てほんなら下のコードをコピペして試してみておくんなはれ。 ほな...(弥太郎)
'ActiveSheet.Name = Range("b6") & "月" & Range("c6") & "日" 'この下に data_a = ActiveSheet.Name data_b = Worksheets(5).Name Range("bf57") = "=sum(" & data_b & "! bf57 ," & data_a & "!ba57)" Range("bf57").Copy Destination:=Range("bf57:bf77") Range("by57") = "=sum(" & data_b & "! by57 ," & data_a & "!bt57)" Range("by57").Copy Destination:=Range("by57:by76") Range("a12").Select Unload Me '範囲が分かったさかい、nの列は削除しました。
弥太郎様、おはようございます。 やっぱり、関西の方だったのですね。 北海道は今日は雪です。。。
早速コピペしてみましたが、下のコードのところで同じくエラーが でてとまってしまいます。 同じく結果は1行目(BF57)だけきちんと表示されます。 (BF57:BF77,BY57:BY76まで累計をだしたいのですが)
Range("bf57").Copy Destination:=Range("bf57:bf77") どうしたらいいのかまったく理解できなく、再度ご検討お願いしたい のですが・・・。宜しくお願い致します。 (りこ)
追記です。 シート構成は下のようになっています。 sheet1(リスト)sheet2(メニュー画面)sheet3(原本)
メニュー画面に日報作成ボタンを貼り付けてクリックしたら フォーム画面で日付を入力 → 原本をコピー → コピーされたものにシート名を フォームで入力した日付にする。 常に、原本の横に最新の日付のシートがコピーされるという仕組みです。 宜しくお願いします。
(りこ)
りこさん、おはようございます。 >北海道は今日は雪です。。。 い〜ッ、さむ〜っ! 流石北の盟主、厳然とした自然の息づかいが伝わってきますわ。
さて、こちらはりこさんのユーザーフォームを想像して作りましてナ、そこから入力 して確認してまんのやけど、スイスイ動いてますわ。 う〜ん、一体何が障ってまんのやろ? CommandButton1をクリックした時点で新しいシートが原本の後に挿入されとる筈ですわ なぁ。つまり並びは「リスト」「メニュー画面」「原本」「今月分(新)」「先月分」 ッちゅう案配に。 マージセルは使うてまへんわなぁ。 ほんならお手数でっでど、エラーメッセージの内容教えてくれしまへんか? 解決の糸口見つける事でけるかもしれまへんさかいナ。 ???(弥太郎)
弥太郎様、早速ですがエラーメッセージは前回と同様に “結合されたセルの一部を変更することはできません”とでます。 シート構成は毎日作成するので、下記のようになります。
マージセルとはどういうことでしょうか? 意味がわからなくて・・・(情けない)
「リスト」「メニュー画面」「原本」「11月30日」「11月29日」「11月29日」 (りこ)
ごめん、マージセルっちゅうんは結合セルの事ですわ。前述したように結合セルはマク の天敵ですわ。 コピーする範囲のどのセルとどのセルが結合されとりまっか。またその結合セルは絶対 必要なモンでっか? (弥太郎)
何度もすいません。。。 セルはおもいっきり結合されています。 当日人員と累計を出す行の上にもいろいろなデータなどを打ち込まなければ ならず、どうしてもセルを結合した帳票になってしまいます。 無理なのでしょうか・・・。
セルなんですが AT BAとBB結合 BFとBG BM BTとBU BYとBZ 当日 累計 当日 累計 57 鳶工 1 1 雑工 1 2 58 土工 2 2 塗装 1 3 59 型枠 3 3 埋設 1 4 60 ・ ・ 76 舗装 77 BAとBB、BFとBG、BTとBU、BYとBZがそれぞれ結合されています。 これが原因でしょうか・・・。 (りこ) ---- 列の結合だけでっか?行の結合はおまへんか? (弥太郎)
はい。列のみです。行の結合はありません。 宜しくお願いします。 (りこ)
はい、お待たせしました。 下のコードに差し替えて、試してみておくんなはれ。 また不都合がありましたら、ご連絡下さい。 (弥太郎)
'Range("bf57") = "=sum(" & data_b & "! bf57 ," & data_a & "!ba57)" ’この下に Range("bf57:bg57").Copy Range("bf58:bg77").Select ActiveSheet.Paste Range("by57") = "=sum(" & data_b & "! by57 ," & data_a & "!bt57)" Range("by57:bz57").Copy Range("by58:bz76").Select ActiveSheet.Paste Application.CutCopyMode = xlCut Range("a12").Select ’でいけるはずです。
弥太郎様 ありがとうございます。 余計なシートを削除して「リスト」「メニュー画面」「原本」この3シート だけを残し、始めてみると data_b = Worksheets(5).Nameのところで“インデックスが有効範囲にありません” となってしまいます。 Sheet5枚目がないのでエラーがでるのはなんとなくわかるのですが・・・。
それと、当月人員が入力されていなくても累計だけは表示させたいのですが。
お願いばかりで本当に申し訳ございません。宜しくお願いします。
(りこ)
何度も申し訳ございません。
"それと、当月人員が入力されていなくても累計だけは表示させたいのですが" は、問題ありませんでした。きちんと確認せずにごめんなさい。 (りこ)
衝突しました。 こちらエクセルのバージョン2000でっけど、おたくは? 余計なシートを削除して試してみましたけどエラーは出まへんわ。
ほんなら、1つずつやってみまひょか。 「リスト」「メニュー画面」「原本」の3シートだけ残して下さい。 今のコードに追加してみておくんなはれ。
'ActiveSheet.Name = Range("b6") & "月" & Range("c6") & "日" ↓ On Error Resume Next ’この行挿入 ↑ 'data_a = ActiveSheet.Name
'Range("a12").Select ↓ On Error GoTo 0 ’この行挿入 ↑ 'Unload Me これで新しいシート(シート名12月3日)を作って下さい。 そのシートのBF,BG結合セルの57〜77までと BY,BZの57〜76迄0がならんでまっか? 並んどったらBFの57をクリックしてみておくんなはれ。 数式バーに =SUM(原本!BF57,'3月4日'!BA57) と出ましたやろ? で、シートの並びは「原本」の後に「12月3日」になってますわなぁ。 そこまででけたら(でけんでも)連絡下さい。 (弥太郎)
累計がでけたんやったら、関数の確認は必要おまへん、はい。 (弥太郎)
本当にすいません。そろそろ嫌になっていませんか? XPを使用しています。 エラーが出ることはなく進んだのですが、 0は並んでいません。 =SUM(原本!BF57,'3月4日'!BA57)このようにも表示されていません。 まったく、悔しい限りです。 なぜなんでしょうか・・・。 (りこ)
ちなみに、12月4日を新たに作成すると計算式がでてきますが、 12月3日のシートが計算されないため、累計があいません。 12月4日のシート以降は計算されるのですが・・・。 (りこ)
>そろそろ嫌になっていませんか? とんでもおまへん。退屈しのぎにやってますさかいナ、今日1日楽しめて儲けたと思う てまんねんで、えぇ。気ぃ使わんとっておくんなはれや。
>悔しい限りです なんでえな。私がチャンとしとったらそんな憂き目に合わさんでもええのに、あいスマ ンことです、ハイ。
'data_a = ActiveSheet.Name ↓ ’ここから差し替えてみておくんなはれ。 For i = 1 To 40 If data_a = Sheets(i).Name Then data_b = Sheets(i + 1).Name Exit For End If Next i
If data_b = "" Then Range("bf57") = "=ba57" Range("by57") = "=bt57" Else Range("bf57") = "=sum(" & data_b & "! bf57 ," & data_a & "!ba57)" Range("by57") = "=sum(" & data_b & "! by57 ," & data_a & "!bt57)" End If
Range("bf57:bg57").Copy Range("bf58:bg77").Select ActiveSheet.Paste Range("by57:bz57").Copy Range("by58:bz76").Select ActiveSheet.Paste Application.CutCopyMode = xlCut Range("a12").Select On Error GoTo 0
シートを削除しとったらindex番号が狂うてしもて、訳分からんようになってましたわ いなぁ。 もう終業時間やのになぁ、気の毒に。 明日も家にいてますさかい、明日でもよろしいんやで。累計の事は明日。 ほな...(弥太郎)
おはようございます。 累計の件ですけど、最新の旧シート(大抵は前日のシート名のシート)の累計を新シー トに転記するようになってますさかい、その前日のシートがブック上に無ければ新シー トの累計欄はすべて0で表示されます。 累計は月単位やおまへんのん? ブックの更新はいつになりますか? ブックの更新時と累計の更新時がずれとる場合は、ダミーとして前日のシートを新しい ブックの原本のすぐ後に(新しいシートをコピーする前に)コピーしておいた状態で新 シートを作成しなければなりまへん。(累計を拾わす為に) でなければ、手入力か、人力でコピーです。
上のコードのNext i の下の行を削除してありますんで、走らせる前にもう1回確認 しておくんなはれ。 ほな...(弥太郎) ごめん、Range("a12").Select(元のコード)に訂正しました。
弥太郎様、おはようございます。完璧です!うれしー!! おっしゃる通り累計の件ですが月単位で更新し、前日のシートを原本のすぐ後に 残して他のシートは削除するようにして問題なく更新することができました。 何とお礼をいっていいのか・・・。昨日は私のために1日朝から付き合ってもらい 本当に感謝しています。今日も朝早くからありがとうございます。 私の勤めている会社は建設業なんですが社員が100名ほどいます。そのうち 今回作成したものを使用する人数は70名ほどいます。今までは手計算で使用 するか、手入力するしかない状態でした。 私の力ではとうてい完成することができなかったので、本当に感謝しています。 社内LANで社員に配布する予定ですが、私一人の力ではなく、この場でお世話に なった弥太郎様の事もきちんと伝えたいと思っています。 本当にありがとうございます。又お世話になる日があると思いますのでその時は 是非、宜しくお願いします。 北海道より白い恋人でも差し上げたい気持ちでいっぱいです。 (りこ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.