Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
指定した列の文字を変換させたい
投稿日時: 20/06/12 19:43:20
投稿者: ザックん

はしめまして、お世話になります。
 
指定した列の文字を変換させたいのですが、変換する文字がタイ語でして?????になってしまいます。
 
文字列でなく、セルの範囲で指定したいのですがどのようなマクロを作成すればよろしいのでしょうか。
 
シートの全体に表記される文字を変換させたいです。
 
同じシートの中に、変換前の文字と(X1〜30)、変換させたい文字(タイ語)(Y1〜)は対で置いてあります。
 
宜しくお願い致し致します。

回答
投稿日時: 20/06/12 19:57:11
投稿者: simple

VBE(Editor)はユニコード非対応なので、コード中にタイ語を入力しても
文字化けします。それはそういうものです。
  
(1)まず、ひとつの組について置換処理を、マクロ記録して下さい。
(2)そして、記録されたReplaceメソッドについて、
 ・What 引数と
 ・Replacement 引数に対して、
   セルの値をセットする形のコードに修正してみてください。
(3)あとは、繰り返しに持ち込めばよいでしょう。
  
一度トライしてみて下さい。不明点があれば、途中段階を示して、再質問して下さい。

投稿日時: 20/06/13 12:42:23
投稿者: ザックん

ご回答ありがとうございます。
素人なものですみません。
何か不足があるのでしょうか。
そもそも文が滅茶苦茶ですか?
エラーメッセージが出てしまいます。
 
Sub 文字変換3()
         
     Dim myRange As Range
    Dim keyWord1 As String, keyWord2 As String
    Dim bool As Boolean
      
    Set myRange = Range("A1:L100")
    keyWord1 = Range("X1:X100")
    keyWord2 = Range("Y1:Y100")
     
    bool = myRange.Replace(keyWord1, keyWord2, LookAt:=xlWhole)
     
 
    
End Sub

回答
投稿日時: 20/06/13 14:40:09
投稿者: simple

書き方の一例です。参考にしてください。
 

Sub 文字変換()
    Dim myRange As Range
    Dim keyWord1 As Range
    Dim keyWord2 As Range
    Dim k As Long

    Set myRange = Range("A1:L100")
    Set keyWord1 = Range("X1:X100")
    Set keyWord2 = Range("Y1:Y100")
    For k = 1 To 100
        myRange.Replace keyWord1(k), keyWord2(k), LookAt:=xlPart
    Next
End Sub

 
なお、
LookAt:=xlWhole
とされていましたが、それだと、セルがまるごと検索語と一致しないと
マッチの対象になりません(完全一致)。
文章のなかに一部でも文字が一致すれば置換するのだろうと想像し(部分一致)、
LookAt:=xlPart
としています。適宜選択してください。

投稿日時: 20/06/13 16:16:13
投稿者: ザックん

お世話になっております。
 
ありがとうございます。
 
表記できました!