EXCEL VBA 単語置き換え について質問です
ブック名 ぶぶぶ
シート名 ししし
セル V3〜V10 本当はV50000
2行目は、見出しA、見出しB、と右方向へAB2セルまであります。
セルの中身 最大300文字
日本語文字英数字で、1セルあたり平均80文字入力既にある状態
ざっくり言って
V列の中に含まれる 特定の文字を指定する文字に置き換えます
置き換え単語は同じブックの別のシートに用意されています
ブック名 ぶぶぶ
シート名 おおお
列A 列B
行1 モモ タコ
行2 ハート ダイヤ
行3 月曜 火曜
行4
この行は1000行 同様にあります
この意味はブック名ぶぶぶ にある
シート名ししし の 列Vにある自由文章の中で 単語モモのあるセルにはタコに置き換えるものです。
置き換えた結果は
列Vを上書きし、
上書きを終えると
ブック名ぶぶぶ
シート名ししし
この人の中身をそっくり複製して
ブック名 ニュー
シート名 新
これで
ブック名ぶぶぶ
が保管された同じフォルダ内に新しいブックとして保存します
行がたくさんありますし
置き換えする単語も上から下に複数ありますし わからなくなりました
VBAのコードを
教えてください
No.3ベストアンサー
- 回答日時:
Sub ReplaceWords()
'ブック「ぶぶぶ」のシート「ししし」の範囲を指定
Dim sourceSheet As Worksheet
Set sourceSheet = Workbooks("ぶぶぶ.xlsm").Worksheets("ししし")
Dim lastRow As Long
lastRow = sourceSheet.Cells(Rows.Count, "V").End(xlUp).Row
Dim sourceRange As Range
Set sourceRange = sourceSheet.Range("V3:V" & lastRow)
'置き換える単語を指定
Dim replaceWords() As String
replaceWords = Array("モモ", "ハート", "月曜") '必要に応じて追加
'置き換える文字列があるセルを特定し、置換する
Dim cell As Range
Dim replaceWord As Variant
For Each cell In sourceRange
For Each replaceWord In replaceWords
If InStr(1, cell.Value, replaceWord) > 0 Then
cell.Value = Replace(cell.Value, replaceWord, GetReplacementWord(replaceWord))
Exit For
End If
Next replaceWord
Next cell
'結果を新しいブックに保存
Dim newBook As Workbook
Set newBook = Workbooks.Add
Dim newSheet As Worksheet
Set newSheet = newBook.Worksheets("Sheet1")
sourceSheet.UsedRange.Copy Destination:=newSheet.Range("A1")
newBook.SaveAs Filename:="ニュー.xlsx" '必要に応じて拡張子を変更
End Sub
Function GetReplacementWord(ByVal word As String) As String
'置き換える単語を、別のシートから取得する関数
Dim replaceSheet As Worksheet
Set replaceSheet = Workbooks("ぶぶぶ.xlsm").Worksheets("おおお")
Dim replaceRange As Range
Set replaceRange = replaceSheet.Range("A1:B" & replaceSheet.Cells(Rows.Count, "A").End(xlUp).Row)
Dim replaceCell As Range
For Each replaceCell In replaceRange.Columns(1).Cells
If replaceCell.Value = word Then
GetReplacementWord = replaceCell.Offset(0, 1).Value
Exit Function
End If
Next replaceCell
End Function
No.2
- 回答日時:
No1です。
>ご回答いただいた文章の意味がマクロの記録ボタンを使って手で1行1行下げていけば
>1000行だけ繰り返せばいいという意味でしょうか
えっと・・・
マクロだけでなく、大抵のいわゆる「プログラミング言語」には、繰り返し処理を行う構文が用意されています。
(代表的なのが、For ~ Next のループです)
基本的には、「検索文字列」と「置換え文字列」を可変(=変数化するという意味)にするなど一般化しておいて、上記のループを利用して必要回数繰り返すような構文を利用すれば、実際に記述するのはほぼ一回分の置換え処理で済むという意味です。
ループは大抵の処理(=マシンで大量のデータを自動処理するなど)で利用されるごく基本的な構文ですので、まずはそちらを学習してください。
覚えておいて損は無いはずです。
(繰り返し構文には、「For~Next」以外にも、「Do~Loop」、「Do~While」、「Do~Until」、「While~Wend」、「For Each~Next」などなど、いろいろな種類が用意されていますので、処理内容に応じて使い分けてください。)
https://learn.microsoft.com/ja-jp/office/vba/lan …
どうやら、その分では、セル範囲をマクロで取得する方法もご存じなさそうですね・・
大抵は、最終行を取得できれば(不確定の)セル範囲を求めることができると思いますので、以下が参考になるのではないでしょうか?
(必ずこの方法とは限りませんけれど・・)
https://www.sejuku.net/blog/28929
No.1
- 回答日時:
こんばんは
>VBAのコードを
>教えてください
一回分の置換えのコードなら、置換の操作を「マクロの記録」で記録すれば得られます。
これを少し修正してセット分繰り返せばよさそうですが、問題があります。
キーワードに包含関係が合ったり、置き換え後の文字列の組み合わせが、新しいキーワードに一致したりと、文字列の内容と処理する順序によって異なる結果になる可能性がありそうだからです。
例えば「~~東京~~」の文章がある時に、
1)「東京」→「東京都」
2)「京都」→「京都府」
のような置き換えを行うと、最初の文字は「~~東京都府~~」となるようなことです。
上記の例は単純ですが、もっと複雑に、置換え文字列と元からある文字が連続する部分でも同様のことが起こり得るので、この辺りをどのように処理するのかを、あらかじめ考えておいた方がよさそうに思われます。
文字の大きさの順番は現在人間が判断して留意することで処理しています
VBA のことをよく知らないですが
おそらく列Vをえらび
コンピューターはシェル V さんにある自由文章を読み込んで
置き換える単語が モモがヒットすれば列vにある単語モモを
すべてタコに置き換えるのでしょう
そして次にコンピューターは同じく列vにある単語ハートがヒットすればダイヤに置き換えるのでしょう
私がわからないのは
単語モモを置き換えた時に
一行下がってハートの単語を列vについて置き換えるところです
ご回答いただいた文章の意味がマクロの記録ボタンを使って手で1行1行下げていけば1000行だけ繰り返せばいいという意味でしょうか
それはしたくないです
該当欄への書き込みありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Excel(エクセル) 複数のExcelブックのシート1の内容を1つのExcelブックにコピー貼り付けたいのでvbaコードを 7 2023/02/10 23:20
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) セルの値と同じ名前のシートのセルの結合を解除する方法を教えてください 3 2022/10/03 10:23
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
【困っています2】VBA 追加処...
-
ワイルドカード「*」を使うとう...
-
ユーザーフォームの切り替えに...
-
vbaでvbaProjectのパスワード解...
-
異なるブック間でのセル範囲の...
-
VBA シート名が一致した場合の...
-
EXCEL VBA 単語置き換え につい...
-
【VBA】全シートの計算式を全て...
-
元データ(ピボッド)を開かずマ...
-
vbaについて 主に以下のような...
-
エクセルのマクロを使ってメー...
-
エクセルのマクロについて教え...
-
ExcelのVBAです。フォルダ内の...
-
VBAで別ブックのシートを指定し...
-
シートをコピーする下記記述で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報