![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
マクロ(VBA)例です。
仮にデータをSheet1、集計表をSheet2に作成しています。
Sheet1シートタブ上で右クリック→コードの表示→サンプルコード貼り付け→Sheet1上でAlt+F8キー押下→sample実行
概略は、製品&ロットをキーにデータ(製品~出庫)を集計DBに入出庫数を計数して登録、集計表を出力しています。
Sub sample()
Dim DB, wk(3), wk1, rslt, wkey As String, i As Long, j As Long, k As Long
Set DB = CreateObject("Scripting.Dictionary")
'** データ配列作成
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For j = 0 To 3
If Cells(i, j + 1) <> "" Then
wk(j) = Cells(i, j + 1)
Else
wk(j) = 0
End If
Next
wkey = wk(0) & "," & wk(1)
If Not DB.Exists(wkey) Then
'** 新規データ登録
DB.Add wkey, Join(wk, ",")
Else
'** 登録済み入出庫計数
wk1 = Split(DB(wkey), ",")
wk1(2) = wk1(2) + wk(2)
wk1(3) = wk1(3) + wk(3)
DB(wkey) = Join(wk1, ",")
End If
Next
'** 集計表出力
With Sheets("sheet2")
.Cells.Clear
.Cells(1, "A").Resize(1, 5).Value = Cells(1, "A").Resize(1, 5).Value
wk1 = DB.keys
k = 1
For i = LBound(wk1) To UBound(wk1)
rslt = Split(DB(wk1(i)), ",")
k = k + 1
For j = 1 To 4
If rslt(j - 1) <> "0" Then
.Cells(k, j) = rslt(j - 1)
End If
Next
.Cells(k, "E") = .Cells(k, "c") - .Cells(k, "D")
Next
End With
End Sub
No.1
- 回答日時:
まずデータを製品&ロット順にして、その中をまとめ、最後に在庫計算でよいかと。
基本のループとIf文、最低限のセル参照ができればよいので、入門にはちょうどいい内容だと思いますよ。
1. データをソート@記録
まず、データ範囲を選択。「製品」にカーソル合わせて「Shift+Ctrl+↓→」。キー操作なら、データ行数に関係なく動いてくれます。
んで、ソートは製品>ロット順
2. 1行にまとめる@要プログラミング
製品とロットが上と同じなら、上に合計して、その行は削除。
を上から順に繰り返す。
「製品」がA1だとしたら・・・
'最初のセル(上と比較するので2番目)を選択
Range("A3").Select
'選択したセルが空じゃ無ければループ
Do While Selection <> ""
'製品が同じか?
'※Offset(縦,横)にズレた位置の値と比較
If Selection = Selection.Offset(-1,0) Then
'ロットが同じか?
If Selection.Offset(0,1) = Selection.Offset(-1,1) Then
'todo: 入庫を合計する
'todo: 出庫を合計する
'todo: 選択セルの行を削除
End If
End If
'次のセルを選択
Selection.Offset(1,0).Select
Loop
3. 最後にもう一度上からループで在庫計算。
・・・というかんじで。
細かい部分は書くのを控えました。
選択中のセル(Selection)と、そこから上下左右に移動したセル(Offset)を操作するだけで、けっこう色んなことが出来ます。
そこから徐々にできることを増やせばOK。がんばってみてください。
あと、ブレイクポイント・ステップ実行・ローカルウィンドウなど、VBEには便利な機能がいっぱい。使えるようになると、VBAがかなり簡単になりますよ。
この回答へのお礼
お礼日時:2012/07/13 21:32
selection,offset色々使えそうですね。
有難うございます。
又、色々な便利機能も多そうなので、
少しずつ頑張っていこうと思います。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 前の(左隣の)シートを連続参照するように、あとから変更したい 1 2023/02/22 00:51
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- 運輸業・郵便業 ●(令和なのですが…) 今時、 (倉庫会社の在庫の)倉庫管理システムが、 “紙”(商品依頼書•注文書 2 2022/08/07 18:09
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- 求人情報・採用情報 派遣について これはあくまで仮定の話しにもなりますが 現在自動車部品メーカーの下請けの倉庫内のある場 4 2023/02/19 08:13
- その他(ビジネススキル・経営ノウハウ) 在庫管理のこの問題が分かりません。どなたか解説お願いします 2 2022/04/18 18:35
- 数学 在庫管理のこの問題が分かりません。どなたか解説お願いします 4 2022/04/18 22:19
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelで、スクロールをすると限...
-
EXCEL アルファベットと数字の...
-
エクセルの画面で十字マークが...
-
複数のセルの入力内容を一度に...
-
エクセルで連続データから、数...
-
エクセル 画面上の行数を調節...
-
セルをクリックすると付箋のよ...
-
エクセルでハイパーリンクのU...
-
Shift押しながら、矢印ボタンで...
-
Excelで表のデータを並び替えた...
-
エクセル 数値を全て「1」にす...
-
excelで1行ごとに一気に削除す...
-
Excel選択を繰り返すとセルの色...
-
エクセルVBAでセル範囲のデータ...
-
列選択で勝手に広範囲に範囲選...
-
ピポットテーブルエラー解決方法
-
エクセルで0を除いて昇順に並...
-
エクセルVBAリストボックスに表...
-
Excelで急に動かなくなる
-
VBAでの在庫管理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelで、スクロールをすると限...
-
エクセルの画面で十字マークが...
-
エクセルで連続データから、数...
-
EXCEL アルファベットと数字の...
-
セルをクリックすると付箋のよ...
-
excelで1行ごとに一気に削除す...
-
エクセルでハイパーリンクのU...
-
エクセル 数値を全て「1」にす...
-
エクセル 画面上の行数を調節...
-
Excel選択を繰り返すとセルの色...
-
ピポットテーブルエラー解決方法
-
Shift押しながら、矢印ボタンで...
-
複数のセルの入力内容を一度に...
-
Excelで表のデータを並び替えた...
-
エクセルで0を除いて昇順に並...
-
エクセルVBAでセル範囲のデータ...
-
Excelで急に動かなくなる
-
エクセルでカーソルが四方に矢...
-
エクセルで「1~15」の乱数...
-
連続データの作成(E)が選択出来...
おすすめ情報