[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リストによる複数語の置換をシート毎に順番に行いたい』(ゆう)
リストは以下のスプレシートからマクロを実行できたらと思っています。
https://docs.google.com/spreadsheets/d/1ib06OW0fJjeMNzwsCknexKYVqW3M0Rwq341RdiO-si8/edit?usp=sharing
【おこないたいこと】
1.原本となるシートを30枚コピー【原本となるシートを含めてシートタブには31枚;すべて同じ内容です】。
2.シートは絶対31枚です。
3.上記のアドレスのスプレシートからリストによる置換を行いたいです。範囲はすべてのシートでC9:BT52です。
4.A列はシートタブが左から何番目かを示す番号です
5.置換は、B列→C列へ置換。かつ D列→E列へ置換。 かつ F列をシートの名前にしたいです
例えば、シートタブの左からシート1枚目はB2からC2へ置換、かつ D2からE2へ置換 かつF2のセルを左から1枚目のシートの名前とする
次は、シートタブの左からシート2枚目はB3からC3へ置換、かつ D3からE3へ置換 かつF3のセルを左から2枚目のシートの名前とする。
補足:B列とD列はすべて同じ内容です
全然検討違いなのですが、以下の方法ではシート毎に毎回 文字列を設定しないといけなくて困ってます。
Sub 2つの語の置換()
Range("C9:BT52").Select
With Selection
LookAt:=xlWhole
.Replace What:="置換前文字列B列", Replacement:="置換後文字列C列"
.Replace What:="置換前文字列D列", Replacement:="置換後文字列E列"
End With
End Sub
< 使用 Excel:Excel2007、使用 OS:WindowsXP >
B列の値をC列にコピーして、
D列の値をE列にコピーしたらいいんですか?
それから、A列ってデータ行すべてにシート番号を入れているんですか?
F列も同様にデータ行前部に入れるんですか?
(まっつわん) 2017/07/21(金) 21:23
(ゆう) 2017/07/21(金) 21:38
Option Explicit
Sub test() Dim 検索文字B As String, 置換文字C As String Dim 検索文字D As String, 置換文字E As String Dim i As Long
For i = 1 To 31 置換文字C = Cells(i + 1, "C").Value 置換文字E = Cells(i + 1, "E").Value Worksheets(i).Name = Cells(i + 1, "F").Value
With Worksheets(i).Range("C9:BT52") .Replace What:=検索文字B, Replacement:=置換文字C, LookAt:=xlWhole .Replace What:=検索文字D, Replacement:=置換文字E End With Next
End Sub
(マナ) 2017/07/22(土) 09:18
(マナ) 2017/07/22(土) 09:30
悪意があろうとなかろうと、得体のしれないファイルを開けるのは、
不要なウィルス感染の危険があるので。。。
所詮、マクロは言葉で作業を自動で行ってもらうよう書くだけなので、
まずは日本語で説明できるようになりましょう^^
まず、前提条件を明確にしましょう。
書き換えの文字のリストは、
コピーしたシートにはないですよね?
どのブックのどのシートのどのセル範囲に、シート毎の置き換え文字のリストがあり、
どのブックのどのシートのどのセル範囲に、文字を置き換えられる表があるのでしょうか?
(まっつわん) 2017/07/22(土) 09:42
こんな感じ
Sub test() Dim a, i As Long a = Sheets("sheet1").Cells(1).CurrentRegion.Value For i = 2 To UBound(a, 1) With Sheets(CStr(a(i, 6))).Range("C9:BT52") .Replace a(i, 2), a(i, 3), 2 .Replace a(i, 4), a(i, 5), 2 End With Next End Sub (seiya) 2017/07/22(土) 09:59
[行いたいこと]
[予定表]ブックにある[7.1]という原本のシートを30枚コピー。すると、シートの名前は[7.1(2)]・・・[7.1(30)]と合計31枚になります。
[予定表]ブックのシートを単純に左から数えて順番に1つ目を、検索文字B2セルから置換文字C2セルに置換。
検索文字D2セルから置換文字E2セルに置換。F2セルに入力されている文字をシートの名前に置き換える。
次に、[予定表]ブックのシートを単純に左から数えて順番に2つ目を、検索文字B3セルから置換文字C3セルに置換。検索文字D3セルから置換文字E3セルに置換。F3セルに入力されている文字をシートの名前に置き換える。
同様に31回繰り返す作業を行いたいです。
最後は、[予定表]ブックのシートを単純に左から数えて順番に31番目を、検索文字B32セルから置換文字C32セルに置換。検索文字D32セルから置換文字E32セルに置換。F32セルに入力されている文字をシートの名前に置き換える。
説明不足があるようでしたら、言ってください。
(ゆう) 2017/07/22(土) 14:31
>[置換用文字リスト]のいうブックの[リスト] Sheet1 じゃなっかたの?
よく分からんけど Extension .xlsx/m は必要に応じて用変更
Sub test() Dim a, i As Long a = WorkBooks("置換用文字リスト.xlsm").Sheets("リスト").Cells(1).CurrentRegion.Value For i = 2 To UBound(a, 1) With Workbooks("予定表.xlsx").Sheets(i-1).Range("C9:BT52") .Replace a(i, 2), a(i, 3), 2 .Replace a(i, 4), a(i, 5), 2 End With Next End Sub ( seiya) 2017/07/22(土) 16:57
今でも凄く感謝しています。ありがとうございます。
(ゆう) 2017/07/22(土) 21:27
最初に書いた方でいいのかな?
> With Workbooks("予定表.xlsx").Sheets(i-1).Range("C9:BT52") を With Workbooks("予定表.xlsx").Sheets(CStr(a(i, 6))).Range("C9:BT52") ( seiya) 2017/07/22(土) 21:34
自分なりに頂いたマクロを以下のように変えてみました。恥ずかしながらマクロを以下に提示しています。
すごく初心者なので、F1セルがシート一番目の名前にきてしまいました。
F2セルをシート一番目にかえて、F3セルをシートの2番目に変えて、繰り返し名前を取得したいです。
Sub TEST()
Dim a, i As Long a = Workbooks("置換用文字リスト.xlsx").Sheets("リスト").Cells(1).CurrentRegion.Value For i = 2 To UBound(a, 1) With Workbooks("予定表.xlsm").Sheets(i - 1).Range("C9:BT52") .Replace a(i, 2), a(i, 3), 2 .Replace a(i, 4), a(i, 5), 2 Worksheets(i - 1).Name = Workbooks("置換用文字リスト.xlsx").Sheets("リスト").Cells(i - 1, 6).Value
End With Next End Sub (ゆう) 2017/07/23(日) 07:47
>置換用文字リストのF2セルを予定表のシートの左から一番目の名前に変えたいです。
2行追加してください。
Sub test() Dim a, i As Long a = WorkBooks("置換用文字リスト.xlsm").Sheets("リスト").Cells(1).CurrentRegion.Value For i = 2 To UBound(a, 1) With Workbooks("予定表.xlsx").Sheets(i-1).Range("C9:BT52") .Replace a(i, 2), a(i, 3), 2 .Replace a(i, 4), a(i, 5), 2 a(i, 6) = .Parent.Name '<- ★ End With Next WorkBooks("置換用文字リスト.xlsm").Sheets("リスト").Cells(1).CurrentRegion.Value = a '<-★ End Sub ( seiya) 2017/07/23(日) 10:04
私にとってコードを書きやすくするために配列を使用しているだけです。
Rangeをそのまま使うとこのような記述になるでしょう...
Sub test() Dim r As Range, i As Long Set r = Workbooks("置換用文字リスト.xlsm").Sheets("リスト").Cells(1).CurrentRegion.Columns("f").Cells '★ リストのF列を参照 For i = 2 To rng.Count With Workbooks("予定表.xlsx").Sheets(i - 1).Range("C9:BT52") .Replace r(i, -3), r(i, -2), 2 .Replace r(i, -1), r(i, 0), 2 r.Value = .Parent.Name '<- ★ End With Next End Sub ( seiya) 2017/07/23(日) 15:23
訂正
上記の
For i = 2 To rng.Count は For i = 2 To r.Count の間違いです。 ( seiya) 2017/07/23(日) 15:24
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.