• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELで入力した文字を自動的に置換させたいです)

EXCELで入力した文字を自動的に置換させる方法

このQ&Aのポイント
  • 会社の仕事で、決められた英訳に従って部品リストを翻訳しなければならず困っています。350単語の英訳をEXCELで一覧として与えられました。そこで、EXCELで自動翻訳させるマクロを教えてください。
  • シート1のA列に部品名、B列に決められた英訳を入力し、シート2のA列またはC列に部品名が入力されると、自動で訳に置換する方法を教えてほしいです。
  • 例えば、シート1に釦とSWITCH、シート2にヒューズとFUSEが入力されていた場合、シート2で釦を入力すると自動でSWITCHに置換されるようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

あらかじめ対照表を用意してあるのがSheet1(もしちがっていらた下記のコードの"Sheet1"を修正してください。) A列またはC列に部品名を入力するのがSheet2だとします。 1. シート(Sheet2)のタブを右クリックして、[コードの表示]。 2. 出てきた白い所に、以下のコードを貼付けます。 '********これより下********** Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Column <> 1 And Target.Column <> 3 Then Exit Sub   Dim myDic As Object   Dim myW   Dim i As Long, c As Range   Set myDic = CreateObject("Scripting.Dictionary")   With Sheets("Sheet1")     myW = .Range("A1", .Cells(Rows.Count, "B").End(xlUp)).Value   End With   For i = 1 To UBound(myW)     myDic(myW(i, 1)) = myW(i, 2)   Next i   For Each c In Target   If myDic.Exists(c.Value) Then     c.Offset(, 1).Value = myDic(c.Value)   End If   Next c End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 これでOK A、C列以外への入力には反応しません。 Sheet1の対照表は何百行あってもOKです。

net-kappa
質問者

お礼

インターネットの調子が悪く、回答が遅れてすみません>< 初日は私の知識不足で理解するまでに時間がかかってしまったのも事実なので 本当に申し訳ないです。 こちらのマクロは私の要望を全てかなえてくれました。 しかも、こちらは貼り付けるだけでそのまま使えました。 EXCELテクニック集という感じで、こういう使い方ができるんだと感動しました。 本当にありがとうございました。迷うことなくベストアンサーです。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

ANo3, merlionXXです。 No2のお礼に 「このシートに作る方法だとコピー&ペーストで変換されないようなので、時間があったらボタンを作って実行型のマクロを作ってみようかと思います。」 とお書きですが、わたしのコード(ANo3)ではA列とC列は、複数セルへのコピー&ペーストでも大丈夫なように書いてありなす。 まだおためしにはなってないのでしょうか?

net-kappa
質問者

お礼

回答が遅くなってしまい申し訳ありませんでした。 会社のインターネット環境が悪く、ベストアンサーの画面に到達できず。 「参考になった」のボタンがやっとでした(汗 今回を機に自宅にもインターネットを引くことにしました。 早期回答に対し、お礼も遅く、回答していただいた皆様にはご迷惑をお掛けしましたm(_ _)m 本当にありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 シート1をSheet1、シート2をSheet2としています。 (1)Sheet2のシートタブ上で右クリック→コードの表示→以下のコードを貼り付けてシート2のA,C列に入力してみて下さい。    必要ないと思いますが複数セルへの入力も可能としています。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:A")) Is Nothing _ And Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub For Each c In Sheets("Sheet1").Range("A:A") If c.Value = "" Then Exit Sub For Each d In Range(Target.Address) If c.Value = d.Value Then d.Offset(0, 1).Value = c.Offset(0, 1).Value End If Next Next End Sub

net-kappa
質問者

お礼

回答ありがとうございます。 こちらの方法でも問題なく変換されました。 ベストアンサーが複数選べたらこちらにも付けたかったです。 貴重な回答ありがとうございました。

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.2

シート「シート2」のシート名タグを右クリック→コードの表示(V)で表示されるコードエリアに以下のコード貼り付けたらで自動的にできます。 下記コード中、「"シート1"」は予め英訳を載せてあるシートのシート名です。シート名が合致していないと「シート2」へのインプット中にエラーが起きます。その場合は、シート名がコードに一致するよう訂正して下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Double If Target.Count = 1 And Target.Column = 1 Then If Target.Value <> "" Then For r = 1 To Sheets("シート1").Range("A65536").End(xlUp).Row If Sheets("シート1").Cells(r, 1) = Target.Value Then ActiveCell.Offset(-1, 1).Value = Sheets("シート1").Cells(r, 2) '英訳品名自動記入 Exit Sub End If Next r Else ActiveCell.Offset(0, 1).ClearContents 'A列データ消去の時B列データも消去 Exit Sub End If End If End Sub

net-kappa
質問者

お礼

要望通りマクロでの回答ありがとうございます。 会社のエクセルでセルに数式を入れていると、使用者に操作されたときに消されてしまうので こちらの方法に変更させていただきました。 会社で使っているEXCELは2007なのですが、5行目の For r = 1 To Sheets("シート1").Range("A65536").End(xlUp).Row が「複雑すぎて実行できません」とエラーが出てしまったので、とりあえず For r = 1 To 1000 として使用させて頂いています。 本当は上記の方法の方が下方検索として使い勝手は良かったので残念です。 それと、このシートに作る方法だとコピー&ペーストで変換されないようなので、 時間があったらボタンを作って実行型のマクロを作ってみようかと思います。 この度はありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

シート1のA1:B1から、部品名、英訳の一覧があるとする。 シート2のB1、D1に下記の式を入れて下にフィルする。 B1 =IF(A1="","",VLOOKUP(A1,Sheet1!$A$1:$B$3,2,FALSE)) D1 =IF(A1="","",VLOOKUP(C1,Sheet1!$A$1:$B$3,2,FALSE))

net-kappa
質問者

お礼

回答ありがとうございます。 インターネットの調子が悪くて返信が遅くなり申し訳ありません。 マクロを使わなくてもこの方法で英訳を行うことができました。 会社の作業員によって半角/全角がマチマチで全角に統一させてから行うことで 問題なく行うことが出来ました。 他に使っているデータにも流用できそうなので、使わせていただきます。

関連するQ&A