- ベストアンサー
エクセルで在庫情報と発送みたいなものを作りたい
- エクセルを使用して在庫情報と発送処理を一括管理する方法について教えてください。
- 在庫情報と発送処理をエクセルで管理する際に、商品のまとめシートを作り、関数を使用して商品を取り出すことができます。
- また、発送ボタンを作成し、押すと在庫が減り、商品情報がまとめシートに記録される仕組みを作ることもできます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2です! どうもごめんなさい。 確かにおっしゃる通り消えなくてはいけないデータが消えないようですね! おそらく、一気にDeleteしてしまったのがいけないようですので ↓のコードに変更してみてください。 尚、一気に行削除するのではなく一度データを消去し、 最後にSheet見出し左から2番目~4番目のSheetの空白行を削除するようにしていますので 実際はもっとSheet数があるかもしれませんので、実データに合わせてみてください。 Private Sub CommandButton1_Click() Dim i As Long, k As Long, str As String, c As Range On Error Resume Next For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row str = Cells(i, 2) With Worksheets(str) Set c = .Range("A:A").Find(what:=Cells(i, "C"), LookIn:=xlValues, lookat:=xlWhole) c.Resize(1, 3).ClearContents End With Next i For k = 2 To 4 '←Sheet見出し左から2番目~4番目(商品A~商品C)のSheet Worksheets(k).Range("A:C").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp Next k i = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(5, "A"), Cells(i, "B")).ClearContents End Sub 今度はお望み通りになれば良いのですが・・・m(_ _)m
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
まとめのシートのC5セルには次の式を入力してE5セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR(COLUMN(A1)>3,$B5=""),"",INDEX(INDIRECT($B5&"!A:C"),COUNTIF($B$5:$B5,$B5),COLUMN(A1))) その2についてはマクロを使うことになります。 まとめのシートにコマンドボタンを配置し、そのコマンドボタンを右クリックして「コードの表示」を選択します。 表示される画面では次のコードを入力します。 Private Sub CommandButton1_Click() Dim m, n, s As Integer Set WS1 = Worksheets("まとめ") Set WS2 = Worksheets("商品A") Set WS3 = Worksheets("商品B") Set WS4 = Worksheets("商品C") m = WorksheetFunction.CountIf(WS1.Range("B5:B50"), "商品A") n = WorksheetFunction.CountIf(WS1.Range("B5:B50"), "商品B") s = WorksheetFunction.CountIf(WS1.Range("B5:B50"), "商品C") WS2.Range(WS2.Cells(1, 1), WS2.Cells(m, 3)).Delete Shift:=xlShiftUp WS3.Range(WS3.Cells(1, 1), WS3.Cells(n, 3)).Delete Shift:=xlShiftUp WS4.Range(WS4.Cells(1, 1), WS4.Cells(s, 3)).Delete Shift:=xlShiftUp WS1.Range("C5").Select End Sub
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 まず「まとめ」SheetのA・B列は手入力(B列はリストでもOK)とします。 データは5行目以降に入力するとして、 C5セルに =IF($B5="","",INDEX(INDIRECT($B5&"!"&ADDRESS(1,COLUMN(A1),4)&":"&ADDRESS(100,COLUMN(A1),4)),COUNTIF($B$5:$B5,$B5))) という数式を入れオートフィルで列・行方向にコピーしてみてください。 これでB列に商品が入力されれば別Sheetのデータが1行目から表示されると思います。 次に2番目の質問に関してですが、 「まとめ」Sheetにコマンドボタンを配置 → コマンドボタン上でダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてみてください。 Private Sub CommandButton1_Click() Dim i As Long, k As Long, str As String, c As Range For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row str = Cells(i, 2) With Worksheets(str) Set c = .Range("A:A").Find(what:=Cells(i, "C"), LookIn:=xlValues, lookat:=xlWhole) k = c.Row .Rows(k).Delete shift:=xlUp End With Next i i = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(5, "A"), Cells(i, "B")).ClearContents End Sub ※ 「まとめ」SheetのA・B列のデータも消去するようにしています。 一旦コマンドボタンをクリックすると元に戻せませんので 今あるデータは一旦保存して試してみてください。 ※ 無理にコマンドボタンではなく、オートシェイプ(図形)を挿入 → 右クリック → マクロの登録 でも同様の感じで可能です。m(_ _)m
補足
すごい!すごすぎます!! こんな短時間でありがとうございます。 本当にありがとうございます! m(_ _)mm(_ _)mm(_ _)mm(_ _)mm(_ _)m さて、試してみました。 その1(まるで、問題なしです。すばらしい!) その2(ちょいと、問題あり?) こちらのマクロをしてみたんですが、 消されてる行がおかしく感じます。 何かちょっとしたことで、修正すれば、 いけそうな気がするのですが、どこをどうしたらいいでしょうか? 問題点はこちらにアップしてあります。 bsmile.sakura.ne.jp/phptest/bb1.jpg できればもう少しお付き合いいただけると嬉しいです! ただ、本当にどうもありがとうございました!
- ztb00540
- ベストアンサー率18% (119/647)
多分VBAでなければ無理でしょう。またはVBになります。
お礼
ありがとうございます! こちらもすごいですね。 感謝です!