おはようございます。
エクセルは使いなれてますが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
A 回答 (5件)
- 最新から表示
- 回答順に表示
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
'-------------------------------------------
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、・・と英字で掴むことはやりにくいから。
ーー
質問をするときは、抽象化・簡略化したシートのデータ例を小数上げておくこと。
前の質問も関連がある場合は質問番号を挙げておくほうがよいだろう。
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
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
に変えてください。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで文字の入力がセルの...
-
多数の計算セルに一括で同一の...
-
エクセルのセルの中の,よりも前...
-
Excelのmatch関数エラー原因が...
-
置換機能を使わずに先頭に「'」...
-
Excelで、半角スペースをTABに...
-
excelで可視セルのみ置換
-
Excelからテキストへのコ...
-
<Excel>別シートの値を等間隔で...
-
Excel "~区"のみを削除したい
-
エクセルの表ををメモ帳などに...
-
エクセルでセル内の一部を一括...
-
Excelで電話番号などの-(ハイ...
-
Excelのシートにある1行...
-
【エクセル】ピボットテーブル...
-
EXCELで"Tab"を"@"に置換したい
-
Excelの入力済みセルに一括で、...
-
エクセルの関数で、記号などを...
-
エクセルでスペースの記号を表...
-
Excelの空文字セルの削除方法を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
多数の計算セルに一括で同一の...
-
エクセルで文字の入力がセルの...
-
Excelのmatch関数エラー原因が...
-
Excelからテキストへのコ...
-
エクセルのセルの中の,よりも前...
-
excelで可視セルのみ置換
-
Excelの空文字セルの削除方法を...
-
置換機能を使わずに先頭に「'」...
-
Excelの入力済みセルに一括で、...
-
小数点を消す方法
-
Excelのシートにある1行...
-
エクセルでセル内の一部を一括...
-
【エクセル】ピボットテーブル...
-
エクセルの表ををメモ帳などに...
-
エクセルでセル内の一部分だけ...
-
Excelで電話番号などの-(ハイ...
-
Excelで、半角スペースをTABに...
-
一括でダブルクリックした状態...
-
エクセルの関数で、記号などを...
-
Excelのアポストロフィーの削除
おすすめ情報