質問番号:1419196732
置換対象が同一列にあってうまく置換できません。
今、画像のようにデータが並んでおりまして。北東→南東
北西→南西
南東→北東
南西→北西
南→北
北→南
東→西
西→東と、置換したいのですが。
例えば、普通に北東を南東に置換した
場合、既に北東であったものは南東になりますが。
次に南東を北東に置換しようとした際、最初から南東であったものだけでなく、置換処理を行った後の南東も、北東になってしまうという状況でして。何とか、同時に一気に置換できるような関数やマクロはないでしょうか。
あるいは、置換処理を行ったものについては、置換対象にしないような工夫というのでしょうか。
サンプルファイルはこちら http://xfs.jp/sBZskc に置きました。
よろしくお願い致します。
回答1 VBAで変換(シート1に記述)
Option Explicit Sub main() Dim lp As Long ' カウンタ Dim RowCount As Long ' 最終行 RowCount = Range("A" & Rows.Count).End(xlUp).Row For lp = 1 To RowCount If Range("A" & lp) <> "" Then Select Case Range("A" & lp) Case "北" Range("B" & lp) = "南" Case "南" Range("B" & lp) = "北" Case "東" Range("B" & lp) = "西" Case "西" Range("B" & lp) = "東" Case "北西" Range("B" & lp) = "南西" Case "北東" Range("B" & lp) = "南東" Case "南西" Range("B" & lp) = "北西" Case "南東" Range("B" & lp) = "北東" End Select End If Next lp End Sub
回答2 ユーザー関数で変換(標準モジュールに記述)
Function ChangeDirection(Direction As String) As String Select Case Left(Direction, 1) Case "北" ChangeDirection = Replace(Direction, "北", "南") Case "南" ChangeDirection = Replace(Direction, "南", "北") Case "東" ChangeDirection = Replace(Direction, "東", "西") Case "西" ChangeDirection = Replace(Direction, "西", "東") End Select End Function
回答2' 回答2で作ったユーザー関数を用いてVBAで変換
Option Explicit Sub main() Dim lp As Long ' カウンタ Dim RowCount As Long ' 最終行 RowCount = Range("A" & Rows.Count).End(xlUp).Row For lp = 1 To RowCount If Range("A" & lp) <> "" Then Range("B" & lp) = ChangeDirection(Range("A" & lp)) End If Next lp End Sub
(ChangeDirection関数はシート1、標準モジュールどちらに記述しても可)
回答3 エクセル関数で変換
=IF(A2="","",IF(LEN(A2)=2,IF(A2="北西","南西",IF(A2="北東","南東",IF(A2="南西","北西","北東"))),IF(A2="北","南",IF(A2="南","北",IF(A2="東","西","東")))))
(以下B列にコピー)