• 締切済み

エクセル(マクロ)置換2 置換用リストを1行ずつ読み込むには

おはようございます。 エクセルは使いなれてますがVBAは記録を使っていて 書き換える程度なので調べてもあまり理解できず困ってます。 先程質問して、結合セルの置換に関しては解決したのですが、 もし簡単にできるのであればと質問させて頂きました。 今置換用のシートは A列に置換前の文字 B列に置換後の文字が入ってます。 そして対象のシートが置換されるようになってるのですが、 これが列ではなく 1行目に置換前の文字 2行目に置換後の文字として処理するのには どこを書き換えればよろしいのでしょうか? 色々試しましたがうまくいきませんでした。 実は、1行目に(A1セルに学生名(1)・A2のセルに住所(1))など20個くらい項目があります 2行目以降に5000行程、学生のデータが入ってます。 各会社の履歴書フォーマットは違うのですが、 入力欄が学生名(1)や住所(1)など入っている項目が同じなので 置換しております。 今は、1行ずつ下のデータを置換シートに貼り付けて 履歴書のシートで置換えをして 新しいファイルにコピーし保存して次のデータという アナログな処理をしております。 同じフォーマット(履歴書)でしたらvlookupなどが使えたのですが。。。 フォーマットによって1つのセルに、学生名(1)と住所(1)が両方入っていたりするので諦めました。 対象セルの場所も形も違いますしね・・・ 列で処理していたマクロを参考に下に貼り付けました。 明日の昼までにあと4000行を処理しなければならなくて困ってます。 お手数ですがどうぞよろしくお願いいたします。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row ActiveSheet.Range("A1:Z200").Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

んにちは。 つまり、以下のように条件が変わったということでしょうか? 今置換用のシートは >A列に置換前の文字 >B列に置換後の文字が入ってます。    ↓ >1行目に置換前の文字 >2行目に置換後の文字として処理するのには 私は、全体が見えないですね。以下は、#3様のコードと、ほとんど変わりません、というか、こちらの解釈とズレはないという意味程度です。 なお、.Worksheets(1) このように、インデックスを使うと、左端にあるという意味だけですから、本来は、シートの名称を使ったほうがよいです。 '------------------------------------------- '標準モジュール Sub ReplacingCells()   Dim sh1 As Worksheet   Dim acSh As Worksheet   Dim col As Long   Dim rw As Long   Dim i As Long      Set sh1 = ThisWorkbook.Worksheets(1) '置換ソースデータ   Set acSh = ActiveSheet   'シートデータの確認   If acSh Is sh1 Then MsgBox "置換ソース・シートは置換できません。", 48: Exit Sub   If WorksheetFunction.CountA(acSh.Cells) < 2 Then MsgBox "対象データがありません。", 48: Exit Sub   '範囲の確定   With acSh     rw = .Cells(Rows.Count, 1).End(xlUp).Row     col = .Cells(.UsedRange.Cells.Count).Column   End With   '置換実行   Application.ScreenUpdating = False   With acSh     For i = 1 To sh1.Range("A65536").End(xlUp).Row Step 2       .Range(.Cells(1, 1), .Cells(rw, col)).Replace _       What:=sh1.Cells(i, 1).Value, _       Replacement:=sh1.Cells(i + 1, 1).Value, _       LookAt:=xlPart, _       SearchOrder:=xlByColumns, _       MatchCase:=True     Next i   End With   Application.ScreenUpdating = True   Set sh1 = Nothing   Set acSh = Nothing End Sub '-------------------------------------------

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row データが横の方向に流れているなら For J = 1 To .Worksheets(1).Range("IV2").End(xlToLeft).Column 処理 Next j IV2の2は実情に合わせて変えること。 実情によりStepが必要な場合が有るかも。 >What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ はセル指定にRange表現を使っているが、Cells(2,j)のような書き方が よいだろう。列番号をA,B、・・と英字で掴むことはやりにくいから。 ーー 質問をするときは、抽象化・簡略化したシートのデータ例を小数上げておくこと。 前の質問も関連がある場合は質問番号を挙げておくほうがよいだろう。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

回答番号:No.1、回答番号:No.2 は解釈が違っていたようです。 >実は、1行目に(A1セルに学生名(1)・A2のセルに住所(1))など >20個くらい項目があります >2行目以降に5000行程、学生のデータが入ってます。 A列の1行目に置換前の文字、2行目に置換後の文字として、3行目以降も交互にデータがあるということですか? 2行1セットで学生データがあり、検索する文字が学生名で、置換後の文字が住所、ということですか? よくわかりませんが、とりあえず下記でどうでしょうか。 Sub test2() Dim i As Long With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row Step 2 ActiveSheet.Range("A1:Z200").Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("A" & i + 1).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

回答番号:No.1で、抜けがありました。 For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row も For i = 1 To .Worksheets(1).Range("IV1").End(xlToLeft).Column に変えてください。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Replaceの引数、WhatとReplacementのセル指定を、Cellsに変えてみてください。 What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ を What:=.Worksheets(1).Cells(1, i).Value, _ Replacement:=.Worksheets(1).Cells(2, i).Value, _

関連するQ&A

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    以下は同一ブック内の「置換」のワークシートに A列に検索文字 B列に置換文字 を書き、置換するマクロなのですが、これですと同一ブック内でしか作業できません。 このリストを別ファイル(例えば"Book2.xls"の"sheet1")に書き、別のファイル(例えば"Book1.xls")で実行するにはどうしたらよいでしょうか。 Sub 置換() For i = 1 To Worksheets("置換").Range("A65536").End(xlUp).Row Cells.Replace What:=Worksheets("置換").Range("A" & i).Value, _ Replacement:=Worksheets("置換").Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End Sub

  • エクセル(マクロ)置換 結合されたセルに対しての置換

    こんばんは、 今置換用のマクロをこちらで検索して使ってましたが 使用するエクセルのフォーマットが 1セルに入力されてるのではなく、3つのセルを結合されている物に入力されているもので 下記のマクロだと、正しく置換されておりません。 置換変換用のシートと、置換したいシートがある状態で、 下記のマクロだとなぜ結合されたセル内の文字は置換えできないのでしょうか? 結合されてないセルですと、置換はちゃんとされております。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row ActiveSheet.Cells.Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub 明日の昼までに5000個のファイルを置換えするので これが出来ればなぁと思っております。 大変お手数ですが教えて頂けると助かります では、よろしくお願いいたします。

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    置換専用につくったワークシートに A列に検索文字 B列に置換文字を入力したリスト(例えば"Book2.xls"の"sheet1")を作りました。 このリストを使って別のブック内(例えば"Book1.xls")の複数のシート内を一括して置換えがしたいです。 自分で調べてみて下記で置換えはできたのですが、その都度、各シートを選択しなければだめでした。 一括で同ブック内の複数シート内を置換えさせるには、どこを修正したらいいのでしょうか? 見よう見まねの初心者です。 どうぞよろしくお願いします。 Sub 置換()  With ThisWorkbook   If ActiveSheet Is .Worksheets(1) Then Exit Sub   For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row    ActiveSheet.Cells.Replace _      What:=.Worksheets(1).Range("A" & i).Value, _      Replacement:=.Worksheets(1).Range("B" & i).Value, _      LookAt:=xlPart, SearchOrder:=xlByColumns   Next  End With End Sub

  • 置換マクロ 続きです…

    http://okwave.jp/qa/q8444285.html ↑こちらでご質問をさせていただき、置換シートA列に置換元、B列に置換後データを入れておくことで、置換が一度にできるマクロを作っていただいたのですが、 ブック全体ではなく、現在アクティブなシートだけ、置換をすることは可能でしょうか…? いま、このマクロを実行すると、ブック全体が置換され、元の置換シートのA列や、置換できればしたくないシートもすべて置換されてしまいます。 回答を閉め切ってしまい、新規でご質問となってしまいました。 すみません、、自分でもいろいろと調べてやってみたのですが、 どうしてもよくわからず… どうぞ、よろしくお願い致します。 ● 作っていただいたマクロ ● sub macro1()  dim h as range  for each h in worksheets("置換").range("A1:A" & worksheets("置換").range("A65536").end(xlup).row)   cells.replace what:=h.value, replacement:=h.offset(0,1).value, lookat:=xlpart  next end sub

  • 空白のセルを行削除する。EXCELマクロなのですが・・

    VBA初心者です。 データーをHPから、単純にコピーしてきて、 EXCELに貼り付けています。 フィルターをかけても、画像かなにかがセルに張り付いているのか、 空白行をすべて削除できません。 いろいろ試して(HPから、空白セルの行削除について書かれてあるマクロを貼り付けて)動いたのが、このVBAです。 しかし、遅いので、早いVBAに簡略できればいいのですが。。 大体、1000行ぐらいの文字を貼り付けて、3/1ぐらいが空白行です。A行のセルの空白のみを、削除したいのですが。  まったくの素人なので、わかりません。 どうかよろしくお願いいたします。 Sub 空白の削除() x% = Worksheets("sheet1").Range("A65536").End(xlUp).Row For i = x% To 1 Step -1 If Worksheets("sheet1").Cells(i, 1).Value = "" Then Worksheets("sheet1").Rows(i).Delete Next End Sub

  • エクセルマクロで教えてください

    Sub smp05_14_01() Dim 対象セル As Range Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Dim 行 As Long, 列 As Long Dim i As Long Set ws1 = Worksheets("顧客") Set ws2 = Worksheets("売上") Set ws3 = Worksheets("顧客未登録") 行 = ws1.Range("A1").End(xlDown).Row - 1 列 = ws1.Range("A1").End(xlToRight).Column Set 対象セル = ws1.Cells(1, 列 + 2).Resize(2, 行) For i = 1 To 行 対象セル(1, i).Value = "顧客NO" 対象セル(2, i).Value = "<>" & ws1.Cells(i + 1, 1) Next ws2.Range("A1").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=対象セル, _ CopyToRange:=ws3.Range("A1") 対象セル.Clear End Sub 上記のマクロは売上のシートに登録されている以外の顧客NOを顧客シートを参照して顧客未登録シートにコピーするのもですが添付したファイルの数だと上手くいくのですが、エクセルのヨコのセルの最大値の258を越えると上手くいきません。上記の処理で1000レコードを越えても売上シートに登録されている以外の顧客NOを参照して顧客未登録シートにコピーするマクロを教えてください。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • Excelで置換した文字に色をつけたい

    よろしくお願いします Excelで、「対象シート」のB列を参照して、 「置換リスト」シートの一覧のC列の文字列をE列の文字列に置換するようにしています。 「対象シート」のA列には置換前のデータも入っているので、 「対象シート」のA列、B列それぞれの置換前、置換後の文字列に色をつけたいと思っています。 どの文字がどの文字に置換されたかを比較するためです。 置換後のB列のみ下記式で色をつけられたのですが、 該当文字が含まれる、セル内全部の文字の色が変わってしまいました。 該当文字だけの色を変えるにはどうすればよいでしょうか。 また、「置換リスト」シートのC列にある場は「対象シート」のA列の該当文字のみを赤くする方法も教えていただけないでしょうか。 Sub list置換_Click() Dim list_sheet As Worksheet Dim chg_sheet As Worksheet 'こっちは置換する元の文字と置換文字のリスト Set list_sheet = Worksheets("置換リスト") 'こっちは一括置換したい対象のシート Set chg_sheet = Worksheets("対象シート") cnt = list_sheet.Range("c4").CurrentRegion.Rows.Count For i = 4 To cnt srcword = list_sheet.Cells(i, "C").Value repword = list_sheet.Cells(i, "E").Value With Application.ReplaceFormat.Font .Subscript = False .Color = 255 .TintAndShade = 0 End With Columns("B:B").Replace What:=srcword, Replacement:=repword, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=True Next i End Sub よろしくお願いいたします。

  • マクロ CSVファイル取込 最終行、最終列の取得

    マクロでCSVファイルを取込むプログラムを作成しております。 最終行を取得するソースまではできたのですが、最終列を取得する処理ができておりません。 教えて頂けないでしょうか。 処理概要 (1)ボタンを押したら、Sheet2にCSVファイルがインポートされる (2)Sheet2に出力されたA2行~A8行とA2行~A8行の最終列までをSheet1のD4行~D10行、D4行~D10行の列にコピー  (3)Sheet2に出力されたA9行目はコピーしない (4)Sheet2に出力されたA10行以降とA10行以降の最終列までをSheet1のA13行以降の最終列までにコピー 現在のソースは(2)、(4)の最終列を取得するソース以外はできています。 (2)、(4)の最終列を取得し、コピーする方法を教えて下さい。 現在のソースです。 Sub READ_TextFile() Dim LoadFileName As String Dim LR As Long '選んだcsvファイルをSheet1に読み込む LoadFileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "読み込むcsvファイルを選んで下さい", False) If LoadFileName = "False" Then Exit Sub Workbooks.Open LoadFileName Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") ActiveWorkbook.Close False 'Sheet2のA2:A8をSheet1のD4を先頭セルとする範囲にCopy Worksheets("Sheet2").Range("A2:A8").Copy Worksheets("Sheet1").Range("D4") 'Sheet2のA列のデータのある最終行を取得しLRという変数に入れる LR = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row 'Sheet2のA10からA列の最終行までをSheet1のA13を先頭セルとする範囲にCopy Worksheets("Sheet2").Range("A10:A" & LR).Copy Worksheets("Sheet1").Range("A13") End Sub

  • マクロ EXCELの範囲をコピーして貼付け

    『End(xlDown).Row』で取得した値を使ってセルの範囲指定&コピーを行い、 新しく追加したシートに貼り付けたいのですがうまくいきません。 Sub attendanceJoin() Dim MaxRow As Integer 'シートの最終行の値 Workbooks("test.xls").Activate Dim NewWorkSheet As Worksheet Set NewWorkSheet = Worksheets.Add() '新しいシートを追加する MaxRow = Worksheets(2).Range("M1").End(xlDown).Row  'A列の最終行を取得 NewWorkSheet.Name = "統合"  '新しく追加したシートの名前を変更 With Workbooks("test.xls") .Worksheets(2).Range("A1:M&MaxRow").Copy   'コピーするセルの範囲を指定    '↑ここでエラー。.Worksheets(2).Range("A1:M38").Copy を指定するイメージです。 .Worksheets("統合").Range("A1").PasteSpecial End With End Sub どなたか間違っている箇所のご教示お願い出来ますでしょうか。 どうぞよろしくお願い致します。

専門家に質問してみよう