• ベストアンサー

文字列からアルファベットを抽出

EXCEL2007を使用致しております。 下記のように不規則な文字列から英字(全角・半角)を抽出する方法をご教示願えましたら幸いです。かなり無理が有るでしょうか… どうぞ宜しくお願い致します。 かきくけこkakikukeko さしすせそsashisusesoたちつてと naninunenoなにぬねの 【はひふへほ】hahihuheho mamimumemo《まみむめも》 YAYUAOやゆよ 『らりるれろ』rarirureroわをん1230

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

またまたお邪魔します。 [ ] やスペースが邪魔のようですので・・・ 考え方としてはアルファベットを抽出前に「[ ]」を削除したデータを利用するか、 「[ ]」を抽出後に削除するかのどちらかだと思います。 とりあえず、前者の方法で作業用の列としてC列を使っています。 尚、抽出時に「スペース」は抽出しないでアルファベット・スペース以外の文字が出るまでループを繰り返すようにしていますので、 仮に「Aiueo kakikukeko」のような場合でもスペースがなくなり「AiueoKakikukeko」となってしまいます。 Sub test() Dim i, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 3) = WorksheetFunction.Substitute _ (WorksheetFunction.Substitute(Cells(i, 1), "]", ""), "[", "") For k = 1 To Len(Cells(i, 3)) str = Mid(Cells(i, 3), k, 1) If str Like "[A-z,A-z]" Then buf = buf & str End If If Len(buf) > 0 And Not str Like "[A-z,A-z, ]" Then Exit For Next k Cells(i, 2) = buf buf = "" Next i Columns(3).ClearContents End Sub こんな感じではどうでしょうか?m(__)m

mkoiuhbn
質問者

お礼

ご丁寧に何度も教えて頂き、ありがとうございます。 作業がかなり楽になりました。本当に便利なものですね! 自分でもVBEを書けるように勉強したいと思いますが、道のりは遠そうです^^; 使っていて不具合が2箇所ほどあったので、更に更に厚かましいですがご教示頂けましたら幸いです。 別スレ同タイトルにて質問させて頂きました。お時間がございます時で結構ですのでご教示頂けましたら幸いです。宜しくお願いいたします。

その他の回答 (7)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

No.5です。 >最初に出てくる一固まりの英字だけを抽出・・・ とありましたので、再び顔を出しました。 ↓のようなコードではどうでしょうか? Sub test() Dim i, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For k = 1 To Len(Cells(i, 1)) str = Mid(Cells(i, 1), k, 1) If str Like "[A-z,A-z]" Then buf = buf & str End If If Len(buf) > 0 And Not str Like "[A-z,A-z]" Then Exit For Next k Cells(i, 2) = buf buf = "" Next i End Sub お役に立てれば良いのですが・・・m(__)m

mkoiuhbn
質問者

お礼

ご教示くださりありがとうございます。 "[" や "]" が英字と共に抽出されてしまいますがほぼ完璧です^^ 「かきくkakiku kekoけこ」のデータで「kakikukeko」も抽出したかったので"[A-z,A-z, , ]"と書き足したら「kakikukeko」と抽出してくれました。しかし「 かきくkakiku kekoけこ」の場合も「 kakikukeko」となるので前のスペースは消したいところです。 上記のような不備は今のところスルーできますが、お暇が有ればまたご教示頂ければ助かります。厚かましいお願いですがほんとにお暇な時にお願いできれば幸いです。それまでは自分で試行錯誤してみたいと思います^^ データ整理に時間を取られ非常に困っておりましたが、今後がとても楽になれると思い感謝の気持ちでいっぱいです。ありがとうございました。上記の"["やスペースのご教示も頂けることを期待して暫く〆ずに待たせて頂きます事をご了承願いますm(_ _)m

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 英字部分が一纏まりになっていれば、次の関数で自動的に抽出させる事が出来ます。  純粋な関数(配列数式ではない)なので、入力後のマクロボタン操作や、Ctrl+Shift+Enterキー操作は不要です。  但し、Excel2007よりも前のバージョンのExcelに対しては非対応です。(質問者様のExcelはExcel2007という事ですから、対応しています) ※以下の例は、元の文字列がA1セルに存在している場合の関数です。 =IF(EXACT(UPPER(A1),LOWER(A1)),"",MID(A1,SUMPRODUCT(ROW(OFFSET(INDIRECT("Z1"),,,LEN(A1)))*ISNUMBER(FIND(MID(LOWER(ASC(A1)),ROW(OFFSET(INDIRECT("Z1"),,,LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))*ISERROR(FIND(MID(" "&LOWER(ASC(A1)),ROW(OFFSET(INDIRECT("Z1"),,,LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))),SUMPRODUCT(ISNUMBER(FIND(MID(LOWER(ASC(A1)),ROW(OFFSET(INDIRECT("Z1"),,,LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz"))*1)))

mkoiuhbn
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 ご教示頂きましたコードを試しましたが、何故か英字を抽出する行と、数字やカタカナを抽出してしまう行が出来てしまいます。 提示させて頂いたsampleに問題が有ったのでしょうか… 今回はtom04さんにご教示頂いたVBEを使わせて頂きましたが、お忙しいなかご教示くださりありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! VBAになってしまいます。一例です。 一文字ずつ舐めるように検索する方法です。 データはA1セルからあり、B1セル以降に表示するとします。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row '↑A1セルからとしていますので、データがA2セル以降にあれば、For i = 2 To ・・・に変更 For k = 1 To Len(Cells(i, 1)) str = Mid(Cells(i, 1), k, 1) If str Like "[A-Z]" Or str Like "[a-z]" Or str Like "[A-Z]" Or str Like "[a-z]" Then buf = buf & str End If Next k Cells(i, 2) = buf buf = "" Next i End Sub 'この行まで こんな感じではどうでしょか?m(__)m

mkoiuhbn
質問者

お礼

お礼が遅くなってしまい申し訳ございません。 年度末の多忙でアクセス出来ずにおりました。 多くのご教示を沢山の皆様から頂戴し感謝致しております。 この場をお借り致しましてお礼申し上げます。 頂戴したsampleソースを全部試してみたところ、tom04様のVBEが一番理想の形でしたので、このソースを使わせて頂きたいと思います。 一点だけ補正が出来れば完璧なので、ご教示願えれば幸いです。お忙しいとは思いますが宜しくお願い致します。 あいうえおaiueoかきくけこkakikukekoさsa 上記のような場合に「aiueo」だけを抽出するにはどのように描き足したらよいでしょうか?(最初に出てくる一固まりの英字だけを抽出)何卒よろしくお願い致します。

回答No.4

#3です。 あわてて計算し忘れたまま載せてしまいました A7セルの場合で =MID(A7,MIN(SEARCH({"a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z"}, ASC(A7)&"abcdefghijklmnopqrstuvwxyz")), SUM((MID(A7,ROW(A$1:INDEX(A:A,LEN(A7))),1)>="a") *(MID(A7,ROW(A$1:INDEX(A:A,LEN(A7))),1)<="z"))) [Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる) サンプルは 変換できました

mkoiuhbn
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 ご教示頂きましたコードを試しましたが、何故か英字を抽出する行と、数字やカタカナを抽出してしまう行が出来てしまいます。 提示させて頂いたsampleに問題が有ったのでしょうか… 今回はtom04さんにご教示頂いたVBEを使わせて頂きましたが、お忙しいなかご教示くださりありがとうございました。

回答No.3

英字がひとまとまりなら =MID(A7,MIN(SEARCH($F$8:$F$33,ASC(A7)&"abcdefghijklmnopqrstuvwxyz")), SUM((MID(A7,ROW(A$1:INDEX(A:A,LEN(A7))),1)>="a") *(MID(A7,ROW(A$1:INDEX(A:A,LEN(A7))),1)<="z"))) [Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

関数で表示させるなら以下のような配列数式になります。 =MID(A1,MIN(IF((CODE(MID(ASC(A1&REPT(" ",99)),ROW($A$1:$A$99),1))>64)*(CODE(MID(ASC(A1&REPT(" ",99)),ROW($A$1:$A$99),1))<123),ROW($A$1:$A$99),"")),SUM((CODE(MID(ASC(A1&REPT(" ",99)),ROW($A$1:$A$99),1))>64)*(CODE(MID(ASC(A1&REPT(" ",99)),ROW($A$1:$A$99),1))<123))) 配列数式ですので、入力後Ctrl+Shift+Enterで確定してください。

mkoiuhbn
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 ご教示頂きましたコードを試しましたが、何故か英字を抽出する行と、数字やカタカナを抽出してしまう行が出来てしまいます。 提示させて頂いたsampleに問題が有ったのでしょうか… 今回はtom04さんにご教示頂いたVBEを使わせて頂きましたが、お忙しいなかご教示くださりありがとうございました。 ..

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

下記でどうでしょう。 --- Sub test() Dim objRE As Object Dim objMData As Object Dim objMatch As Object Dim strPattern As String Dim strMsg As String Dim rngR As Range Set objRE = CreateObject("VBScript.RegExp") strPattern = "[a-za-z]" '半角a-z全角a-z With objRE .Pattern = strPattern '検索パターン .IgnoreCase = True '大文字と小文字を区別しない .Global = True '全体を検索 strMsg = "" For Each rngR In ActiveSheet.UsedRange Set objMData = .Execute(rngR.Value) For Each objMatch In objMData strMsg = strMsg & objMatch.Value Next objMatch Set objMData = Nothing Next rngR MsgBox strMsg End With Set objRE = Nothing End Sub

mkoiuhbn
質問者

お礼

お礼が遅くなり申し訳ございませんでした。 ご教示頂きましたコードを試しましたが、何故か真っ白画面で動かなくなってしまいます。 今回はtom04さんにご教示頂いたVBEを使わせて頂きますが、お忙しいなかご教示くださりありがとうございました。

関連するQ&A

  • Excelアルファベット文字列だけ一括抽出マクロ

    いつもお世話になっております。 Excel2013の A列に、ひらがなカタカナ漢字、英数字、*"「などの記号(半角全角)などが入っている文字列があります。 そこからアルファベットの文字列だけ(数字は不要)を抽出して、結果をBCD・・・列に表示させたいのです(A1からの抽出結果はB1,C1…に表示、A2からの抽出結果はB2, C2…に表示)。 添付の画像ではA2までしか載せていませんが、 実際にはA列には1000くらいエントリーがあり、 それを一括でアルファベットの文字列を抽出したいのです。 ご存じの方、ご教示いただければ幸いですm(_ _)m

  • Excel2010:文字列の表示

    Excel2010で、添付画像のような文字列があるとき、V列に以下のような規則で表示することはできるでしょうか? ■規則 英数字は半角 カタカナは全角 スペースは全角 ハイフンは半角 ハイフン以外の記号は全角 それ以外は全角 自分としては、難しいのでたいしたお礼は言えないと思いますがよろしくお願いします。 回答よろしくお願いします。

  • 1列のみ重複しているデータを抽出&削除

    A列   B列 12345 あいうえお 67891 かきくけこ 12345 さしすせそ 67891 かきくけこ 23456 あいうえお 78912 たちつてと 34567 さしすせそ 89123 あいうえお 12345 あいうえお 78912 なにぬねの     ↓ A列   B列 12345 あいうえお 67891 かきくけこ 67891 かきくけこ 12345 あいうえお 上記のようにA列のみダブっているものを抽出し一つにしたいのですが やり方がわかりません。よろしくお願いします。

  • 文字数を越えた文字列を削除するには?

    いつもお世話になっております。また行き詰ってしまいました。 ご助言頂きたくお願い致します。 A列とB列にデータが入っていて、B列には2つのパターンの文字が入っています。 一つは、前の10文字が必ず半角(英字+9ケタの数字)その後は全角のスペースの後に 全角の文字が並びます。(全角の文字数は不規則) 例1:A123456789 あいうえおかきくけこさしすせそ もう一つは頭からすべて全角文字 例2:あいうえおかきくけこさしすせそたちつてと 問題になっている部分は、このB列に入っているデータを頭から 全角15文字以内、半角なら30文字以内に収める という所です。 例1だと、 A123456789 あいうえおかきくけこさしすせそ →A123456789 あいうえおかきくけ(半角10文字+全角10文字) 例2だと あいうえおかきくけこさしすせそたちつてと →あいうえおかきくけこさしすせそ(全角15文字) 下記のようなマクロを作ってみたのですが2つのパターンに対応する為にはどうすればよいでしょうか? Const col1 As String = "B" Dim idx1 As Long Dim myStr1 As String With ActiveSheet For idx1 = .Cells(65536, col1).End(xlUp).Row To 1 Step -1 myStr1 = Cells(idx1, "B") If .Cells(idx1, "B").Value = "" Then Else Cells(idx1, "B") = Left(myStr1, 15) End If Next idx1 End With 以上、宜しくお願い致します。 環境:windowsXP Excel2003

  • エクセル セルをそれぞれ分ける方法

    一つのセルに、 4154あいうえお商事 4654かきくけこ建設 53123さしすせそ(株) 3234たちつてと有限会社 8746なにぬねの 6546はひふへほ商事 8674まみむめも電気 864やゆよ商事 554らりるれろ板金 と入力されているのを      ↓ 4154   あいうえお商事 4654   かきくけこ建設 53123   さしすせそ(株) 3234   たちつてと有限会社 8746   なにぬねの 6546   はひふへほ商事 8674   まみむめも電気 864   やゆよ商事 554   らりるれろ板金 二つのセルにそれぞれ分ける方法を教えてください。

  • Excelの文字数が決まっていない文字列の抽出

    教えてください。Excelで、文字数の決まっていない文字列を抽出したいのですが、例えば、 セルA1 : プロジェクト1 簡単な文章 2352 PD_JOK セルA2 : プロジェクト13 複雑な文章列とは決まっていない 2453 AO_JKI ・・・・・・ というセルから、 プロジェクト名から、半角数字前までの文字数が決まっていない文字列「簡単な文章」や「複雑な文章~」をセルB列に抽出する方法を教えていただきたいのですが、 そして、半角数字後の半角英字「PD_JOK」をセルC列に抽出する方法も同時に教えてください。 万単位でデータがあるので、関数を使わないと難しいです。 よろしくお願い致します。

  • 文字列から全角スペースを目安に文字列抽出

    いつもお世話になっております。 actionscript3.0にてサイト制作を行なっています。 例えば、下記の様な文字列を外部ファイルから読み込んだ際に、 全角スペースから前の『12/17 今日のブログ記事』の文字列のみを 抽出したいと考えております。 【12/17 今日のブログ記事 昨日のブログ記事】 全角スペースを境にして文字列を分割し、全角スペースから前の 部分だけを抽出するにはどのように処理すれば良いでしょうか? 何卒宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 半角全角文字が混ざった文字列の分割

    半角と全角があ混ざった文字列があります。 "202号室:あいうえおかきくけこさしすせそたちつてと" これを半分に切りたいのです。 "202号室:あいうえおかきく" "けこさしすせそたちつてと" ↑この場合、202が半角であること。半分としたときに、 最後の'く'という文字がかけてしまわないことが条件なのです。 どなたかわかる方お教えください。。。

    • ベストアンサー
    • Java
  • データベースの抽出

    ファイル名|サイズ|種類 あいうえお|123456|単行本 かきくけこ|134679|雑誌 さしすせそ|235689|単行本 たちつてと|124578|画集 なにぬねの|164973|参考書 はひふへほ|437619|雑誌 まみむめも|194376|単行本 このようなデータがあったときに「種類」が「単行本」の行だけを別のシートに表示したい場合はどのようにすればよろしいでしょうか?

  • html初心者です

    htmlを使って自分用のメモをとっているんですが、 下のように あいうえお  たちつてと  まみむめも かきくけこ  なにぬねの  やゆよ さしすせそ  はひふへほ  らりるれろ ページを横に何分割かにして、 縦に長い文章でもスクロールせずに1ページに表示できるようにしたいんです。 表示すると縦の行がずれてますが、あ~50音に進んでいくこととして 縦の行はそろえたいです。 わかる方教えてください。

    • ベストアンサー
    • HTML

専門家に質問してみよう