- ベストアンサー
エクセル マクロ 教えてください。
sheet1に (a1=No. b1=月日 C1=項目 d1=収入 e1=支出 f1=摘要 G1=店名)項目を作りそれらをユーザーフォームを作り入力したいです。 この記述では上手く動けません。教えてください。 Private Sub CommandButton1_Click() Dim r As Long, 最終行 As Long, 項目行 As Long Dim re As String r = textboxs1.Value + 10 最終行 = Worksheets("入力").Range("B65536").End(xlUp).Row If r <= 最終行 Then re = MsgBox("訂正" & " " & "すでにデータが入力されています。" & Chr(13) & _ Chr(13) & "データを置き換えます。 本当に良いですか? ", _ Buttons:=vbYesNo + vbExclamation, Title:="注意!!") If re = vbYes Then With Worksheets("入力") .Cells(r, 2).Activate .Cells(r, 1).Value = TBox1.Value .Cells(r, 2).Value = TBox2.Value .Cells(r, 3).Value = ComboBox1.Value .Cells(r, 4).Value = TBox3.Value .Cells(r, 5).Value = TBox4.Value .Cells(r, 6).Value = TBox5.Value .Cells(r, 7).Value = ComboBox2.Value End With データクリア Exit Sub End If データクリア Exit Sub End If If r >= 最終行 + 1 Then r = 最終行 + 1 End If With Worksheets("入力") .Cells(r, 1).Value = TBox1.Value .Cells(r, 2).Value = TBox2.Value .Cells(r, 3).Value = ComboBox1.Value .Cells(r, 4).Value = TBox3.Value .Cells(r, 5).Value = TBox4.Value .Cells(r, 6).Value = TBox5.Value .Cells(r, 7).Value = CBomboox2.Value End With データクリア End Sub r = データNo + 10 With Worksheets("入力") .Activate .Cells(r, 2).Select TBox1.Value = .Cells(r, 1).Value TBox2.Value = .Cells(r, 2).Value ComboBox1.Value = .Cells(r, 3).Value TBox3.Value = Format(.Cells(r, 4).Value, "###,###") TBox4.Value = Format(.Cells(r, 5).Value, "###,###") TBox5.Value = .Cells(r, 6).Value ComboBox2.Value = .Cells(r, 7).Value End With Exit Sub End If If データNo > 最終行 - 10 Then データNo = 最終行 - 9 TBoxNo.Value = データNo データクリア End If End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)Else文を使ったら。少し判りやすくなると思うよ。 (2)「データクリア」ルーチンは掲載省略していますね。何をやっているの。 re = vbYes でも、そうでなくても、)「データクリア」を通るようだが、それでよいの。データをテキストやコンボからセットしても )「データクリア」が必要なの。 re = vbYesでない場合 コードの2回目の)「データクリア」の前にELSEが必要ではないの。 (3) If r <= 最終行 Then If r >= 最終行 + 1 Then とあるが、校舎はELSEでよいのでは。 =が両方に付くのはおかしくない。多分下の方は r > 最終行 + 1 Then (4) End If With Worksheets("入力") .Cells(r, 1).Value = TBox1.Value .Cells(r, 2).Value = TBox2.Value .Cells(r, 3).Value = ComboBox1.Value .Cells(r, 4).Value = TBox3.Value .Cells(r, 5).Value = TBox4.Value .Cells(r, 6).Value = TBox5.Value .Cells(r, 7).Value = CBomboox2.Value End With のEnd IfはEnd Withの後に入れるべきでは。 データをセット処理して後でEnd Ifでしょう。 むしろ データクリア End If End Sub と「データクリア」をしてから、終わりかな。 (5)r = データNo + 10 の前のEndSubはOK? この辺から判らなくなった。 EndSubはExitSubの間違い? (6)r = データNo + 10 以下は入力全レコードについてやるべきなの? 何をやっているの。 ’---- (全般) (1)字下げを行い処理のブロックを判りやすくすること。 (2)質問するときだけでも、以下の処理について、コメントを 入れてください。 (3)むしろ処理のブロックをサブルーチンにして、処理の名前が1行になるから、ある場合に処理必要(通るべきルーチンかどうか)を 一覧できるようにしては。 これでは自己コードによる中毒的に頭が混乱するように思った。 ついでに Cells(r, 2).Activate は不要では。
その他の回答 (1)
- shinkami
- ベストアンサー率43% (179/411)
命令文中央付近の[End Sub」後は省略しているのですか 「データクリア」はサブルーチンですよね、ここでは省略してますよね 下から7行目の「End If」に対応する「If」文がありません
お礼
ありがとうございます。もう一つ教えてください。自分は全くの素人で家計簿を作ろうと悪戦苦闘しています。http://www.eurus.dti.ne.jp/~yoneyama/Excel/jituyou/kakeibo.htm このページを見ながら作成しています。いまだに何処が間違っているか分かりませんので教えてください。