エクセルで日本語で書かれているsheet1をsheet2にある英語変換表を用いて英語に変換したいのですが、以下のマクロで実行すると、
例えば「建物」は「Building」になるのですが「建物附属設備」は「Interior Work」に変換されるべきところ「Building付属設備」となってしまいます。
他にも置換リストに同様の参照事項があると、同様に「日本語+英語のミックス」になるのですが
これはどのように改善すればよろしいでしょうか?
マクロは全くの素人で、ネットでこのようなことを書いてくださっている記述をコピペしただけなので、ド初心者にどうぞよろしくご指導ください。m(__)m
Sub 置換() 'この行から
Dim i As Long, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlWhole
Next i
End Sub 'この行まで
No.6ベストアンサー
- 回答日時:
No.2・4です。
ん~~~
何も変化なしですかぁ~~?
こちらではちゃんと置換できたのでそのままコードを記載したのですが・・・
一つ気になるのは、Zongaiさまの補足欄に
>A1に 建物 B1にBuilding
>A2に建物付属設備 B2にInteriorWork
とありますね。
お示しのコードはSheet2の2行目以降のループになっているので
当然1行目は項目行で置換データは2行目以降にあるものだとして投稿しました。
もし1行目から置換データがあるのであれば
前回のコードの変更が必要です。
Sub 置換2()
Dim i As Long, lastRow As Long
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
lastRow = wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS2.Range("A:A").Insert
Range(wS2.Cells(1, "A"), wS2.Cells(lastRow, "A")).Formula = "=LEN(B1)"
wS2.Range("A1").CurrentRegion.Sort key1:=wS2.Range("A1"), order1:=xlDescending, Header:=xlNo
wS2.Range("A:A").Delete
For i = 1 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlPart
Next i
End Sub
こんな感じになると思います。
※ 変更箇所はご自身で確認してみてください。m(_ _)m
tom04さま
ありがとうございます。あれからもう一度まっさらにしてやり直してみたところ、すっきり無事にできました。
出来なかった理由は、ド素人ゆえ、全くわからないのですが、まずは一歩。ありがとうございました。
zongaiさまにも丁寧にフォローしていただき、両方々をベストアンサーにさせていただきたいところですが
tom04さまの記述をそのままコピペして無事にできたことから、zongaiさまには申し訳ありませんがtom04さまをベストアンサーにさせていただきます。ありがとうございました。
No.7
- 回答日時:
ちょっと補足漏れがありましたので訂正。
------------
書かれているものについて、
> wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlWhole
最後の「lookat:=xlWhole」はセルの完全一致で置換するので、
<<Sheet1>>に「建物」は「建物附属設備」という言葉【セルに単独で入っている】のであれば、現状で望んだ通りの結果になるはずです。
<<Sheet1>>に「建物附属設備とは建物の~」と書かれているセルでは全く置換が行われません。
------------
<<Sheet1>> が抜けてました。
zongaiさま
ご丁寧な説明ありがとうございます。
ゆっくり最初から考えてやってみます。
いろんなヒント、ありがとうございました!
m(__)m
No.5
- 回答日時:
Sheet1 と Sheet2 がごちゃごちゃに解釈されてしまってるようなので、
強調して書いてみました。
なお、完全一致で変換するなら「Building付属設備」のような変換はありえません。
これは部分一致です。
このへんの言葉と動作の認識もおかしな感じになっちゃってますね。
----------------------------------
書かれてるコードですが、
<<Sheet1>>の全セルに対して、
<<Sheet2>>の2行目の言葉から順に置換を行っていく、
というもので間違いないですよね?
------------
書かれているものについて、
> wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlWhole
最後の「lookat:=xlWhole」はセルの完全一致で置換するので、
「建物」は「建物附属設備」という言葉【セルに単独で入っている】のであれば、現状で望んだ通りの結果になるはずです。
「建物附属設備とは建物の~」と書かれているセルでは全く置換が行われません。
------------
「lookat:=xlPart」にすると、セルの部分一致で置換します。
<<Sheet1>>
「建物」
「建物附属設備」
「建物附属設備とは建物の~」
と書かれているセルがあるとしたら、
まず、<<Sheet2>>で、より上にある「建物」で変換が行われ
<<Sheet1>>
「Building」
「Building附属設備」
「Building附属設備とはBuildingの~」
となり、<<Sheet2>>で「建物」より下の行にある「建物附属設備」を変換しようにも既にその言葉は存在しない状態になってしまいます。
失敗ですね。
------------
で・・・・
<<Sheet2>>の順番を文字数が長い順番に並び替えると・・・
まず、<<Sheet2>>で順位が上にある「建物附属設備」で変換が行われ
<<Sheet1>>
「建物」
「Interior Work」
「Interior Workとは建物の~」
となり、<<Sheet2>>で「建物附属設備」より下の行にある「建物」が後から変換されるので
<<Sheet1>>
「Building」
「Interior Work」
「Interior WorkとはBuildingの~」
という変換結果になります。
たぶん、コレが望む結果ですよね。
------------
勘違いされておられるようですが、
文字数で判断していません!
文字数は変換の優先度を決めるための順番に並べ替えるためにつかっているだけ。
変換には関わってきません。
「建物」「建物附属設備」「建物附属用品」の言葉があった場合、
文字数が多い順から並べると
<<Sheet2>>
「建物附属設備」
「建物附属用品」
「建物」
の順番になるでしょ?(1番目と2番めは逆になるかもしれないけど、影響なし)
この順番で<<Sheet1>>を変換していくことになります。
------------
こんな説明でどうでしょう。
やることは・・・
①「lookat:=xlPart」にするのと、
②単語データを文字数が多い順に並べ替え。
変換する場合、この並べ替えをしておくのは割とよく使うテクニックです。
No.4
- 回答日時:
No.2です。
今後Sheet2のデータが増えても対応する方法にしてみました。
Sheet2のA列の文字数の降順に並び替えをするコードを加えています。
↓のコードではどうでしょうか?
Sub 置換()
Dim i As Long, lastRow As Long '//←変数の追加★//
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
'//▼ここから追加//
lastRow = wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS2.Range("A:A").Insert
wS2.Range("A1") = "ダミー"
Range(wS2.Cells(2, "A"), wS2.Cells(lastRow, "A")).Formula = "=LEN(B2)"
wS2.Range("A1").CurrentRegion.Sort key1:=wS2.Range("A1"), order1:=xlDescending, Header:=xlYes
wS2.Range("A:A").Delete
'//▲ここまで
For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlPart '//★//
Next i
End Sub
※ マクロを実行するたびに、Sheet2の並び替えを行っていますので、
文字列の長さは気にしなくてよいと思います。m(_ _)m
No.3
- 回答日時:
書かれてるコードですが、
Sheet1の全セルに対して、
Sheet2の2行目の言葉から順に置換を行っていく、
というもので間違いないですよね?
------------
書かれているものについて、
> wS1.Cells.Replace what:=wS2.Cells(i, "A"), replacement:=wS2.Cells(i, "B"), lookat:=xlWhole
最後の「lookat:=xlWhole」はセルの完全一致で置換するので、
「建物」は「建物附属設備」という言葉【セルに単独で入っている】のであれば、現状で望んだ通りの結果になるはずです。
「建物附属設備とは建物の~」と書かれているセルでは全く置換が行われません。
------------
「lookat:=xlPart」にすると、セルの部分一致で置換します。
「建物」
「建物附属設備」
「建物附属設備とは建物の~」
と書かれているセルがあるとしたら、
まず、Sheet2で、より上にあり「建物」で変換が行われ
「Building」
「Building附属設備」
「Building附属設備とはBuildingの~」
となり、それより下の行にある「建物附属設備」を変換しようにも素手にその言葉は存在しない状態になってしまいます。
失敗ですね。
------------
で・・・・
Sheet2の順番を文字数が長い順番に並び替えると・・・
まず、Sheet2で順位が上にある「建物附属設備」で変換が行われ
「建物」
「Interior Work」
「Interior Workとは建物の~」
となり、それより下の行にある「建物」が後から変換されるので
「Building」
「Interior Work」
「Interior WorkとはBuildingの~」
という変換結果になります。
たぶん、コレが望む結果ですよね。
------------
勘違いされておられるようですが、
文字数で判断していません!
文字数は変換の優先度を決めるための順番に並べ替えるためにつかっているだけ。
変換には関わってきません。
「建物」「建物附属設備」「建物附属用品」の言葉があった場合、
文字数が多い順から並べると
「建物附属設備」
「建物附属用品」
「建物」
でしすよね?
この順番で変換していくだけです。
------------
こんな説明でどうでしょう。
やることは・・・
①「lookat:=xlPart」にするのと、
②単語データを文字数が多い順に並べ替え。
変換する場合、この並べ替えをしておくのは割とよく使うテクニックです。
No.2
- 回答日時:
こんにちは!
横からお邪魔します。
コードを拝見すると
>・・・lookat:=xlWhole
となっていますね。
すなわちセル内完全一致の場合のみそのセル全体が置換されます。
というコトは質問文にあるような結果になることはないと思うのですが・・・
もしかしてSheet1のセル内に長文が入っていて、部分一致で置換したいのでしょうかね?
その場合は
>lookat:=xlWhole
を
>lookat:=xlPart
として、
No1さんが仰っているように文字列の長い順に置換すれば問題ないと思います。
※ 同じ文字長であればどちらが先でも構いません。m(_ _)m
No.1
- 回答日時:
Sheet2の順番が、
建物 | Building
建物附属設備 | Interior Work
の順になっているから、
最初にヒットする「建物 | Building」の変換をしちゃうわけです。
なので、手っ取り早く解決するのは、文字数の多い順番に並べ替えること。
建物附属設備 | Interior Work
建物 | Building
これなら、先に「建物附属設備 | Interior Work」とが「建物〇〇 | △△△」を変換し、
どれにも絡まなかった「建物」が「Building」に変換されます。
Sheet2のC列に
[C1]=LEN(A1)
の式を入れて日本語の文字数を取得、全行コピー。
「データ」タブ→並べ替え→C列大きい順
で並べ替えれば望む結果になると思う。
zongaiさま
ご指示ありがとうございます。
文字の長さ、という観点ではなくSheet2のA列のそれぞれのセルと「完全一致するもの」紐づけB列
としたいのですが
これは全く別の角度からの方法になるのでしょうか?・・・
ご指示の方法ですとこの場合はうまくいきそうですが、同じ文字数で違う表記(例えば「建物付属設備」「建物附属用品」など)は同じ長さでも中身が違うと認識できますでしょうか?
何ともど素人なもので、失礼な発言でしたらお許しください!m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ミステリという勿れ11巻に出て...
-
美濃太田駅の近くで24時間あい...
-
幹線道路沿いに住んでいます。...
-
地下設置の給水タンクは違法な...
-
圧縮記帳と積立金
-
日本で一番面積が広い建物は、S...
-
ペントハウスは述べ床面積に入る?
-
事務室の有効採光の計算は?
-
倉庫の採光・換気等の計算
-
平面図の平米と坪の出し方がわ...
-
店舗併用住宅について
-
車寄せ可能な玄関ポーチは床面...
-
外玄関灯(ポーチ)の色
-
排煙に関わる告示
-
排煙計算
-
1/50の排煙計算<1F,2F吹抜け>の...
-
建築基準法28条 居室の採光
-
第一種住居地域にある工場の売却
-
ガレージ・自動車車庫の内装制限
-
建築確認申請の隣地境界線について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ミステリという勿れ11巻に出て...
-
日本で一番面積が広い建物は、S...
-
幹線道路沿いに住んでいます。...
-
美濃太田駅の近くで24時間あい...
-
避雷設備について
-
なぜアメリカの国防省(ペンタ...
-
ポール灯の基礎サイズについて
-
無窓階の窓の数え方
-
物の位置をコロコロ変える人 私...
-
違法建築物?
-
新幹線から見える福山駅付近に...
-
高層ビルに付いてる赤い点滅ランプ
-
避雷針というのがあるとネット...
-
地下設置の給水タンクは違法な...
-
ビル建設用のクレーンはどうや...
-
建物解体のときのおはらい。 ...
-
電気室の防火対象物区分について
-
圧縮記帳と積立金
-
チェックの意味
-
土地家屋調査士
おすすめ情報
tom04さま
ありがとうございます!
そうなのです、コピペした元は「Part」になっていたので、これが原因かと素人なりな(;^ω^)判断でWholeに変えてみたんですけど変わらないのです。
文字数で判断となるとこの先の変換文字を増やしていったときに支障が出る気がするのですね。
たとえば
建物 Building
建物附属設備 Interior Work
が
Building
Building附属設備
なり
【固定資産】 【Fixed Assets】
資産の部合計 Total Assets
が
【Fixed Assets】
Assets合計
になったりするのです。。。。
特段にセルに長い文字を入れたりはしていないのです。。。
やりたいことは
「決算書や試算表の日本語を英語に置き換える」
なのですね。
会計ソフトからエクセルに吐き出すことができるので、それで英語変換ができればとm(__)m
tom04さま
数々ありがとうございます。。。
当方全く素人なので、元のマクロを全部消して、書いていただいたものをコピペしたのですが
現象は変化なかったです。。。(T_T)
全く分からなくて。。。すみません・・・・何を確認していいのすらわからず。。。
お手上げです。。。(T_T)
Zongaiさま
Sheet1の全セルに対して、
Sheet2の2行目の言葉から順に置換を行っていく、
というもので間違いないですよね?
>>>はい、そのとおりです。
「建物」は「建物附属設備」という言葉【セルに単独で入っている】
>>>はい
Sheet2 の
A1に 建物 B1にBuilding
A2に建物付属設備 B2にInteriorWork
という風に入っていて、完全一致の紐づけだけでよいのです・・・
つまり「建物」は「建物付属設備」とは全く別のもの、という認識を持ちたいのです・・・
あまりに私が安易に考えすぎなのか、本当に素人すぎて、ここでおたずねするのもお恥ずかしい限りです・・・
すみません。
tom04さま
ありがとうございます。先ほど書いた補足は事例で、変換コード表は1行目は項目行で
実際のデータは2行目から記載しております。
本当にすいません。ありがとうございます。ちょっとゆっくり考えながらやってみます。
ありがとうございましたm(__)m