プロが教える店舗&オフィスのセキュリティ対策術

Private Sub ListBox1_Click()
Dim response As VbMsgBoxResult

response = MsgBox("編集しますか?記載情報に移動しますか?", vbYesNoCancel + vbQuestion, "選択の確認")

If response = vbNo Then
' 編集しない場合
' 選択された行にカーソルを移動
Sheet1.Cells(ListBox1.ListIndex + 1, 1).Select
ElseIf response = vbYes Then
' UserForm1 に検索した情報を表示
UserForm1.ComboBox1.Value = ComboBox1.Value
UserForm1.TextBox3.Value = ComboBox5.Value
' 同様に他のコントロールにデータをセットする

' UserForm1 を表示
UserForm1.Show
End If
Unload UserForm2
End Sub
現状このようなコードでリストボックスに表示した行をクリックして編集するならUserForm展開するのと記載情報に移動しますか?の時sheet1の該当する行にカーソル移動させたいのですがうまくいきません
AIに相談してもなかなかはかどりません(´;ω;`)
listBoxに表示している情報で検索対象となる列は表示の一番右でListIndex, 0だと思うのですが
それでもうまくいきませんでした
sheet1のA列に該当する値が(連番)あるのですがカーソルはlistBoxに表示した行をsheet1でカーソルを移動させる感じになっている気がします
どうか修正できる方おりましたらよろしくお願いしますm(__)m

質問者からの補足コメント

  • うーん・・・

    実行エラーは出ません、うまくいかない時の動きは説明していますが・・・カーソルは移動はするのですがその行のセルにカーソルが行かずにlistBoxに表示した行をsheet1でカーソルを移動させる感じになっている動きをします

    No.1の回答に寄せられた補足コメントです。 補足日時:2024/04/18 12:06

A 回答 (4件)

ListBox1にはどのようにリストを登録しているのでしょうか


#3のPrivate Sub UserForm_Initialize()ではListBox1の登録は 1行目から始まっています(この登録内容で考えています)

>ListIndex, 0だと思うのですが
そうですね なので+1しています

しかしListBox1の登録が2行目からであれば
ListBox1のインデックスとセルの行ナンバーの差異を+する必要があるのではないかと・・・
2行目からであれば +2としなければ 目的のセルにならないと思います

セル行は1から始まり ListIndexは0から始まるので
Sheet1.Cells(ListBox1.ListIndex +最初の登録セル行番号, 1).Select
でどうでしょう(行方向に順次List登録した場合)
    • good
    • 0
この回答へのお礼

Private Sub FilterListBox()
Private Function IsFiltered(ByVal row As Long, ByVal rng As Range) As Boolean
Private Function GetColumnIndex(ByVal comboBoxIndex As Long) As Long
Private Sub LoadComboBoxItems()
Private Function GetUniqueValues(rng As Range) As Variantを設定しています

お礼日時:2024/04/19 09:06

読解力が無く申し訳ないのですが


>listBoxに表示した行をsheet1でカーソルを移動させる感じになっている動きをします
そのような処理ではないのですか

例えば(ご質問そのまま)

Private Sub UserForm_Initialize()
Dim i As Long
For i = 1 To Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
ListBox1.AddItem Sheet1.Cells(i, 1)
Next i
End Sub

'?UserForm2
Private Sub ListBox1_Click()
Dim response As VbMsgBoxResult
response = MsgBox("編集しますか?記載情報に移動しますか?", vbYesNoCancel + vbQuestion, "選択の確認")

If response = vbNo Then
' 編集しない場合
' 選択された行にカーソルを移動
Sheet1.Activate
Sheet1.Cells(ListBox1.ListIndex + 1, 1).Select
ElseIf response = vbYes Then
End If
End Sub

>sheet1の該当する行にカーソル移動させたいのですがうまくいきません
カーソル・・・セルを入力モードにしたいという事ですか?

・・・読み違えていたのかもしれません
現状の結果でなく
いいえを押下した時の 期待する処理結果はどのような結果ですか
    • good
    • 0
この回答へのお礼

いいえを押したら本来ならlistBoxでクリックした行の該当するsheet1のA列のセルにカーソルが行くようにしたいのですがlistBoxに表示した行をクリックしたらその表示っしていた行数分をsheet1の同じ行数分でカーソルを移動させる感じになっている感じです

お礼日時:2024/04/18 18:06

Sheet1. が必ずしも WorkSheets("Sheet1") になるかは仕様次第です。


そこは間違いないですか?
あとはシートを先にアクティベートしてからセルを選択するとかかな?
検証するにもエクセルないので具体的コードは書けませんが。
    • good
    • 0

>がうまくいきません


コードを見る限りsheet1がアクティブであればSelectされそうですが

どのような事でうまくいかないのか、どうなるのかなどを書きましょう
1004エラーが出る場合は sheet1シートオブジェクトをアクティブにしてからセルを選択します (存在の確認もしてください)
Sheet1.Activate

逆にSheet1ではなくアクティブなシートに対して処理を行いたいのなら
Sheet1→ActiveSheet とします
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A