再掲載です。 質問の後、画像の添付がないことをご指摘いただいたのですが、返信と画像を追加し送信した際エラーで消えてしまいました。 ご返信いただいたのに、大変申し訳ありません。 ---------- 初めまして。 ExcelVBAも初心者、知恵袋も初めての投稿です。 いろいろ不手際がありましたら、申し訳ありません。 【前提条件】 Excel2013のシート1に横長のデータベースがあります。 どこか1行を選択すると修正用のユーザーフォームが立ち上がります。 データベースが横に長いため、「入力番号」というテキストボックスに1~6の数字を入れると、それに対応して12項目がそれぞれのテキストボックスまたはコンボボックスに表示され、ボックス内で修正するとシート1へ転記されるVBAを作成しています。 【困っている箇所】 ①「入力番号」に1と入れると、その後2にしても3にしても1のセルの値しか表示されない。 コードにカーソルを当てると、代入元(=の右)は合っているのに代入先(=の左)が間違っている。 ②FindNextをDoLoopで回しているが、その中にForNextで入力番号1~6をループさせたい。 実行すると1~6以外の7という数字が出てきてしまう。 ③変数rngが見つからなければメッセージボックスを表示し抜けるようになっているが、実際はデータベースに入力されていないセルもあるので、無視してほしい。 【コード】 Private Sub txb入力番号1_Change() Dim ws As Worksheet, bnm() As Variant, rng As Range, adr As String Dim col As Long, colx As Long Dim i As Long, x As Long Set ws = Workbooks("一覧.xlsm").Worksheets("データベース") bnm = Array("商品", "産地", "B№ ", "C№ ", "容量", "単位", "本数", "合計容量", "通貨", "単価", "小計($)", "小計(\)") '商品を探す' Set rng = ws.Cells.Find(bnm(0)) If rng Is Nothing Then MsgBox "見つかりませんでした" Exit Sub Else adr = rng.Address col = rng.Column x = Me.lb行 If txb入力番号1 = 1 Then Me.cmb商品 = ws.Cells(x, col) End If End If Do Set rng = ws.Cells.FindNext(After:=rng) If rng.Address = adr Then Exit Do Else colx = rng.Column End If For i = 2 To 6 If txb入力番号1 = i Then Me.cmb商品 = ws.Cells(x, colx) End If Next i Loop '産地を探す' Set rng = ws.Cells.Find(bnm(1)) ・・・繰り返し End Sub 少し手直しすればいいのか、そもそも根本的に間違っているのか、勉強不足のため分からずに数か月悩んでおります。 足りない情報などありましたら、追加します。 何卒、ご教示お願いいたします。 【補足】 データベースは商品~小計(¥)までの12項目(11ではなく12でした。)が6回分あります。 ユーザーフォームの「入力番号」に1を入れると、商品名のコンボボックスにA、産地のテキストボックスにはアメリカを、「入力番号」に2を入れるとBが表示される…という風に対応したセルの値を表示したいです。
Visual Basic