
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのハイパーリンクについて質...
-
VBA 別ブックからコピペしたい...
-
【マクロ】違うフォルダにある...
-
VBで配列の差分を取りたいのですが
-
VBS Bookを閉じるコード
-
エクセルマクロで、他ブックか...
-
エクセルVBAが途中で止まります
-
【Excel VBA】表の列の値毎に分...
-
配列に使うArry関数について
-
VBA同じシートの別ブックに転記...
-
ACCESSVBA からExcelの他ブック...
-
excel2007のマクロに関して
-
複数ブックを別のブックのひと...
-
VBAで別ブックのシートを指定し...
-
エクセルマクロで任意のファイ...
-
別ブックをダイアログボックス...
-
Excel2013 ウインドウサイズの固定
-
ACCESSでExcelにデータ出力、高...
-
【ExcelVBA】インデックスが有...
-
vbaでvbaProjectのパスワード解...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
【ExcelVBA】zip圧縮されたCSV...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】インデックスが有...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
vbaで他のブックに転記したい。...
-
エクセルマクロで、他ブックか...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
【マクロ】違うフォルダにある...
おすすめ情報