• ベストアンサー

Excel 集計フォーム

ユーザーフォームを使用して、部署1と部署2にチェックが入っていて数量欄に数字が入っている場合、赤枠のところに入力されていく仕組みを作りたいのですが、コードの書き方などお教えいただけないでしょうか。 色々調べているのですが検索の仕方が悪いのか解決できず…。 お手数をおかけ致しますが、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1729/2599)
回答No.1

TextBoxが上から1,2,3でCheckBoxはCheckBox1として書き込みボタンがCommandButton1とした場合です。 D列は注文品ごとの累計だと考えています。 部署1だけのコードですので、部署2は同じような感じで追加してください。 Private Sub CommandButton1_Click() Dim LastRow As Long If Me.CheckBox1 = True Then LastRow = Cells(Rows.Count, "A").End(xlUp).Row Cells(LastRow + 1, "A").Value = Me.TextBox1.Value Cells(LastRow + 1, "B").Value = Me.TextBox2.Value Cells(LastRow + 1, "C").Value = Me.TextBox3.Value Cells(LastRow + 1, "D").Value = WorksheetFunction.SumIf(Range(Cells(3, "B"), Cells(LastRow + 1, "B")), Cells(LastRow + 1, "B"), Range(Cells(3, "C"), Cells(LastRow + 1, "C"))) End If End Sub

Post-P
質問者

お礼

やりたいこと等がまとまっていない質問でしたのに ピンポイントなご回答をしていただきありがとうございました。 無事組み込むことができ仕事がとても捗ります。 本当にありがとうございました

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問の表題には,VBAの質問であることを明記せよ。読者層が変わると思う。 ーー そして、少数のデータ例と画像しか挙げてない。何をしたいのか良く判らない。 質問文には書くとしたら、やりたいことを1歩ずつ、短い文章にして箇条書きに書け。 読者に負担をかけないのが礼儀だ。 例  ・Userorm2のユーザーフォームを使っているから,部署2の方を扱う(ーー>よく見ると、そう     ではなく、部署1も、部署2のデータも1回で入力するらしい。ーー>異例だろう?) UserForm1はどうなった? ・入力したのがUserorm2で、「書き込み」ボタンをclickすると、   日付列に日付1/26をセットする(部署1か、部署2か、どっち両方?)   部署1と部署2のチェックボックスで、左右されるのか?   注文品列に砂糖をセット(部署1か部署2か両方か?チェックボックスで左右される?)   フォームの数量欄が2つに分かれているが、チェックボタンのONに従って、数量1と数量   2をセットするのか? 私だったらやらない複雑な仕様だと思う。判り難い仕様だ。 ーー  以上でやりたいことを理解すれば、(本人には判っているから)コードの書き方は別に難しいところはないでしょう。IF文で判別するぐらいだろう。 ・書き込みコマンドボタンのクリックイベントで、下記を行う。 ・部署1と部署2のチェックボックスのONを捉えておいて,入力する列でセットするかどうかを左右する ・部署1と部署2の現時点での、データ最終行は、End(xlUp).Rowで採れる。 何処が判らないのか?小生が問題の意図を取り違えている? .

Post-P
質問者

お礼

やりたいこと等がまとまっていない質問でしたのに ご回答とご指摘をしていただきありがとうございました。

  • kkkkkm
  • ベストアンサー率66% (1729/2599)
回答No.2

No.1の追加です。 D列を計算式のままにしたい場合は Cells(LastRow + 1, "D").Formula = "=SUMIF($B$3:B" & LastRow + 1 & ",B" & LastRow + 1 & ",$C$3:C" & LastRow + 1 & ")" なお、テキストボックスの未入力チェックは省略していますので、追加してください。 日付のテキストボックスでしたらたとえば If Me.TextBox1 = "" Or IsDate(Me.TextBox1) <> True Then MsgBox "日付が未入力、もしくは日付ではありません", vbInformation Me.TextBox1.SetFocus End If

関連するQ&A