アプリ版:「スタンプのみでお礼する」機能のリリースについて

中小企業の工場で働いている者です。

一月の一日ごとの工場の仕事の負荷を把握したのですが、
何百部品もあり、マンパワーでは時間がかかり、簡素化したいと考えています。
そこで、エクセル(2010)のVBAを使って解決したいのですが、
VBA初心者の私にはプログラムを作れそうにありません。

誰かお力添え頂けませんでしょうか。

●(Shee1)A列に日付、B列に部品毎に負荷(作業時間h)が分かっています。

   A       B          
1  日付     負荷(作業時間h)  
2  2/1      2
3  2/1       0.06
4  2/2      0.005
・  ・        ・
・   ・       ・
・  ・       ・

●(Sheet2)

    A         B    C     DEFG・・・   
1  日付       2/1     2/2    2/3・・・
2  負荷合計時間h       
3  ロット数

①Shee1にマクロのボタンを作り、
ボタンを押すと、
まず、A列目の日付2/1を検索し、そのB列にある負荷を合計したものを
Sheet2のB2に張り付ける。
次は、2/2を検索し、そのB列にある負荷を合計したものを
Sheet2のC2に張り付ける。
それを、最後日まで繰り返す。(納期遅れ品もあり、複数月にまたがることもあります)

可能であれば、Sheet2の1行目の 2/1  2/2   2/3・・・も、
自動で入力できると助かります。

②続いて、
Shee1のA列目の日付2/1を検索し、その数の合計(2/1が何個あるか、)を
Sheet2のB3に張り付ける。(Shee1のC列に1を入れておいて、合計してもよいですが。)
次は、2/2を検索し、その数の合計をSheet2のC3に張り付ける。
これを最後日まで繰り返す。

誰か、このVBA初心者にお力添えください。
よろしくお願いいたします。

質問者からの補足コメント

  • 御回答ありがとうございます。
    ソートできます。
    Sheet1のA2を開始日で問題ありません。

    日付の歯抜けは、0にして頂けると助かります。

    よろしくお願いいたします。

      補足日時:2017/01/25 12:21
  • 御回答ありがとうございます。
    ソートできます。
    Sheet1のA2を開始日で問題ありません。

    日付の歯抜けは、0にして頂けると助かります。

    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/01/25 12:46
  • うーん・・・

    tatsu99さん

    実行すると、型が一致しません
    と出ます。

    どのようにすると、良いのでしょうか?

    初心者なもので、わかりません。
    よろしくお願いいたします。

      補足日時:2017/01/26 07:41
  • うーん・・・

    ご回答ありがとうございます。

    負荷は、全て数値が入っています。

    日付も出ます。

    型が一致しないは、全ての行で出ます。


    勉強不足ですみません。
    よろしくお願いいたします。

    No.5の回答に寄せられた補足コメントです。 補足日時:2017/01/26 23:49

A 回答 (7件)

以下のマクロを標準モジュールへ登録してください


------------------------------------------
Option Explicit

Dim sh1 As Worksheet 'Sheet1
Dim sh2 As Worksheet 'Sheet2
Dim col2 As Long 'Sheet2の列
Dim row1 As Long 'Sheet1の行
Dim maxrow1 As Long 'Sheet1の最大行
Dim fuka As Variant '負荷計
Dim count As Long 'ロット数
Dim date0 As Variant '日付(前回)
Dim date1 As Variant '日付(今回)

Public Sub 日別負荷集計()
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow1 = sh1.Cells(Rows.count, 1).End(xlUp).Row ' 最終行を求める
'集計情報初期化
col2 = 2
date0 = ""
fuka = 0
count = 0
For row1 = 2 To maxrow1 '2から最終行まで繰り返す
date1 = sh1.Cells(row1, 1).Value
If date1 <> date0 Then
'日付が前回と異なるなら集計分を出力
Call shukei(False)
End If
'加算する
fuka = fuka + sh1.Cells(row1, 2).Value
count = count + 1
date0 = date1
Next
'最後の集計分を出力
Call shukei(True)
MsgBox ("処理完了")
End Sub
'集計分の出力
Private Sub shukei(ByVal force As Boolean)
Dim diff As Variant
Dim i As Long
If date0 = "" Then Exit Sub '前回日付が空白時は処理しない
sh2.Cells(1, col2).Value = date0 '日付
sh2.Cells(2, col2).Value = fuka '負荷計
sh2.Cells(3, col2).Value = count 'ロット数
col2 = col2 + 1
fuka = 0
count = 0
'歯抜けの日付を0で埋める
If force = False Then
diff = date1 - date0
If diff > 1 Then
For i = 1 To diff - 1
sh2.Cells(1, col2).Value = date0 + i '日付
sh2.Cells(2, col2).Value = 0 '負荷計
sh2.Cells(3, col2).Value = 0 'ロット数
col2 = col2 + 1
Next
End If
End If
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーー
    • good
    • 0
この回答へのお礼

tatsu99さん

できました。
ありがとうございました。

負荷のところに、 ー があり、これが動かない理由だったようです。
確認不足でした。
失礼しました。

これからもよろしくお願いいたします。

お礼日時:2017/01/27 06:05

エラー行の出し方ですが、


添付の図のように、エラーが出たとき、「デバッグ」をクリックします。
そうすると、エラーの箇所が、黄色く表示されますので、その箇所を教えてください。
「VBA初心者です。リストの検索と貼り付け」の回答画像7
    • good
    • 0

>型が一致しないは、全ての行で出ます。



プログラムのどの行ででますか。という質問です。
例えば、エラーが発生すると
sh2.Cells(1, col2).Value = date0 '日付
のような箇所で、止まると思いますが、その箇所を教えてください。

あと、出来れば、Sheet1のデータの入っているA,B列の画像(5行分くらい)
を提示していただけるとありがたいです。
画像は、アクセサリのSnipping toolを使うと簡単に作成できます。
    • good
    • 0

Sheet1の日付か負荷に正しい値がはいってない可能性があります。


1)負荷は、全て数値がはいってますか。("あああ"等の文字がはいってませんか)
2)日付は、セルの初期設定で m/d になっていますか。(添付の図参照)
A2のセルをクリックした時、上のfxの欄に 2017/2/1のように 日付がでますか。(添付図の黄色の部分)
「VBA初心者です。リストの検索と貼り付け」の回答画像5
この回答への補足あり
    • good
    • 0

>実行すると、型が一致しませんと出ます。



どの行ででますか。出た行を教えてください。
    • good
    • 0

質問1)


日付は昇順にならんでますか。日付が戻ることはないですか。
日付が戻ると、何日を開始日にすれば良いかが判りません。
また、日付の戻りがあるなら、一旦、日付で、ソートしたものを実行するようにできますか。
Sheet1のA2を開始日にしてよいですか。

質問2)
日付が歯抜けになることはありますか。(休日で休み等の場合)
もしあれば、その日は0で作成するのですか。
それとも、列に登録しないのですか。
この回答への補足あり
    • good
    • 0

VBAでなくても行けるような。



ピボットテーブルを覚えてください。
    • good
    • 0

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