プロが教える店舗&オフィスのセキュリティ対策術

EXCELで条件により文字列を変化させる関数を使いたいのですが、うまくいかないのでアドバイスをください。

気温情報を毎日インターネットから得て加工したいのです。
具体的には、

高い北海道

変わらず京都

低い東京

などのような、気温+地名からなる文字列が得られるのですが、これらの文字列から、「高い」「変わらず」「低い」といった部分だけを消して、地名だけを残したいのです。

「高い」「変わらず」「低い」のどれが表示されるかは日によって異なるので、どれが出てもそれらを消せるような関数を作りたいのです。

たとえば、A1セルに、「高い東京」「変わらず東京」「低い東京」
のどれが入っても、結果として「東京」だけ残るようにしたければどのような関数にすればよいのでしょうか?

IF関数を複数使うんだろうとは思うのですが、素人なので手が出ません。どうかよろしくお願いします。

A 回答 (5件)

Ifは使いませんが・・・置換えています。



=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"高い",""),"変わらず",""),"低い","")
    • good
    • 0

◆いろんな方法があるでしょうが、一例です


=REPLACE(A1,1,LOOKUP(10^10,1/(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<10000)*ROW(INDIRECT("1:"&LEN(A1)))),)
    • good
    • 0

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の関数が入れ子になっていて判りにくいですが、すべて条件を満たさないときは次の条件となってます)
かなりわかりにくいけど、応用は効くと思います。
    • good
    • 0

こんばんは。



関数ではありませんが、マクロでやれば簡単です。
標準モジュールに登録してください。

最初に、以下の設定範囲の部分を書き換えてください。一列でも、複数列でも可能です。

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
    • good
    • 0

例えば、



  「東 京」のように文字間にスペースがあったり、なかったり
  「北海道は高いが、京都は変わらず」のような変則的なデータ

などへの対応を考えれば、この手の問題は 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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!