今、画像のようにデータが並んでおりまして。
北東→南東
北西→南西
南東→北東
南西→北西
南→北
北→南
東→西
西→東
と、置換したいのですが。
例えば、普通に北東を南東に置換した
場合、既に北東であったものは南東になりますが。
次に南東を北東に置換しようとした際、最初から南東であったものだけでなく、置換処理を行った後の南東も、北東になってしまうという状況でして。
何とか、同時に一気に置換できるような関数やマクロはないでしょうか。
あるいは、置換処理を行ったものについては、置換対象にしないような工夫というのでしょうか。
サンプルファイルはこちら http://xfs.jp/sBZskc に置きました。
よろしくお願い致します。
マクロだったら、あまり難しく考えなくても大丈夫です。
Sub replace_direction() n = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To n v = Sheets("sheet1").Cells(i, 1).Value ' 力技 If v = "北東" Then r = "南東" ElseIf v = "北西" Then r = "南西" ElseIf v = "南東" Then r = "北東" ElseIf v = "南西" Then r = "北西" ElseIf v = "南" Then r = "北" ElseIf v = "北" Then r = "南" ElseIf v = "東" Then r = "西" ElseIf v = "西" Then r = "東" Else r = v ' 念のため End If Sheets("sheet1").Cells(i, 1).Value = r Next End Sub
マクロだったら、あまり難しく考えなくても大丈夫です。
Sub replace_direction() n = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To n v = Sheets("sheet1").Cells(i, 1).Value ' 力技 If v = "北東" Then r = "南東" ElseIf v = "北西" Then r = "南西" ElseIf v = "南東" Then r = "北東" ElseIf v = "南西" Then r = "北西" ElseIf v = "南" Then r = "北" ElseIf v = "北" Then r = "南" ElseIf v = "東" Then r = "西" ElseIf v = "西" Then r = "東" Else r = v ' 念のため End If Sheets("sheet1").Cells(i, 1).Value = r Next End Sub
すごいです、一瞬で変わりました!ありがとうございます。
関数ならVLOOKUP関数ですね。
サンプルファイルを元に説明します。
E2:F9に下記のリストを入力します。
E2: 北東 F2: 南東
E3: 北西 F3: 南西
E4: 南東 F4: 北東
E5: 南西 F5: 北西
E6: 南 F6: 北
E7: 北 F7: 南
E8: 東 F8: 西
E9: 西 F9: 東
B2に下記の数式を入力します。
=IF(A2="","",VLOOKUP(A2,$E$2:$F$9,2,0))
B2の数式をコピーし、B3:B1056に貼り付けます。
B2:B1056を選択、コピーし、A2を選択し、
貼り付けボタンの中から[値]をクリックし値貼り付けします。
「#N/A」が出てきてしまいますね・・・でも発想としてはすごいです!VLOOKUPをこういう風に使うなんて考えもしませんでした!
ありがとうございます。
サンプルファイルで検証した時は大丈夫だったので、
E2:E9のリストにスペースなどが入っているか、
もしくはA列のデータにスペースや別の文字列が入っているようですね。
もし、後者の場合ですと、回答1のマクロを使用した方法の場合、
置換されないままになっているかもしれません。
「#N/A」が出た行を確認された方が良いかも。
高度な文字列書き換えを行いたい場合には、sedをマスターするといいかもしれません。何回も行うとか、一回だけとか、何回目の適合のみ行うとかいろいろ指定できます。
http://www.iplab.cs.tsukuba.ac.jp/script/www.netlab.is.tsukuba.ac.jp/ohori/sed.html
そんなのがあるんですね!独学でマスターするのは難しそうですね・・・。
すごいです、一瞬で変わりました!ありがとうございます。
2014/12/23 02:56:13