中小企業の工場で働いている者です。
一月の一日ごとの工場の仕事の負荷を把握したのですが、
何百部品もあり、マンパワーでは時間がかかり、簡素化したいと考えています。
そこで、エクセル(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初心者にお力添えください。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
以下のマクロを標準モジュールへ登録してください
------------------------------------------
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
ーーーーーーーーーーーーーーーーーーーーーーーーーー
tatsu99さん
できました。
ありがとうございました。
負荷のところに、 ー があり、これが動かない理由だったようです。
確認不足でした。
失礼しました。
これからもよろしくお願いいたします。
No.7
- 回答日時:
エラー行の出し方ですが、
添付の図のように、エラーが出たとき、「デバッグ」をクリックします。
そうすると、エラーの箇所が、黄色く表示されますので、その箇所を教えてください。
No.6
- 回答日時:
>型が一致しないは、全ての行で出ます。
プログラムのどの行ででますか。という質問です。
例えば、エラーが発生すると
sh2.Cells(1, col2).Value = date0 '日付
のような箇所で、止まると思いますが、その箇所を教えてください。
あと、出来れば、Sheet1のデータの入っているA,B列の画像(5行分くらい)
を提示していただけるとありがたいです。
画像は、アクセサリのSnipping toolを使うと簡単に作成できます。
No.5
- 回答日時:
Sheet1の日付か負荷に正しい値がはいってない可能性があります。
1)負荷は、全て数値がはいってますか。("あああ"等の文字がはいってませんか)
2)日付は、セルの初期設定で m/d になっていますか。(添付の図参照)
A2のセルをクリックした時、上のfxの欄に 2017/2/1のように 日付がでますか。(添付図の黄色の部分)
No.2
- 回答日時:
質問1)
日付は昇順にならんでますか。日付が戻ることはないですか。
日付が戻ると、何日を開始日にすれば良いかが判りません。
また、日付の戻りがあるなら、一旦、日付で、ソートしたものを実行するようにできますか。
Sheet1のA2を開始日にしてよいですか。
質問2)
日付が歯抜けになることはありますか。(休日で休み等の場合)
もしあれば、その日は0で作成するのですか。
それとも、列に登録しないのですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
JSPからYYYYMMDDで日付入力する
-
テキストボックスに今日の日付...
-
VBA 日付・時刻の判別 時刻を認...
-
【VBA】土日をスキップして日付...
-
VBA のMSG の入力部分で日付を...
-
ふと、気になる事が… 中年以降...
-
VisualBasic6.0のFormat関数で...
-
VBA:日付をシリアル値にできる...
-
ユーザーフォームのラベルに日...
-
3人のじゃんけんのプログラム
-
【Excel VBA】条件に合った行の...
-
VBA 日付、未来の日付はエラー...
-
DateTimePickerを西暦表示にす...
-
VBAの質問になります 行の非表示
-
システム日付とは?
-
パソコンの日付変更したら、ヤ...
-
エクセルのVBAで日付を検索し転...
-
日付を操作したい
-
VBAで当月の1日を表示するには...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
ユーザーフォームのラベルに日...
-
VBAの質問になります 行の非表示
-
エクセルのVBAで日付を検索し転...
-
VisualBasic6.0のFormat関数で...
-
DataGridViewでyyyy/MM/dd
-
3人のじゃんけんのプログラム
-
システム日付とは?
-
コンボボックスに日付を表示する
-
今日より前の書き方 マクロ
-
【VBA】土日をスキップして日付...
-
エクセルVBAで機械の稼働時間を...
-
VBA 日付、未来の日付はエラー...
-
DataGridViewの和暦表示について
-
VBAで当月の1日を表示するには...
-
「eclipseで作るカレンダー(ス...
-
テキストボックスにカレンダー...
-
ExcelVBAでSQLサーバの日付時刻...
-
【Excel VBA】条件に合った行の...
-
VBAのapplication.ontime メソ...
おすすめ情報
御回答ありがとうございます。
ソートできます。
Sheet1のA2を開始日で問題ありません。
日付の歯抜けは、0にして頂けると助かります。
よろしくお願いいたします。
御回答ありがとうございます。
ソートできます。
Sheet1のA2を開始日で問題ありません。
日付の歯抜けは、0にして頂けると助かります。
よろしくお願いいたします。
tatsu99さん
実行すると、型が一致しません
と出ます。
どのようにすると、良いのでしょうか?
初心者なもので、わかりません。
よろしくお願いいたします。
ご回答ありがとうございます。
負荷は、全て数値が入っています。
日付も出ます。
型が一致しないは、全ての行で出ます。
勉強不足ですみません。
よろしくお願いいたします。