VBA初心者です。以下のコードに不具合があって、結果が変です。
どうしても直らないので、どなたかお助けいただけませんか。
目的:顧客リストを作るユーザーフォームを作成している。
textbox1に顧客番号を入力すると、その顧客に関して
すでに入力した情報がユーザーフォームとシート上の検索結果を表示する行B-S2行に
表示されるようにする。
現状:最初はテキストボックスだけを使用していて、うまくいっていた。
途中でコンボボックスを4か所追加したところ、ユーザーフォームと
シート上の検索結果を表示する行に、結果がずれて表示されてしまうようになった。
例えば、I2は空欄、本来I2に表示されてほしいCombobox2の値はJ2に表示されている。
以下の列はどんどんずれて行っている。
変数の場所の指定の仕方が違うのでしょうが、いろいろいじっても直りません。
Private Sub CommandButton2_Click()
Range("B2").Value = TextBox1.Value
Dim mycell As Range
Set mycell = Range("B4:B70").Find(What:=Range("B2").Value, LookAt:=xlWhole)
If Not mycell Is Nothing Then
mycell.Select
With UserForm1
For i = 2 To 14
UserForm1.Controls("TextBox" & i).Value = mycell.Offset(, i - 1).Value
Next i
End With
Range("C2").Value = TextBox2.Value
Range("D2").Value = TextBox3.Value
Range("E2").Value = TextBox4.Value
Range("F2").Value = TextBox5.Value
Range("G2").Value = TextBox6.Value
Range("H2").Value = TextBox7.Value
Range("I2").Value = ComboBox2.Value
Range("J2").Value = TextBox8.Value
Range("K2").Value = ComboBox3.Value
Range("L2").Value = TextBox9.Value
Range("M2").Value = ComboBox4.Value
Range("N2").Value = TextBox10.Value
Range("O2").Value = ComboBox5.Value
Range("P2").Value = TextBox11.Value
Range("Q2").Value = TextBox12.Value
Range("R2").Value = TextBox13.Value
Range("S2").Value = TextBox14.Value
Else
MsgBox "未登録番号です"
Exit Sub
End If
End Sub
No.7
- 回答日時:
#6 です
ボケボケで申し訳ないです。
(見直してよかった、、投稿前に見直せよ!)
With UserForm1は無視していました 削除して良いと思います。
If i = 7 And 9 And 11 And 13 Then・・なんじゃこれ、、!!
下記の様に訂正します。
If i = 7 Or i = 9 Or i = 11 Or i = 13 Then
If i = 9 And 11 And 13 And 15 And 17 Then については
上記訂正を参考に自身で直してください
酔いが限界と判断して寝ます。。すみません。
No.6
- 回答日時:
こんばんは
テキストボックス、コンボボックスの出力先と抽出先が一致していませんね
名前添え字がそのままとして、分けて考えた方がわかり易いのではないでしょうか
Private Sub CommandButton2_Click()の前に一度出力していると言う事で良いでしょうか、、、
テストしていませんが、こんな感じでどうでしょう
Dim n As Integer, j As Integer
n = 2 'ComboBox添え字
j = 2 'TextBox添え字
If Not mycell Is Nothing Then
mycell.Select
With UserForm1
For i = 1 To 17
If i = 7 And 9 And 11 And 13 Then
UserForm1.Controls("ComboBox" & n).Value = mycell.Offset(, i).Value
n = n + 1
Else
UserForm1.Controls("TextBox" & j).Value = mycell.Offset(, i).Value
j = j + 1
End If
Next i
End With
n = 2 'ComboBox添え字
j = 2 'TextBox添え字
For i = 3 To 19 'セルの列番号
If i = 9 And 11 And 13 And 15 And 17 Then 'ComboBoxからの列番号
Cells(2, i).Value = UserForm1.Controls("ComboBox" & n).Value
n = n + 1
Else 'Not ComboBox
Cells(2, i).Value = UserForm1.Controls("TextBox" & j).Value
j = j + 1
End If
Next
Else
テストしていないので書き替え部分だけですが、、
Offset場所間違っていたら、ごめんなさいです。。
No.4ベストアンサー
- 回答日時:
With UserForm1
For i = 2 To 14
UserForm1.Controls("TextBox" & i).Value = mycell.Offset(, i - 1).Value
Next i
End With
Range("C2").Value = TextBox2.Value
Range("D2").Value = TextBox3.Value
Range("E2").Value = TextBox4.Value
Range("F2").Value = TextBox5.Value
Range("G2").Value = TextBox6.Value
Range("H2").Value = TextBox7.Value
Range("I2").Value = ComboBox2.Value
Range("J2").Value = TextBox8.Value
Range("K2").Value = ComboBox3.Value
Range("L2").Value = TextBox9.Value
Range("M2").Value = ComboBox4.Value
Range("N2").Value = TextBox10.Value
Range("O2").Value = ComboBox5.Value
Range("P2").Value = TextBox11.Value
Range("Q2").Value = TextBox12.Value
Range("R2").Value = TextBox13.Value
Range("S2").Value = TextBox14.Value
Else
-----------これを--------
For i = 2 To 14
Range("B2").Offset(, i - 1).Value = mycell.Offset(, i - 1).Value
Next i
TextBox2.Value = Range("C2").Value
TextBox3.Value = Range("D2").Value
TextBox4.Value = Range("E2").Value
TextBox5.Value = Range("F2").Value
TextBox6.Value = Range("G2").Value
TextBox7.Value = Range("H2").Value
ComboBox2.Value = Range("I2").Value
TextBox8.Value = Range("J2").Value
ComboBox3.Value = Range("K2").Value
TextBox9.Value = Range("L2").Value
ComboBox4.Value = Range("M2").Value
TextBox10.Value = Range("N2").Value
ComboBox5.Value = Range("O2").Value
TextBox11.Value = Range("P2").Value
TextBox12.Value = Range("Q2").Value
TextBox13.Value = Range("R2").Value
TextBox14.Value = Range("S2").Value
Else
とか?
No.2
- 回答日時:
For i = 2 To 14
UserForm1.Controls(\"TextBox\" & i).Value = mycell.Offset(, i - 1).Value
Next i
上記って見つかった場合にその行の値を『テキストボックス』だけに入れるようになってますよね?
これって目的に合ってますか?
スマホなので検証は出来ませんが気になったので。
回答ありがとうございます。
おっしゃるとおりで、そこが対応できていません。
しかし素人考えで
For i = 2 To 18 (もともとはテキストボックス分の14)
UserForm1.Controls("TextBox", "ComboBox" & i).Value = mycell.Offset(, i - 1).Value
Next i
End With
(テキストボックスの横にコンボボックスを足した)にするとコンパイルエラーが出ます。本当に基本的な書き方なのでしょうが、分かりません。
No.1
- 回答日時:
> 途中でコンボボックスを4か所追加したところ、
コントロールの追加、削除を行うと、
TextBox3だったものがTextBox4に名前が変わってたりとかする事もあった気がするけど。
まずは、テキストボックスのプロパティとかで、期待した通りに名前が振られているか、確認しては。
そういうの避けるには、きちんとコントロールに、
TextBox氏名
TextBox_年齢
TextBox03住所
とか、自動で振られる名前と別の名前付けとくのが良いと思う。
ご回答ありがとうございます。名前は面倒で変えていなかったのですが、結局、順番に数えて特定する手間が生じるので、名前をちゃんと付けようと思います。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Excel(エクセル) 列の最終行に新たに入力されたらその値を自動参照 1 2023/01/21 09:59
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
Hideについて(.NET)
-
Form_Load と Form_Activate の...
-
エクセルVBA フォーム上でOnkey...
-
【VBAユーザーフォームで閉じる...
-
'ユーザーフォーム右上隅の[×...
-
ユーザーフォームのコピー?
-
MSGBOXのフォント大きさ変更
-
Excel VBAでユーザーフォームだ...
-
モーダルフォームとモードレス...
-
ユーザーフォーム上に現在日時...
-
コントロールの存在確認
-
C#で起動時のフォームを非表示...
-
VB.NETでフォームロード中のエ...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
検索のユーザーフォームの表示...
-
VBE ユーザーフォーム重複・空...
-
エクセルVBAのフォームを最...
-
フォームの二重起動の阻止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
【VBAユーザーフォームで閉じる...
-
モーダルフォームとモードレス...
-
VBAでユーザーフォームを再表示...
-
エクセルVBAのフォームを最...
-
MSGBOXのフォント大きさ変更
-
Form_Load と Form_Activate の...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
Hideについて(.NET)
-
フォームウィンドウを最前面に...
-
コントロールの存在確認
-
VBA(エクセル)のユーザー...
-
'ユーザーフォーム右上隅の[×...
-
エクセルVBA フォーム上でOnkey...
-
ブックをCloseまたはQuitで閉じ...
おすすめ情報
ご回答ありがとうございます。名前は面倒で変えていなかったのですが、結局、順番に数えて特定する手間が生じるので、名前をちゃんと付けようと思います。
数え方がおかしいのか、名前は自体は、ずれていないように思います。「テキストボックス1に顧客番号入力→コマンドボタン2押す」でそれまでに入力した顧客情報を呼び出しているつもりなのですが、その際、前回にコンボボックス(「あり」か「なし」を選ぶ)で選択して保存した答えが、次に情報を呼び出した際にコンボボックス内に表示されません。コンボボックスは未選択(空欄)のまま、「あり」か「なし」の答えがその次のテキストボックスに表示されます。
どうしたらいいか分かりません。画面をお見せできず、正しく質問できているかも不明で、申し訳ありません。