- ベストアンサー
エクセルのセルの中の任意の文字を別のセルに移動
エクセルのセルの文字列の中の、(1)~(12)の文字だけ、一つ左のセルに抜き出す数式やマクロはありませんか? 具体的には、「NTTドコモ (1)月分電話料」のように、大体「月分」という文字の前に(1)~(12)の文字がある状況ですが、全てが同じような形式で入力されているわけではなく、「(2)月分新聞代」のように、先頭から始まっているようなものもあります。移動後は、「NTTドコモ 月分電話料」になり、抜き出した文字列を一つ左のセルに持っていきたいというものです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
=MID(A1,FIND("(",A1),FIND(")",A1)-FIND("(",A1)+1)
その他の回答 (5)
- HohoPapa
- ベストアンサー率65% (455/693)
添付のように過酷(イジワル)な文字列があるのなら VBAで泥臭く書かないと実現できないだろうと思います。 A1=MyPicup2(C1) B1=MyPicup1(C1) Option Explicit Function MyPicup1(inRange As Range) As String Dim wkCnt1 As Long Dim wkTexti As String Dim wkTextk As String Dim KeyText As String Dim RowCnt As Long With ThisWorkbook.Sheets(1) wkTexti = inRange.Text For wkCnt1 = 1 To 12 KeyText = "(" & Format(wkCnt1, "0") & ")" Do If InStr(wkTexti, KeyText) = 0 Then Exit Do wkTexti = Replace(wkTexti, KeyText, "") Loop Next wkCnt1 End With MyPicup1 = wkTexti End Function Function MyPicup2(inRange As Range) As String Dim wkCnt1 As Long Dim wkTexti As String Dim wkTextk As String Dim KeyText As String Dim RowCnt As Long With ThisWorkbook.Sheets(1) wkTexti = inRange.Text For wkCnt1 = 1 To 12 KeyText = "(" & Format(wkCnt1, "0") & ")" Do If InStr(wkTexti, KeyText) = 0 Then Exit Do MyPicup2 = MyPicup2 & KeyText wkTexti = Replace(wkTexti, KeyText, "") Loop Next wkCnt1 End With End Function
- imogasi
- ベストアンサー率27% (4737/17069)
ユーザー定義関数で、その1セルの中の「半角の括弧内の文字列を削除」する、でよければ 例データ A1 aaaa(bbbb)ccc A2 vvg(bgh)mma A3 NTTドコモ (1)月分電話料 標準モジュールに Function aaa(a As Range) p1 = InStr(a, "(") 'MsgBox p1 p2 = InStr(a, ")") 'MsgBox p2 aaa = Replace(a, Mid(a, p1, p2 - p1 + 1), "") End Function 結果 aaaaccc vvgmma NTTドコモ 月分電話料 ーーー 使い方は 結果を出すセルに =aaa(A1) と、式を入れて下方向に式を複写する。普通の関数の使い方と類似。 ーー aaaという関数の名前は手抜きだが、適当な名前に変えることができる。 ワンペアだけの()の中と()を抹消するもの。 1セルの文字列の中の、複数の()内を抹消するのはコードの修正が必要。
- ll_gonnzou_ll
- ベストアンサー率18% (24/129)
タブ区切りのテキストファイルで保存し直してテキストファイルを展開する時に 各文字をセル分けして展開することは出来るけど マクロや関数がいいのかな??
- mt2015
- ベストアンサー率49% (258/524)
- aokii
- ベストアンサー率23% (5210/22062)
(,),0,1,2,...9の各数字と括弧をブランクに置き換える式(SUBSTITUTE関数)ではいかがでしょう。