1419196732 置換対象が同一列にあってうまく置換できません。

今、画像のようにデータが並んでおりまして。

北東→南東
北西→南西
南東→北東
南西→北西
南→北
北→南
東→西
西→東

と、置換したいのですが。
例えば、普通に北東を南東に置換した
場合、既に北東であったものは南東になりますが。
次に南東を北東に置換しようとした際、最初から南東であったものだけでなく、置換処理を行った後の南東も、北東になってしまうという状況でして。

何とか、同時に一気に置換できるような関数やマクロはないでしょうか。
あるいは、置換処理を行ったものについては、置換対象にしないような工夫というのでしょうか。
サンプルファイルはこちら http://xfs.jp/sBZskc に置きました。
よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/12/23 02:56:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント250pt

マクロだったら、あまり難しく考えなくても大丈夫です。

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
id:moon-fondu

すごいです、一瞬で変わりました!ありがとうございます。

2014/12/23 02:56:13

その他の回答2件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント250pt

マクロだったら、あまり難しく考えなくても大丈夫です。

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
id:moon-fondu

すごいです、一瞬で変わりました!ありがとうございます。

2014/12/23 02:56:13
id:gong1971 No.2

回答回数451ベストアンサー獲得回数70

ポイント50pt

関数なら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を選択し、
貼り付けボタンの中から[値]をクリックし値貼り付けします。

id:moon-fondu

「#N/A」が出てきてしまいますね・・・でも発想としてはすごいです!VLOOKUPをこういう風に使うなんて考えもしませんでした!
ありがとうございます。

2014/12/23 02:50:35
id:gong1971

サンプルファイルで検証した時は大丈夫だったので、
E2:E9のリストにスペースなどが入っているか、
もしくはA列のデータにスペースや別の文字列が入っているようですね。

もし、後者の場合ですと、回答1のマクロを使用した方法の場合、
置換されないままになっているかもしれません。
「#N/A」が出た行を確認された方が良いかも。

2014/12/23 07:57:31
id:blue_star22 No.3

回答回数297ベストアンサー獲得回数12

ポイント5pt

高度な文字列書き換えを行いたい場合には、sedをマスターするといいかもしれません。何回も行うとか、一回だけとか、何回目の適合のみ行うとかいろいろ指定できます。

http://www.iplab.cs.tsukuba.ac.jp/script/www.netlab.is.tsukuba.ac.jp/ohori/sed.html

id:moon-fondu

そんなのがあるんですね!独学でマスターするのは難しそうですね・・・。

2014/12/23 02:51:30

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません