- ベストアンサー
Excel VBAについて
- VBA初心者がExcel VBAについて困っています。フォームを使ってデータを打ち込むようにしようと思っていますが、修正時に新しい行に書かれてしまいます。具体的なコードを使って説明しています。
- Excel VBAでフォームを使ってデータの入力を行いたいですが、日付欄が未記入なら「新規」、記入済みなら「修正」という表示にしたいです。しかし、何がいけないのかわからず困っています。
- Excel VBAのプログラムでフォームを使ってデータを入力する際、日付欄が空欄の場合は「新規」、記入されている場合は「修正」と表示するようにしたいのですが、うまくいきません。具体的なコードを使って説明しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>ご指摘いただいた箇所を直してみましたがダメでした;; 「g_swOK」・「TOUROKU_EXIT」の意味が分かりませんので、ご質問に書かれた コード 以外の コード も全て呈示していただかなければ、どこが不具合なのかは分かりません。 1)私たち回答者が直ぐに動く コード を書く のではなくて、 2)catatc さんがお書きになった コード を手直しする というような スタンス で回答をしたかったので、前回答のような回答を書きました。 本当は、(2) のような スタンス の方が、catatc さんも勉強になろうかと存じますので、下記をお読みいただいて、なぜ不具合があるのかを catatc さんご自身で考え直してみてください。 そして、「指摘いただいた箇所を直」す前の、catatc さんが書かれた オリジナル の状態から、1つずつ、見直しをされることをお薦めいたします。 ---- 記 ------------------------------------------------------- (1) に近いことになってしまいますが、前回答の他に、 Private Sub CommandButton1_Click() UserForm1.Hide End Sub というような コード が書かれていれば、UserForm1 の CommandButton1 を クリック した タイミング で、データ の追加・訂正が完了するはずです。 ちなみに、私は UserForm1 の上に「hiduke」・「bunnrui」・「tantou」・「gaku」・「memo」という 5つ の TextBox と ComboBox1・CommandButton1 を配置して テスト しました。 ただ、ご質問にお書きの コード でしたら、C18 を Select したときに、不具合がありますので、前回答の上に、さらに、 If ((GYO = 17) Or (Cells(GYO, 3).Value = "")) Then GYO = 17 を If GYO = 17 Then にする必要があります。 さらに、C列 の未記入欄に入力した際に、空白行が入ることを忌避されるようでしたら、 If GYO = 17 Then GYO = 19 Do While Cells(GYO, 3).Value <> "" GYO = GYO + 1 Loop End If を If GYO = 17 Or Cells(GYO, 3).Value = "" Then GYO = Cells(Rows.Count, 3).End(xlUp).Offset(1).Row End If のように訂正する必要もあります。
その他の回答 (3)
- DOUGLAS_
- ベストアンサー率74% (397/534)
>日付の列を選択するとフォームが立ち上がり ということで、シート モジュール の イベント プロシージャ に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count = 1 And Target.Column = 3 And Target.Row > 16 Then Call KAKIKOMI(ActiveCell.Row) End If End Sub みたいな コード が書いてあるとして。。。 1)g_swOK = 0 の行と If g_swOK <> 1 Then GoTo TOUROKU_EXIT の行を削除(コメントアウト)する。 2)必ずしも A列 に データ が入っていない場合があるとすると、 Do While Cells(GYO, 1).Value <> "" の行を Do While Cells(GYO, 3).Value <> "" としてみる。 でどうにか動きました。
お礼
ご回答ありがとうございます! ご指摘いただいた箇所を直してみましたがダメでした;; 新規としてどんどんデータを追加していくことは出来るのですが、 修正がうまくいきません・・・ 修正行のデータは、その行に上書きしたいのですが最終行に追加されてしまいます;;
- kmetu
- ベストアンサー率41% (562/1346)
ANo1です ちなみに A列のデータの入っている最終行は Cells(Rows.Count, 1).End(xlUp).Row でも求められます。
お礼
この書き方に気付きませんでした・・・ 使わせていただきます。 ありがとうございます!
- kmetu
- ベストアンサー率41% (562/1346)
g_swOK = 0 .Show If g_swOK <> 1 Then GoTo TOUROKU_EXIT ここが良くわかりませんがそれ以外はちゃんと指定どおりに動いてますよ。
お礼
丁寧にご回答いただき本当にありがとうございます! もう一度自分でも勉強しなおし、ご回答を参考にさせていただいたところ 何とか無事解決しました^^ 自分の勉強不足でした・・・ 本当にありがとうございました!!