Excelについてです。 sheet1にa~cパターンで午前、お昼、午後シフトが○×で表示されています。
Excelについてです。 sheet1にa~cパターンで午前、お昼、午後シフトが○×で表示されています。 sheet2に1日~5日までのaパターン、bパターン、cパターンで来れる人数を記載しています。 sheet1の黄色のセルに例えば1日の午前は何人いるかを自動計算するようにしたいです。 1日はaが1人、bが1人、cが2人なので 午前はaの1人+cの2人で合計3人なのでセル(2,G)には3が入る、 1日のお昼は bの1人+cの2人で合計3人なのでセル(3,G)には3が入る。 同様に2日はaが3人、bが0人、cが1人なので 午後はaの3人+bは0人なので0+cの1名で合計4名 みたいなことを自動で実行してくれるコードをvbaで作成したいです、。 途中までやってみたのですがこんがらがってしまい・・・ 分かる方教えてください。 よろしくお願いいたします。
Excel | Visual Basic・133閲覧・100
ベストアンサー
勤務種類は a,b,c の3種類だけで、日付はSheet1とSheet2は同じように並んでいる前提です。 Sub test() Dim sh1 As Worksheet, sh2 As Worksheet Dim tbl(2, 2) As Variant Dim i As Integer, j As Integer Dim r As Integer, c As Integer Application.ScreenUpdating = False Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") With sh1 For i = 2 To 4 For j = 2 To 4 If .Cells(i, j).Value = "○" Then tbl(j - 2, i - 2) = 1 End If Next j Next i If .Range("G2").Value <> "" Then .Range(.Cells(2, 7), .Cells(4, Cells(1, Columns.Count).End(xlToLeft).Column)).ClearContents End If End With With sh2 For c = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column For r = 2 To 4 For j = 0 To 2 sh1.Cells(j + 2, c + 5).Value = sh1.Cells(j + 2, c + 5).Value _ + tbl(j, r - 2) * .Cells(r, c).Value Next j Next r Next c End With Application.ScreenUpdating = True End Sub 余談ですが、前の質問で6個の場合について、 場所もランダムにするコードを暇な時作成してみました。 場所の組み合わせについては多分これで全部(詳しいチェックはしていません)ではないかと思います。 売上の予測だけが目的ならこの程度で使えるのでは。 良かったら参考にして下さい。 コードは下記です。 https://writening.net/page?ZGn3HE
1人がナイス!しています
ありがとうございます!!しかも前回のものもおつくりいただき大変うれしいです・・(;;) 1点、勉強の為にお伺いさせていただきたいのですが、今回のコードの12~13行目の If .Cells(i, j).Value = "○" Then tbl(j - 2, i - 2) = 1 ですが、i=2かつj=2のときはtbl(0,0)=1となりますが、 (0,0)どのセルを示すのでしょうか・・。 基本的な質問で申し訳ありません。 よろしくお願いいたします。
質問者からのお礼コメント
前回に引き続き本当にありがとうございました!
お礼日時:5/26 22:50