- ベストアンサー
VBAで検索後、行番号取得し上書き保存
- Excel2002のVBAを使用して、検索後の行番号を取得し、その行にデータを上書き保存する方法を教えてください。
- 入力シートと一覧シートを作成し、入力シートの入力フォームにデータを入力すると、一覧シートの最終行に新規でデータが転記されます。また、入力シートでカタカナ検索を行うと、該当するデータを入力フォームに表示し、そのデータがある行番号をA1セルに取得することができます。
- しかし、上記の方法ではデータを2行下に上書きしてしまいます。データを上書きする行番号と同じ行にデータを上書きするためには、どのような方法を取ればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
遅くなったので、もう解決済みかな? Sub 修正して上書き() Dim no As Long, motoHani(), i As Integer no = Range("A1")-2 'ここで-2とするか ・ ・ For i = 0 To UBound(motoHani) '↓ここで-2にするか .Cells(no-2, i + 1) Range("顧客情報").Cells(no, i + 1) = Range(motoHani(i)).Value Next MsgBox "修正しました。" End Sub ではダメですか
その他の回答 (1)
- hige_082
- ベストアンサー率50% (379/747)
Sub 修正して上書き() Dim no As Long, motoHani(), i As Integer no = Range("A1") motoHani = Array("D4", "C6", "I6", "C7", "J7", "C8", "C9", "C10", "H10", "C11", "I11", "C12", "E12", "H12", "J12", "C14", "C13", "E13", "H13", "J13", "C15", "C16") For i = 0 To UBound(motoHani) 'Range("顧客情報").Cells(no, i + 1) = Range(motoHani(i)).Value '元のコード Cells(no, i + 1) = Range(motoHani(i)).Value '修正後のコード Next MsgBox "修正しました。" End Sub ここまで作れるのであれば、コードの修正個所を見れば解るかな、と思いますが 解説が必要ですか?
補足
早速回答いだいてありがとうございます。VBAは本や資料を見ながら勉強し、何とかここまでたどり着いた感じなのです。 質問内容に言葉が足りませんでした。 実は、「入力」というシートの入力フォームで検索。別の「一覧」というシートのセル範囲に"顧客情報"という名前を付けています。 Sub セル範囲に名前を付ける() Dim myName As String, myRng As Range myName = "顧客情報" Set myRng = Worksheets("一覧").Range("B3:W65536") ThisWorkbook.Names.Add myName, myRng End Sub 「入力」シートのA1に検索結果の「一覧」シートの行番号を取得して、「一覧」シート顧客情報に上書きをしたいのです。 たぶん、"顧客情報"はB3から最終行まで指定しているので、行番号を取得し、上書きした際に2こずれてしまうと思います。(さっき気が付きました。) ただ、上記のRange("B3:W65536")を(B1:W65536)にすると他に不具合が出てしまいます。 もう、考えがまとまらず戸惑っています。どうか教えてください。
お礼
Range("顧客情報").Cells(no - 2, i + 1) = Range(motoHani(i)).Value で出来ました! ありがとうございました。 自分でも-2は同じように入れてみたのですが、エラーになってしまったので諦めていました。何かが違ったのかも・・・ 本当に助かりました。