• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで検索後、行番号取得し上書き保存)

VBAで検索後、行番号取得し上書き保存

このQ&Aのポイント
  • Excel2002のVBAを使用して、検索後の行番号を取得し、その行にデータを上書き保存する方法を教えてください。
  • 入力シートと一覧シートを作成し、入力シートの入力フォームにデータを入力すると、一覧シートの最終行に新規でデータが転記されます。また、入力シートでカタカナ検索を行うと、該当するデータを入力フォームに表示し、そのデータがある行番号をA1セルに取得することができます。
  • しかし、上記の方法ではデータを2行下に上書きしてしまいます。データを上書きする行番号と同じ行にデータを上書きするためには、どのような方法を取ればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.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 ではダメですか

chibi1971
質問者

お礼

Range("顧客情報").Cells(no - 2, i + 1) = Range(motoHani(i)).Value で出来ました! ありがとうございました。 自分でも-2は同じように入れてみたのですが、エラーになってしまったので諦めていました。何かが違ったのかも・・・ 本当に助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

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 ここまで作れるのであれば、コードの修正個所を見れば解るかな、と思いますが 解説が必要ですか?

chibi1971
質問者

補足

早速回答いだいてありがとうございます。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)にすると他に不具合が出てしまいます。 もう、考えがまとまらず戸惑っています。どうか教えてください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 入力用シートから文字検索し、データシートから情報を呼び出す

    入力用シートから蓄積用シートにデータを転記し、同じ入力シートを使って蓄積用シートからデータを呼び出して修正できるようにしたいと考えています(入力ボタン・呼び出しボタンあり)。転記はできたのですが、呼び出しが出来ません。本を見て作業していますが、私は文字で検索したいのです。本では数字(社員コード)で検索しています。 Sub セル範囲に名前を付ける() Dim myName As String, myrng As Range myName = "顧客情報" Set myrng = Worksheets("一覧").Range("B3:T65536") ThisWorkbook.Names.Add myName, myrng End Sub Sub 新規レコード転記2() Dim motoSht As Worksheet, sakiSht As Worksheet, sakiTbl As Range, sakiRng As Range, i As Long Dim lastRec As Range, newRec As Range Dim motohani() Application.ScreenUpdating = False '画面の更新をストップ Set motoSht = Sheets("入力") Set sakiSht = Sheets("一覧") motohani = Array("D4", "C6", "I6", "C7", "J7", "C8", "C9", "C10", "H10", "C11", "I11", "C12", "E12", "H12", "J12", "C13", "E13", "H13", "J13", "C14", "C15", "C16") Set sakiRng = sakiSht.Range("B" & Rows.Count).End(xlUp).Offset(1) For i = 0 To UBound(motohani) sakiRng.Offset(0, i).Value = motoSht.Range(motohani(i)).Value motoSht.Range(motohani(i)).MergeArea.ClearContents Next MsgBox "入力を完了しました。" End Sub ここまでは動作OKでした。問題はこの下です。検索セルに数字を入れると動作するのですが、私は名前(全角カタカナ)で検索したいのです。 Sub 情報検索() Dim tmpInt As Integer, motoHani(), myRng As Range, i As Integer '変数の宣言 tmpInt = Sheets("入力").Range("D4").Value '検索する値を取得 motoHani = Array("C6", "I6", "C7", "J7", "C8", "C9", "C10", "H10", "C11", "I11", "C12", "E12", "H12", "J12", "C13", "E13", "H13", "J13", "C14", "C15", "C16") '転記する位置を設定 Set myRng = Range("顧客情報").Columns(1).Find(tmpInt, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox "該当するレコードはありませんでした" Exit Sub End If For i = 0 To UBound(motoHani) Range(motoHani(i)).Value = myRng.Offset(0, i + 1) Next End Sub 宜しくお願いいたします。

  • データ検索後の上書き

    データシートに記載がある社員番号を入力フォームに入力し特定の社員データを検索するマクロを下記にて組みました。検索抽出された社員データを直接一部修正入力してもとの社員データヘ上書き処理をする(データによって修正しないこともあり)場合のマクロをご教示願います。 Sub ボタン1_Click() Dim tmpInt As Integer, motoHani(), myRng As Range, i As Integer tmpInt = Worksheets("入力フォーム").Range("C4").Value motoHani = Array("C6", "C7", "C8", "F8", "C10", "C11") Set myRng = Range("社員テーブル").Columns(1).Find(tmpInt, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox "該当する事案はありません" Exit Sub End If For i = 0 To UBound(motoHani) Range(motoHani(i)).Value = myRng.Offset(0, i + 1) Next End Sub

  • VBAのファインドメソッドで検索すると対象外のデータが選択されることがある

    CDのリスト表(12列で、現在2269行 範囲名"収録表")Sheets("データ")から,キーワードで該当ディスクを検索し、 結果をSheets("検索")に転記する、プログラムを作りましたが、 仮に、該当データが10件、転記されたとして そのデータを見ると、中に1件、対象外のデータがはいっている事が たまにあります、いろんな原因を考えてみましたがわかりません。 もともと、VBAのファインドメソッドが、こんなエラーを起こしやすいのか、、、(そんな事、ないよね) どなたか、教えてください。 下が、プログラムです Sub 新規検索() Application.ScreenUpdating = False Dim myData, myRng As Range Dim myWord As String myWord = InputBox("キーワードを入力してください") データ処理中F.Show vbModeless データ処理中F.Repaint Set myData = Range("収録表") Set myRng = myData.Find(What:=myWord, LookIn:=xlValues, _ Lookat:=xlPart, MatchCase:=False, MatchByte:=False) If myWord = "" Then MsgBox ("キーワードを入力してください") Exit Sub End If If Not myRng Is Nothing Then Application.Goto Cells(myRng.Row, 1), True Else: Unload データ処理中F MsgBox ("該当データはありません") Exit Sub End If Sheets("検索").Range("K1") = myRng.Row '一番最初の検索値のRow Call コピー1 Do Until Range("K1") = Range("L1")   Call 次を検索 Loop Call 検索終了 Unload データ処理中F Application.ScreenUpdating = True End Sub Sub 次を検索() Dim myData, myRng As Range Sheets("データ").Select Set myData = Range("収録表") Set myRng = Cells.FindNext(after:=ActiveCell.Offset(1)) If myRng <> "" Then Application.Goto Cells(myRng.Row, 1), True End If Sheets("検索").Range("L1") = myRng.Row '2番目以降の検索値のRow   Call コピー2 End Sub Sub コピー1() Sheets("検索").Range("A3:L5000,L1").ClearContents Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData, ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub コピー2() Dim myData As Range Set myData = Range("収録表") Set motorng = Application.Intersect(myData,   ActiveCell.EntireRow) Set sakiRng = Sheets("検索").Range("A65535").End(xlUp).Offset(1) motorng.Copy sakiRng Sheets("検索").Visible = True Sheets("検索").Activate End Sub Sub 検索終了() Dim r As Long r = Range("A65536").End(xlUp).Row Range("A" & r).Select ActiveCell.FormulaR1C1 = "=COUNTA(R3C:R[-1]C)" MsgBox "全部で" & Range("A" & r).Value & "件ありました" Range("A65535").End(xlUp).EntireRow.ClearContents Call 行頭表示 End Sub

  • 番号検索

    社員テーブルの4桁で構成される社員番号から検索するマクロを下記にて組みました。しかし、4桁の社員番号からではなく各自宅電話番号の10桁の数字から検索するために社員番号を各自宅の電話番号10桁の番号に変え入力フォームのC4のセルに10桁の数値を入れて検索したところマクロが作動しなくなりました。ご教示願います Sub ボタン1_Click() Dim tmpInt As Integer, motoHani(), myRng As Range, i As Integer tmpInt = Worksheets("入力フォーム").Range("C4").Value motoHani = Array("C6", "C7", "C8", "F8", "C10", "C11") Set myRng = Range("社員テーブル").Columns(1).Find(tmpInt, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox "該当する事案はありません" Exit Sub End If For i = 0 To UBound(motoHani) Range(motoHani(i)).Value = myRng.Offset(0, i + 1) Next End Sub

  • 指定セルへ転記するマクロで値が無い場合固定値転記

    シート2の1行目の指定したセルの値をシート1の指定セルに 転記を行いシート1が印刷。 印刷後はシート2の2行目の指定したセルの値をシート1の指定したセルに 転記してシート1が印刷。 シート2にデータが無くなったら停止という以下のマクロにて シート2のO列はシート1のセルA19に順次転記なのですが O列は運用上空白が有る場合が判明した為 値がある場合はその値を転記、値が無い場合は半角で ZZZ と 転記をしたいのですがどこを変更していいのか分かりません。 よろしくお願いします。 Sub データ転記() Dim myRng(1 To 23) Dim cpRng Dim i As Integer Dim n As String, myStr As String With Sheets("Sheet2") Set myRng(1) = .Range("B2") Set myRng(2) = .Range("C2") Set myRng(3) = .Range("D2") Set myRng(4) = .Range("D2") Set myRng(5) = .Range("D2") Set myRng(6) = .Range("E2") Set myRng(7) = .Range("E2") Set myRng(8) = .Range("F2") Set myRng(9) = .Range("F2") Set myRng(10) = .Range("H2") Set myRng(11) = .Range("J2") Set myRng(12) = .Range("K2") Set myRng(13) = .Range("K2") Set myRng(14) = .Range("L2") Set myRng(15) = .Range("M2") Set myRng(16) = .Range("N2") Set myRng(17) = .Range("O2") Set myRng(18) = .Range("P2") Set myRng(19) = .Range("Q2") Set myRng(20) = .Range("R2") Set myRng(21) = .Range("S2") Set myRng(22) = .Range("U2") Set myRng(23) = .Range("G2") End With cpRng = Split("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,G5", ",") '転記先配列化 With Sheets("Sheet1") .Range("B10,G3,F10,F13,G10,G13,L10,E19,F19,J19,O7,O8,C19,D10,D13,A19,O4,O5").NumberFormatLocal = "@" Do While myRng(1) <> "" For i = 1 To 23 .Range(cpRng(i - 1)).Value = myRng(i).Value Next .Range("C3,C13").Value = Left(.Range("O3").Value, 10) .Range("C10").Value = Mid(.Range("O3"), 11, 6) .Range("O7").Value = Format(Range("O6").Value, "0000000") .Range("O8").Value = Format(Range("J19").Value, "0000000") Call 加工01 Call 加工02 '印刷 .PrintOut For i = 1 To 23 Set myRng(i) = myRng(i).Offset(1) Next i Loop .Range("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,C3,C10,C13,C19,D10,D13,O8,O7,G5").ClearContents End With For i = 1 To 23 Set myRng(i) = Nothing Next MsgBox "印刷終了" Sheets("Sheet2").Select Cells.Select Selection.Delete Shift:=xlUp Sheets("Sheet1").Select Range("C3").Select End Sub

  • 検索して修正したデータの上書転記

    Sub 検索() Dim tmpInt As Integer, motoHani(), myRng As Range, i As Integer tmpInt = Sheets("入力フォーム").Range("C4").Value motoHani = Array("C10", "C12", "C13") Set myRng = Range("テーブル").Columns(1).Find(tmpInt, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox "該当するレコードはありませんでした" Exit Sub End If For i = 0 To UBound(motoHani) Range(motoHani(i)).Value = myRng.Offset(0, i + 1) Next End Sub 入力シートと一覧表シートを作成し入力シートの入力フォームにデータを入れてマクロを実行すると一覧表シートにレコード転記されるようにしました。 一覧表シートに転記したデータを,検索し入力フォーム上に表示させることはできたのですが、データを修正して一覧表シートに更新(上書転記)させる方法がわかりません。どうかご存知の方、教えてください。

  • VBAで、35行3列の範囲を通し番号で埋めたい

    お世話になります。 表題のとおり、F5:H35の範囲で、通し番号を入力したいのですが、VBAコードのヒントを教えていただけませんでしょうか? 番号を振る規則は「5行が1・2・3」「6行が4・5・6」といった具合に、横に昇順に並べたいのです。 最後に「35行が103・104・105」としたいです。 下記のようにコードを書いてみました。 5行(1行目)まで走るんですが、6行(2行目)に改行してくれませんでした。 For構文の原理がいまひとつ理解できてないからでしょうか? --------------------------------------- Sub 通し番号() 1) Dim i As Integer, j As Integer, n As Integer 2) i = 5 3) j = 6 4) n = 1 5)For i = i To 35 6)For j = j To 8 7)Cells(i, j) = n 8)n = n + 1 9)Next 10)Next End Sub -------------------------------------- 以上です。 よろしくお願いいたいます。

  • エクセルVBA抽出がうまく出来ません

    エクセル2013VBA初心者です。 入力シートからDBシートへ、DBシートから印刷シートへのデータ転記と印刷、入力内容のクリアまでは出来るようになりました。 DBシートの検索を行い、記録内容を入力シートに転記する抽出を行いたいのですが、下記構文を書いたところで問題が発生しました。 If Sh2.Range("A & i").Value = j And Sh2.Range("B & i").Value = k Then  でとまります。メッセージは ‘Range’メソッドは失敗しました:‘Workshieet’オブジェクトというものです。 やろうとしていることは、入力シートに設けた“E12”と”G12”の二つの検索項目をキーにDBシートの行を特定し、この行の内容を入力シートに反映しようということです。 入力シートの検索項目“E12”、 ”G12”はそれぞれDBシートのA列、B列に格納されている項目で、年度と連番です。サンプルとして入力シート"C5"に抽出しようとしているDBシートD列は申請者名です。 恐れ入りますがよろしくご教示頂きたく、お願い申し上げます。 Sub DBシートから力情報を抽出する () Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim i As Long Dim j As Long Dim k As Long Set Sh1 = Worksheets("入力") Set Sh2 = Worksheets("DB") j = Sh1.Range("E12").Value k = Sh1.Range("G12").Value With Sh2 For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row If Sh2.Range("A & i").Value = j And Sh2.Range("B & i").Value = k Then Sh1.Range("C5").Value = Sh2.Range("D & i").Value End If Next  End With End Sub

  • VBAで作業を作成したものを別の列に適用するには

    教えてください。 マクロ初心者ですが、色々なところから検索してI列に文字が入力されるとJ列に自動で 明日の日付が入るようにまた、入力したIとJのセルを色つけまで完成させました。 次の列以降にも同じ作業を行いたいときのVBAを教えてください。 (「KとL」「MとN」に同じ処理をしたい場合) ループ処理など見たのですが、行のようでよくわかりませんでした。 ちなみに作成したVBAがこちらです。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Application.Intersect(Range("I1:I100"), Target) Is Nothing Then Exit Sub If .Count > 1 Then Exit Sub If IsEmpty(.Value) Then .Offset(, 1).ClearContents Else .Offset(, 1).Value = Date+1 End If End With Dim myColor As Variant Dim c As Range Dim myRng As Range Set myRng = Application.Intersect(Range("I:I"), Target) If myRng Is Nothing Then Exit Sub Application.EnableEvents = False For Each c In myRng Select Case c.Value Case 1 myColor = 36 Case 2 myColor = 38 Case 3 myColor = 40 Case 4 myColor = 39 Case 5 myColor = 34 Case 6 myColor = 35 Case Else myColor = xlNone End Select Cells(c.Row, 9).Resize(1, 2).Interior.ColorIndex = myColor Next c Application.EnableEvents = True End Sub よろしくお願いします。

  • ExcelVBAで行と列の検索

       A  B  C  D  E 1  コード あ  い  う  え 2  10  ○    ○ 3  20     ○  ○ 4  30          ○ 上記の表が5000件あります。Textbox1に入力し検索ボタンを押すと A列のコードを検索して一致する列の○のあるところの1行目の項目 をtextbox2に表示したいのですがうまく行きません。 よろしくお願い致します。 Private Sub CommandButton1_Click() '検索フォームボタン Dim i As Long Dim 最終行 As String Dim サーチ行 As Long Sheets(1).Activate 最終行 = Range("A1").End(xlDown).Row サーチ行 = 0 For i = 2 To 最終行 If TextBox1.Value = Range("A" & i) Then If Range("B" & i, "N" & i) = "" Then TextBox2.Text = Range("B1", "N1") サーチ行 = i Exit For End If End If Next If サーチ行 = 0 Then MsgBox TextBox1.Value & "データはありません。", vbInformation, "無し" End If TextBox1.SetFocus End Sub エラーはでません。データはありませんとなります。  

専門家に質問してみよう