[[20260429134545]] 『userformの入力順番について』(エフワン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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 >


申し訳ありません。追記です。
入力するとデバックエラーが出てますが、どう修正いいのかイマイチわからない状態です。
【エラー箇所】
Selection.Offset(rowoffset:=1, columnoffset:=0).Select

ご存じでしたら併せてお教えいただければ助かります。
よろしくお願いいたします。
(エフワン) 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:53:05

xyz様
エラーですが、
「実行時エラー 1004 
アプリケーション定義またはオブジェクト定義エラーです。」とでて、
デバックを押すとSelection.Offset(rowoffset:=1, columnoffset:=0).Selectが黄色に着色します。
お手数をおかけしますが、ご教示いただければ助かります。

エンターを押すと順番通りのボックスにいかないのは構文がおかしいのでしょうか?

(エフワン) 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

>ただ、各項目入力後エンターをクリックすると順番通りに行かず、
>直したいと思ってます。
>どこが間違っているのか、教えていただければ助かります。
「正しい順番:」になっていませんよね。
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

(?) 2026/04/29(水) 15:32:09


ちくわ様
エラーは上記に記載の箇所です。黄色着色個所と書いているところです。
(エフワン) 2026/04/29(水) 15:35:16

?様、順番はあっていると思います。

正しい順番: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

hatena様、ありがとうございます!
一つ目解決しました。助かります。
(エフワン) 2026/04/29(水) 16:21:07

ちくわ様
ありがとうございます。
おっしゃるとおり、userformで入力したデータを別シートにデータが入っている一番下の列の
一つ下にという主旨ですが・・・何が間違っているのかがわからず困っています。
一番最初に入力するからデータがなくてエラーという意味でしょうか?

(エフワン) 2026/04/29(水) 16:25:38


ダミーで6行目に手入力した後にuserformから入力するとエラーが出ずに
うまくいきました。これはエクセルの仕様なのでしょうか?
(エフワン) 2026/04/29(水) 16:29:11

>これはエクセルの仕様なのでしょうか?
エクセルの仕様ではありません。
VBAであなたが書いているコードの仕様です。
(ちくわ) 2026/04/29(水) 16:12:58さんが
「Range("b6").CurrentRegion.End(xlDown).Select
B6から下方向に非空か空の連続する値で無くなった一つ前のセルを選択する 」
と説明されています。

(?) 2026/04/29(水) 16:56:53


ちくわ様ありがとうございます。
そうすると1回目は必ず手入力しないとこの構文は成り立たないということでしょうか。
(エフワン) 2026/04/29(水) 17:14:02

あと1点申し訳ありませんが、ご教示いただければ助かります。
下記userformで
 combobox5に入力がある場合は、combobox5+text1の内容(そのまま文字をつなぐ)
 をマクロシートのF3に、combobox5に入力がない場合はtext1の内容をマクロシート
 F3という分岐はuserform上できるでしょうか。
お手数をおかけしますが、よろしくお願いします。

【該当箇所】

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

ちくわ様、ありがとうございます。
そうです、5行目は項目名が入っていまして、試しにB5にかえてやってみましたが
やはりエラーが出ていました。
分岐の構文案ありがとうございます。
試させていただきます。
(エフワン) 2026/04/29(水) 19:28:57

xyz様、ありがとうございます。
初心者でよくわかっていないまま作っているので構文自体が間違っているかもしれないです。
意図としては、各列6行目以降にuserformで入力したデータがコマンドボタンにより
転写され、その次はその1行下に転写というイメージです。
(エフワン) 2026/04/29(水) 19:31:08

 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

xyz様、A列には何もデータは入っていないです。
転写されるB列〜は5行目が項目(文字がある)で、6行目以降にデータが転写されます。
(エフワン) 2026/04/29(水) 20:34:22

 エラーになったとき、イミディエイトウインドウに下記をいれて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.