• ベストアンサー

EXCELで条件により文字列を変化させる関数

EXCELで条件により文字列を変化させる関数を使いたいのですが、うまくいかないのでアドバイスをください。 気温情報を毎日インターネットから得て加工したいのです。 具体的には、 高い北海道 変わらず京都 低い東京 などのような、気温+地名からなる文字列が得られるのですが、これらの文字列から、「高い」「変わらず」「低い」といった部分だけを消して、地名だけを残したいのです。 「高い」「変わらず」「低い」のどれが表示されるかは日によって異なるので、どれが出てもそれらを消せるような関数を作りたいのです。 たとえば、A1セルに、「高い東京」「変わらず東京」「低い東京」 のどれが入っても、結果として「東京」だけ残るようにしたければどのような関数にすればよいのでしょうか? IF関数を複数使うんだろうとは思うのですが、素人なので手が出ません。どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

Ifは使いませんが・・・置換えています。 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"高い",""),"変わらず",""),"低い","")

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

例えば、   「東 京」のように文字間にスペースがあったり、なかったり   「北海道は高いが、京都は変わらず」のような変則的なデータ などへの対応を考えれば、この手の問題は VBA + RegExp を使った方が 手っ取り早いかも。 標準モジュールに下記コードを貼り付けた後、ワークシートのセルに   = GetPref(A1) と数式を入力して下さい。 ' // 都道府県名抽出 Public Function GetPref(ByVal sTarget As String) As String   Const PREF = "(北海道|" _         & "青森|岩手|秋田|宮城|山形|福島|" _         & "東京|神奈川|埼玉|千葉|茨城|栃木|群馬|山梨|" _         & "新潟|長野|" _         & "富山|石川|福井|" _         & "愛知|岐阜|静岡|三重|" _         & "大阪|兵庫|京都|滋賀|奈良|和歌山|" _         & "鳥取|島根|岡山|広島|山口|" _         & "徳島|香川|愛媛|高知|" _         & "福岡|佐賀|長崎|熊本|大分|宮崎|鹿児島|" _         & "沖縄)"   GetPref = GetKeyword(sTarget, PREF) End Function ' // 正規表現パターン sPattern にマッチするキーワードを抽出する ' // 複数マッチした場合はカンマで連結 Public Function GetKeyword( _     ByVal sTarget As String, _     ByVal sPattern As String _ ) As String   Dim MC  As Object ' MatchCollection   Dim m   As Object ' Match   Dim sBuf As String      sTarget = Replace$(sTarget, " ", "")   sTarget = Replace$(sTarget, " ", "")   With CreateObject("VBScript.RegExp")     .Pattern = sPattern     .IgnoreCase = False     .Global = True     Set MC = .Execute(sTarget)   End With   If MC.Count > 0 Then     For Each m In MC       sBuf = sBuf & m.Value & ","     Next m     GetKeyword = Left$(sBuf, Len(sBuf) - 1)   End If   Set MC = Nothing End Function

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 関数ではありませんが、マクロでやれば簡単です。 標準モジュールに登録してください。 最初に、以下の設定範囲の部分を書き換えてください。一列でも、複数列でも可能です。 Private Const PREFECT_LIST = "北海道,青森,岩手,秋田,宮城,山形,福島,新潟,富山,石川,福井,長野,茨城,栃木,群馬,埼玉,千葉,神奈川,山梨,東京,岐阜,静岡,愛知,三重," & _ "滋賀,京都,兵庫,奈良,和歌山,大阪,鳥取,島根,岡山,広島,山口,徳島,香川,愛媛,高知,福岡,佐賀,長崎,熊本,大分,宮崎,鹿児島,沖縄" Private PreFect_Lists As Variant Sub PickupPrefecture() Dim i As Integer Dim buf As String Dim sFind As Variant Dim rng As Range Set rng = Range("A1:A100") '設定範囲 'リストの生成 If Not IsArray(PreFect_Lists) Then Do    buf = Replace(PREFECT_LIST, " ", "", , , vbTextCompare) Loop While i > InStr(buf, " ")  PreFect_Lists = Split(buf, ",") End If Application.ScreenUpdating = False For Each sFind In PreFect_Lists  With rng    .Replace _     What:="*" & sFind & "*", _     Replacement:=sFind, _     LookAt:=xlWhole, _     SearchOrder:=xlByRows End With Next Application.ScreenUpdating = True End Sub

回答No.3

A1セルに"~東京"と入っているとして =IF(LEFT(A1,4)="変わらず",RIGHT(A1,LEN(A1)-4),IF(LEFT(A1,2)="高い",RIGHT(A1,LEN(A1)-2),IF(LEFT(A1,2)="低い",RIGHT(A1,LEN(A1)-2),A1))) これで"変わらず東京"でも"高い東京"でも”低い東京"でも東京になります。 意味としては left(A1,4)は、left関数はA1のセルから左4文字を取る len(A1)は、A1セルの文字列の長さを取得する right(A1,LEN(A1)-4)は、A1セルの右側からA1セルの文字列-4を引いた文字数分だけ抜き出す(4を引くのは"変わらず"の文字数でA1の文字数から"変わらず"の文字数を引いた文字数:この場合残りは2文字で東京) ifは、if(条件式,条件を満たすならこの値が入る,条件を満たさないならこの値が入る) です。 例ではifの関数が入れ子になっていて判りにくいですが、すべて条件を満たさないときは次の条件となってます) かなりわかりにくいけど、応用は効くと思います。

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆いろんな方法があるでしょうが、一例です =REPLACE(A1,1,LOOKUP(10^10,1/(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<10000)*ROW(INDIRECT("1:"&LEN(A1)))),)

関連するQ&A

専門家に質問してみよう