Excelマクロ!フォーム中級編(その5)(登録ボタン・シートへデータの追加)

Поделиться
HTML-код
  • Опубликовано: 5 ноя 2024
  • 登録ボタンをクリックしたときのプログラムを入力していきます!
    ループ分を使って必須項目の入力確認・日付項目が日付で入力されているかの確認を行います!
    ループ分を使い一気にコンボボックスの値をデータベースシートへ追加します!
    完成したエクセルファイルは簡単なフォームでよい場合は使いまわしできるので是非利用してください!

Комментарии • 33

  • @mamimami2035
    @mamimami2035 3 года назад

    とてもわかりやすい説明ありがとうございます。
    何度も拝見したのですが、初心者のためつまずいています。。厚かましいお願いですが、コードをコピーさせて頂けないでしょうか?
    よろしくお願いいたします。

  • @mamimami2035
    @mamimami2035 2 года назад +1

    度々すみません。もう一度一連の動画を見直して挑戦したところうまく動きました。
    コードをコピーして頂かなくて大丈夫そうです。他の動画も参考にさせて頂きます。
    ありがとうございました。

  • @山﨑裕之-s3n
    @山﨑裕之-s3n 2 года назад +1

    初めまして!
    コメント失礼します。
    いつも大変参考になります。
    今回は、Excelマクロ!フォーム中級編(その5)(登録ボタン・シートへデータの追加)の動画で質問したいのですが、
    【日付型で入力してください】のところまでうまく出来ましたが、その後上手く出来ず教えていただきたいのですが!
     1,動画のコードを入力後、foamに入力し登録ボタンを押しましたが、データベースに反映しません!
       「コンパイルエラー」変数が定義されていません)と表示されます。
       その際、rowlast=にエラーが表示されます。
       お忙しいところ恐れ入りますが、ご教示宜しくお願い致します。
     
    🏁

  • @mizukitanaka1824
    @mizukitanaka1824 4 года назад

    貴重な動画ありがとうございます。
    コードはコピペできる形で公開されませんでしょうか?

    • @akios8492
      @akios8492  4 года назад

      ご視聴ありがとうございます!
      ご希望があれば、コメント欄にコードを掲載することが可能です。
      フォームのラベルとコンボボックスさえ正しく配置していただければ使えるようになると思います。

    • @mizukitanaka1824
      @mizukitanaka1824 4 года назад

      早々の返信ありがとうございます。
      もう一度、動画を見返させて頂き、チャレンジしてみます。

    • @mizukitanaka1824
      @mizukitanaka1824 4 года назад

      その3動画に加え、本動画でも質問をさせて下さい。度々すみません。
      動画後半で、データベースシートに血液型の項目を追加した点について。
      項目追加はできたのですが、ユーザーフォーカス上にてtabキーで画面遷移すると、追加した血液型だけリスト項目が出ませんでした。
      マウスでクリックすれば出るのですが、その他と同じ動きに統一出来ればと考えております。
      私のコード入力ミスも含め、想定される原因をお伺いさせて下さい。

    • @akios8492
      @akios8492  4 года назад

      考えられる点としては、
      ・その4の動画の、コンボボックスにカーソルが移動したとき選択肢を自動で表示のプログラムを入力していない。
      ・エクセルのフォームの使用でコンボボックスが連続で配置されているときに、連続でタブキーを押すとコンボボックスの選択肢が、自動で表示されない不具合。
      です。
      すぐに思いつくのはこの2点になります。

    • @mizukitanaka1824
      @mizukitanaka1824 4 года назад

      動画その3に加え、ご丁寧な説明をして頂き、誠にありがとうございます。
      オブジェクトに対しプロパティ、メソッドの使い分けは、まだ理解しきれておりませんが、少しずつ慣れていければと思います。
      現在、教わったコードを活用して、送付状や見積書などのExcelシート上で今回のUserForm1を起動させ、今回のデータベースシートに加えて、各種Excelフォームシートの特定セルにも代入出来る様にしていきたいと考えています。未熟者故、手詰まり状態です。
      今回のフォームはとても汎用性があり、利用シーンが広がると思います。今後、Akio’sさんが可能であれば、更なるStep UP動画をご投稿頂けると嬉しいです。

  • @1nbm356
    @1nbm356 3 года назад

    非常にわかりやすい動画でした。ありがとうございました。
    一つ困っていることがあり、教えていただければ幸いです。
    最後の、UserFormを呼び出すボタン1ですが、
    「データベースシート」にボタン1を作成して呼び出すと、今までのFormで書いたコードが反映されず(赤色にならない、選択肢が自動ででてくる、日付の場合、IMEで英数にするなど)困っています。
    逆に、ボタン1を「項目設定」のシート上に張り付けて、ボタンを押すと、しっかり動きます。
    動画通りにコードを書いたつおりなのですが、迷宮入りしています・・・
    お手数ですが、ご助言をいただきたです。よろしくお願いいたします。

    • @akios8492
      @akios8492  3 года назад

      こんにちは。ご視聴ありがとうございます!
      おそらくコードを入力したときに「.Cells(~~~」の「.」を忘れてしまっているのではないかと思います(汗)
      .を忘れてしまうとボタンが設置されているシート(表示されているシート)のセルの値になってしまいます。
      その関係でデータベースシートと項目設定シートが混同してしまっているように思えます。

    • @1nbm356
      @1nbm356 3 года назад +1

      @@akios8492 ご回答ありがとうございます。ご指摘のとおり、一か所「.」が所抜けており、正常に動くようになりました!!誠に感謝申し上げます。引き続き、動画のupを楽しみにしております

  • @じゃりんこちゃん
    @じゃりんこちゃん 2 года назад

    プログラムをダウンロードできると助かります
    よろしくお願いいたします

  • @takef5463
    @takef5463 4 года назад

    動画を観ながらプログラムを入力しマクロを実行すると、[指定されたオブジェクトはみつかりません]という実行時エラーが表示されて
    If Me.Controls("Label" & i).Caption = .Cells(1, j).Value then
    の行でデバッグが発生します
    データベースsheetにフォームから入力したデータはきちんと送られています
    何故デバッグが要求されるのか、いくら見直しても分からりません
    お手数をおかけしますが、ご教示いただけないでしょうか?

    • @akios8492
      @akios8492  4 года назад

      ご視聴ありがとうございます!
      もし可能であれば入力したプログラムをすべてコメント欄に入力していただいてもよろしいでしょうか?
      前後のプログラムを確認してエラーが出てしまう原因を確認したいと思います。
      データがきちんと送られているということは、もしかしたらラベルの名前がLabel1~Label20に設定されていない可能性もあります。
      お手数ですがよろしくお願いいたします。

    • @takef5463
      @takef5463 4 года назад

      @@akios8492 ご返信ありがとうございます
      自分なりの項目に作り替えたりしていますので、その辺が上手く流れない理由かも知れません
      お言葉に甘えて、作成したプログラムの全文をこちらに記載してみようと思いますので、少々時間をいただけないでしょうか?
      日曜日くらいには再度返信出来るように頑張ってみます
      お手数をおかけしますが、よろしくお願いいたします

    • @takef5463
      @takef5463 4 года назад

      @@akios8492
      お世話になります。
      パソコンからログインしてコピペしたら簡単に貼り付けることができました。
      動画では項目数を20とされていましたが、当方10項目としデータを入力する項目を2から10までの9つに変更しています。
      また、最初にコメントさせていただいたときには3行目のFor i = 1 to 10から18行目のNextまでは入力していない状況でしたが、前述のエラーが出るためこの3から18行も追加したほうが良いのかと思い、追加入力して実行してみたのですが…今度は 4行目の If Me.Controls("Label" & i).ForeColor = vbRed Thenでデバックが発生するようになりました。ただ、3行目から18行目の内容もフォームで入力する際には、”氏名を入力してください”等のコメントはきちんと表示されています。
      実際に入力したプログラムを以下に転記しますので、目を通していただけたら幸いです。
      よろしくお願いいたします。
      Private Sub CommandButton1_Click()
      Dim i, j, rowLast As Long
      For i = 1 To 10
      If Me.Controls("Label" & i).ForeColor = vbRed Then
      If Me.Controls("ComboBox" & i).Value = "" Then
      MsgBox Me.Controls("Label" & i).Caption & "を入力してください"
      Me.Controls("ComboBox" & i).SetFocus
      Exit Sub
      End If
      End If
      If Me.Controls("Label" & i).ForeColor = vbBlue Then
      If IsDate(Me.Controls("ComboBox" & i).Value) = False Then
      MsgBox Me.Controls("Label" & i).Caption & "日付型で入力してください"
      Me.Controls("ComboBox" & i).SetFocus
      Exit Sub
      End If
      End If
      Next
      With Worksheets("患者データベース")
      rowLast = .Cells(Rows.Count, 1).End(xlUp).Row
      .Cells(rowLast + 1, 1).Value = "=row() - 1"
      .Cells(rowLast + 1, 2).Value = Application.WorksheetFunction.Max(.Columns(2)) + 1
      For i = 1 To 10
      For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column
      If Me.Controls("Label" & i).Caption = .Cells(1, j).Value Then
      .Cells(rowLast + 1, j).Value = Me.Controls("ComboBox" & i).Value
      End If
      Next
      Next
      End With
      For i = 1 To 10
      Me.Controls("ComboBox" & i).Value = ""
      Next
      Me.ComboBox1.SetFocus
      End Sub
      Private Sub UserForm_Initialize()
      Dim a As Long
      For a = 2 To 10
      If Worksheets("患者データベース").Cells(1, a).Value "" Then
      Me.Controls("label" & a - 1).Caption = Worksheets("患者データベース").Cells(1, a).Value
      End If
      Next
      With Worksheets("項目設定")
      Dim b, c, rowLast, i As Long
      For b = 1 To 9
      For c = 2 To .Cells(4, Columns.Count).End(xlToLeft).Column
      If Me.Controls("Label" & b).Caption = .Cells(4, c).Value Then
      If .Cells(1, c).Value = "○" Then
      Me.Controls("Label" & b).ForeColor = vbRed
      End If
      If .Cells(2, c).Value = "○" Then
      Me.Controls("Label" & b).ForeColor = vbBlue
      End If
      If .Cells(3, c).Value = 1 Then
      Me.Controls("combobox" & b).IMEMode = 1
      End If
      If .Cells(3, c).Value = 3 Then
      Me.Controls("combobox" & b).IMEMode = 3
      End If
      rowLast = .Cells(Rows.Count, c).End(xlUp).Row
      For i = 5 To rowLast
      Me.Controls("combobox" & b).AddItem .Cells(i, c).Value
      Next
      End If
      Next
      Next
      End With
      End Sub

    • @akios8492
      @akios8492  4 года назад

      1つ確認したいことがあります。
      動画ではID列があると思うのですが、take f 様はお使いでしょうか?
      それにより少し気になるところが変わってきます。
      ご返信お待ちしております。

    • @takef5463
      @takef5463 4 года назад

      @@akios8492
      ご連絡ありがとうございます。
      1列目は動画の通り”No.”列、2列目は”患者ID”列、3列目は”氏名”列としています。
      2列目以降を入力項目として設定しています。
      ”患者ID”は受け付け順に割り振られる値のため、フォームから入力できる項目としました。
      ご質問の答えになっていますでしょうか?
      不足がありましたら再度ご連絡ください。
      よろしくお願いいたします。