『userformの入力順番について』(エフワン)
初心者の質問で申し訳ありません。
userformの作成に苦戦しながら作っており、とりあえず入力
からデータ出力まではいけそうです。
ただ、各項目入力後エンターをクリックすると順番通りに行かず、
直したいと思ってます。
どこが間違っているのか、教えていただければ助かります。
また、userformで無駄な構文や適切な構文がありましたら、修文
いただければ助かります。
よろしくお願いします。
【概要】
comboboxは1〜6,8(途中で削除したのか、番号が飛んでます。)
textboxは1〜4
正しい順番:combobox1〜6 → text1〜3 → combobox8
→ text4
【userformの作成内容】
Private Sub ComboBox1_Change()
End Sub
Private Sub ComboBox2_Change()
End Sub
Private Sub ComboBox5_Change()
End Sub
Private Sub CommandButton1_Click()
Sheets("マクロ").Select
Range("b3").Select
ActiveCell.Value = ComboBox1.Value
Range("c3").Select
ActiveCell.Value = ComboBox2.Value
Range("d3").Select
ActiveCell.Value = ComboBox3.Value
Range("e3").Select
ActiveCell.Value = ComboBox4.Value
Range("f3").Select
ActiveCell.Value = ComboBox5.Value
Range("g3").Select
ActiveCell.Value = TextBox1.Value
Range("H3").Select
ActiveCell.Value = ComboBox8.Value
Range("I3").Select
ActiveCell.Value = TextBox2.Value
Range("j3").Select
ActiveCell.Value = TextBox3.Value
Range("K3").Select
ActiveCell.Value = TextBox4.Value
Sheets("マクロ").Select
ActiveSheet.Calculate
Range("b3:k3").Select
Selection.Copy
Range("a1").Select
Sheets("手持ち業務一覧").Select
Range("b6").CurrentRegion.End(xlDown).Select
Selection.Offset(rowoffset:=1, columnoffset:=0).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("手持ち業務一覧").Select
Range("B6:C1000").Select
Selection.NumberFormatLocal = "000"
Range("B6").Select
TextBox1.Value = Empty TextBox2.Value = Empty TextBox3.Value = Empty TextBox4.Value = Empty ComboBox1.Value = Empty ComboBox2.Value = Empty ComboBox3.Value = "" ComboBox4.Value = "" ComboBox5.Value = Empty ComboBox8.Value = Empty
Sheets("マクロ").Select
End Sub
Private Sub userform_activate()
Sheets("マクロ").Select
ComboBox1.RowSource = "b6:c500"
ComboBox1.ListRows = 20
ComboBox1.SetFocus
Sheets("マクロ").Select
ComboBox2.RowSource = "c6:c500"
ComboBox2.ListRows = 10
ComboBox2.SetFocus
Sheets("マクロ").Select
ComboBox3.RowSource = "d6:d500"
ComboBox3.ListRows = 30
ComboBox3.SetFocus
Sheets("マクロ").Select
ComboBox4.RowSource = "e6:e500"
ComboBox4.ListRows = 30
ComboBox4.SetFocus
Sheets("マクロ").Select
ComboBox5.RowSource = "f6:f20"
ComboBox5.ListRows = 10
ComboBox5.SetFocus
TextBox1.SetFocus
Sheets("マクロ").Select
ComboBox8.RowSource = "H6:H30"
ComboBox8.ListRows = 10
ComboBox8.SetFocus
ActiveWindow.SmallScroll Down:=-3
Range("I6:J1000").Select
Selection.NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"";@"
ActiveWindow.ScrollRow = 986
ActiveWindow.ScrollRow = 974
ActiveWindow.ScrollRow = 948
ActiveWindow.ScrollRow = 922
ActiveWindow.ScrollRow = 892
ActiveWindow.ScrollRow = 856
ActiveWindow.ScrollRow = 817
ActiveWindow.ScrollRow = 774
ActiveWindow.ScrollRow = 723
ActiveWindow.ScrollRow = 666
ActiveWindow.ScrollRow = 615
ActiveWindow.ScrollRow = 559
ActiveWindow.ScrollRow = 510
ActiveWindow.ScrollRow = 472
ActiveWindow.ScrollRow = 439
ActiveWindow.ScrollRow = 408
ActiveWindow.ScrollRow = 377
ActiveWindow.ScrollRow = 352
ActiveWindow.ScrollRow = 329
ActiveWindow.ScrollRow = 300
ActiveWindow.ScrollRow = 272
ActiveWindow.ScrollRow = 249
ActiveWindow.ScrollRow = 221
ActiveWindow.ScrollRow = 198
ActiveWindow.ScrollRow = 167
ActiveWindow.ScrollRow = 139
ActiveWindow.ScrollRow = 114
ActiveWindow.ScrollRow = 88
ActiveWindow.ScrollRow = 67
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 34
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 6
Range("B6").Select
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
ご存じでしたら併せてお教えいただければ助かります。
よろしくお願いいたします。
(エフワン) 2026/04/29(水) 14:01:46
コードの途中で改行しているから Selection.Offset(1).Select (はてな) 2026/04/29(水) 14:42:14
エラーメッセージはどういうものですか?正確に書いて下さい。 (xyz) 2026/04/29(水) 14:49:02
エンターを押すと順番通りのボックスにいかないのは構文がおかしいのでしょうか?
(エフワン) 2026/04/29(水) 14:57:17
改行していませんね、スマホで見ていたので改行しているように見えました すみません (はてな) 2026/04/29(水) 14:59:26
Selection.Offset(rowoffset:=1, columnoffset:=0).Select のSelection で選択しているセルの行はエラーが出る前はどこになっていますか (ちくわ) 2026/04/29(水) 15:16:35
(?) 2026/04/29(水) 15:32:09
正しい順番:combobox1〜6 → text1〜3 → combobox8
→ text4
※すいません、combobox6は存在しないので、間違っていました。修正(削除)しましたが、
入力順ではなぜかcombobox1〜5のあとにtext1にいかずにcombobox8にいってしまいます。
先程のエラーと2点、お分かりになりましたらお願いします。
(エフワン) 2026/04/29(水) 15:38:09
???回答になってないけどSelectionはどこを指してるの? 具体的に書くならSelectionがb100万いくつの 最大値を指定していてoffset(1,0)で下限超えているんじゃないの? って思っているんだけど (ちくわ) 2026/04/29(水) 15:50:04
(エフワン) 2026/04/29(水) 15:53:28
とりあえず、下記については
> エンターを押すと順番通りのボックスにいかないのは構文がおかしいのでしょうか?
テキストボックスに入力後エンターキー(またはタブキー)を押したしたときの 移動する順番が 希望と違うということなら、VBAのコードは関係ないです。
フォームのデザイン画面で、メニューの「表示」から「タブオーダー」を選択して 表示されるダイアログから移動順を入れ替えられます。 (hatena) 2026/04/29(水) 16:03:26
構文は間違ってないというか excelは 行と列が無限じゃないので VBA的に正しい言い方かわからないんですけど
Range("b6").CurrentRegion.End(xlDown).Select
→B6から下方向に非空か空の連続する値で無くなった一つ前のセルを選択する
Selection.Offset(rowoffset:=1, columnoffset:=0).Select →選択しているセルの一つ下を選択する
ということをしている操作だったと思いますが、 Selectionが下限行だった時その下に行はないので そんなものないよと1004エラーが出ます。
Selection.Offset(rowoffset:=0, columnoffset:=0).Select
とでも書き換えてSelectionの値を確認してB100万ぐらいのセルが指定されていたら ↑の理由でエラーが出てます。 (ちくわ) 2026/04/29(水) 16:12:58
(エフワン) 2026/04/29(水) 16:25:38
(?) 2026/04/29(水) 16:56:53
【該当箇所】
Private Sub CommandButton1_Click()
Sheets("マクロ").Select
Range("b3").Select
ActiveCell.Value = ComboBox1.Value
Range("c3").Select
ActiveCell.Value = ComboBox2.Value
Range("d3").Select
ActiveCell.Value = ComboBox3.Value
Range("e3").Select
ActiveCell.Value = ComboBox4.Value
Range("f3").Select
ActiveCell.Value = ComboBox5.Value
Range("g3").Select
ActiveCell.Value = TextBox1.Value
Range("H3").Select
ActiveCell.Value = ComboBox8.Value
Range("I3").Select
ActiveCell.Value = TextBox2.Value
Range("j3").Select
ActiveCell.Value = TextBox3.Value
Range("K3").Select
ActiveCell.Value = TextBox4.Value
Sheets("マクロ").Select
ActiveSheet.Calculate
Range("b3:k3").Select
Selection.Copy
Range("a1").Select
Sheets("手持ち業務一覧").Select
If Range("B6") = "" Then
Range("B6").Select
Else
(エフワン) 2026/04/29(水) 17:59:57
VBAよく知らんのでもっといい方法があると思いますが、 すでにIFを使っているんですから同様に分岐させたらいいんじゃないですかね。
1つ目のほう
レイアウトがわからないのでなんとも言えませんが
B6セルが開始セルってことは B5セルまでにはヘッダーとか入っているんですかね
そうしたらRange("b5").CurrentRegion.End(xlDown).Selectでいいんですけど
後で挿入するから何もないってレイアウトだと
If Not IsEmpty(Range("B6").Value) Then
Range("B6").CurrentRegion.End(xlDown).Select
Else
Range("B6").Select
End If
とか?
2つ目のほう
IF Sheets("マクロ").Range("F3") = ComboBox5.Value Then
Sheets("マクロ").Range("F3") = combobox5&text1
Else
Sheets("マクロ").Range("F3") = text1
End IF
とか ※変数名とかコピペしたけど多分あってないので 修正いるけど動作チェックまではしてません。
(ちくわ) 2026/04/29(水) 18:39:55
エラーメッセージは承知しました。
> Range("b6").CurrentRegion.End(xlDown).Select
> Selection.Offset(rowoffset:=1, columnoffset:=0).Select
の箇所ですが、
皆さんから指摘があるように、
ワークシートの最終行まで飛んでしまっていて、さらにその下を選択しようとしているので
それは無理でっせ、とExcel君が音を上げていると推測しています。
コードだけ示されても、そもそもあなたが何を意図しているかを説明してもらわないと 他人には理解できませんよ。それが順序というものです。 そもそも実行したいのはどういうことですか?日本語で説明できますか?
そのとき、下記の4つのセルには何が入っていますか?
A列 B列
6
7
さらに A列の8行目以下になにかが入力されていますか?
B列の8行目以下になにかが入力されていますか?
また、
Range("B6").End(xlDown).Select
ではなく、
Range("B6").CurrentRegion.End(xlDown).Select
としているのはどういう意図があるのですか?
お答えください。 (xyz) 2026/04/29(水) 19:18:47
A列にはなにか入っているんじゃないですか? 質問に答えてくれないので議論が進みません。
例えば、A6に何かが入っていると、
・Range("b6").CurrentRegionはA列も含み、
・ActiveCellはA6になり、
Range("B6").CurrentRegion.End(xlDown).Selectは、
ActiveCell.End(xlDown).Select と同じものになる仕様のようなので、
結局A1048576(最終セル)となりますよ?
その下の行を指定するのでアウトになります。
私は以上です。
(xyz) 2026/04/29(水) 19:55:23
B列のデータがある最終行の次の行に貼り付けるなら、
Sheets("マクロ").Calculate
Sheets("マクロ").Range("b3:k3").Copy
Sheets("手持ち業務一覧").Cells(Rows.Count, "B").End(xlUp).Offset(1) _
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
でしょう。
(xyz) 2026/04/29(水) 20:09:27
エラーになったとき、イミディエイトウインドウに下記をいれてEnterすると、
何が返るんですか
Debug.print Sheets("手持ち業務一覧").Range("B6").CurrentRegion.End(xlDown).Address
Debug.print Sheets("手持ち業務一覧").Range("B6").CurrentRegion.Address
(xyz) 2026/04/29(水) 20:52:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.