人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

置換対象が同一列にあってうまく置換できません。
今、画像のようにデータが並んでおりまして。

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

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

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

1419196732
●拡大する

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●250ポイント ベストアンサー

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

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

moon-fonduさんのコメント
すごいです、一瞬で変わりました!ありがとうございます。

2 ● gong1971
●50ポイント

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


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

gong1971さんのコメント
サンプルファイルで検証した時は大丈夫だったので、 E2:E9のリストにスペースなどが入っているか、 もしくはA列のデータにスペースや別の文字列が入っているようですね。 もし、後者の場合ですと、回答1のマクロを使用した方法の場合、 置換されないままになっているかもしれません。 「#N/A」が出た行を確認された方が良いかも。

3 ● blue_star22
●5ポイント

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

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


moon-fonduさんのコメント
そんなのがあるんですね!独学でマスターするのは難しそうですね・・・。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ