• ベストアンサー

Excelにて、カタカナだけのセルを抜き出す方法は?

Excelファイルにおいて、複数のワークシートにランダムに文字列が入力されている状態です。 ランダムといっても入力されている範囲はある程度限られていますが、定型ではありません。 このような状態から、カタカナのみの文字列が入力されているセルの文字列を抽出し、新たなワークシートに出力する方法はありますでしょうか? 抽出した文字は、新しいワークシートに1列に並べたいのです。 良い方法がありましたらお教え下さい。 よろしくお願いいたします。

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.3

#2の補足を、他人ですが回答させていただきます。 > If chk >= 9506 And chk <= 9587 Then 私も確認したのですが、全角カタカナは、-32438(濁点)、-32437(半濁点)、-32421(長音「-」)、-31936(ァ)~-31853(ン)(ただし、-31873は「・」です)の範囲にわたっています。 また、半角カタカナですが、177からではなく166からです(ヲとァ(小さいア)~ー)。また、221まででなく223までです。(222が濁点、223が半濁点) また、#2さんのマクロの例では、各セルの先頭の文字しか確認していないようですので、 > chk = Asc(chk_str) > If chk >= 177 And chk <= 221 Then の部分は Dim StrChk As Boolean StrChk = True For n# = 1 To Len(chk_str) If Asc(Mid(chk_str, i, 1)) < 166 Or 224 < Asc(Mid(chk_str, i, 1)) Then '面倒なので全角カナの条件は書いていません。上を参照にして下さい。 StrChk = False Exit For End If Next i If StrChk = True Then (chk_strを新シートへコピーする処理) とした方がよいでしょう。 上のルーチンは、あるセルの値(chk_str)を先頭から一文字ずつ取り出し、カタカナでない文字を発見した時点でStrChkフラグをFalseにします。全ての文字がカタカナであった場合のみコピー処理をするというものです。 > Worksheets(LS_N).Cells(rr, 1).Value = chk_str LS_Nが、新シートを挿入する前の末尾のシート名を格納しているからじゃないでしょうか? ここは、 Worksheets(S_C+1)でいいのではないでしょうか? 申し訳ないですが、上のコードは全く動かしていないので、間違っているかもしれません。違っていたら補足で報告いただければ時間を割いて検証しますよ。

ochiyan707
質問者

お礼

ありがとうございます。 おかげさまでうまくいきました。 完成形は以下のとおりです。 Sub test() S_C = ActiveWorkbook.Sheets.Count LS_N = Sheets(S_C).Name rr = 1 Set NewSheet = Sheets.Add(After:=ActiveWorkbook.Sheets(LS_N), Type:=xlWorksheet) For i = 1 To S_C EndRow = Worksheets(i).UsedRange.Rows.Count + Worksheets(i).UsedRange.Row - 1 EndCol = Worksheets(i).UsedRange.Columns.Count + Worksheets(i).UsedRange.Column - 1 For j = 1 To EndCol For k = 1 To EndRow chk_str = Worksheets(i).Cells(k, j).Value If chk_str = Empty Then chk_str = " " End If Dim StrChk As Boolean StrChk = True For n# = 1 To Len(chk_str) If Asc(Mid(chk_str, n#, 1)) < -32438 Or -31853 < Asc(Mid(chk_str, n#, 1)) Then StrChk = False Exit For End If Next n# If StrChk = True Then Worksheets(S_C + 1).Cells(rr, 1).Value = chk_str rr = rr + 1 End If Next k Next j Next i End Sub

その他の回答 (2)

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.2

急いで作成したので半角カタカナ対応です。 またIF文でカタカナを判別しているのでMsgBox文を消し新規シートにその内容を追加するマクロを作ってください。 Sub test() S_C = ActiveWorkbook.Sheets.Count LS_N = Sheets(S_C).Name Set NewSheet = Sheets.Add(After:=ActiveWorkbook.Sheets(LS_N), Type:=xlWorksheet) For i = 1 To S_C EndRow = Worksheets(i).UsedRange.Rows.Count + Worksheets(i).UsedRange.Row - 1 EndCol = Worksheets(i).UsedRange.Columns.Count + Worksheets(i).UsedRange.Column - 1 For j = 1 To EndCol For k = 1 To EndRow chk_str = Worksheets(i).Cells(k, j).Value If chk_str = Empty Then chk_str = " " End If chk = Asc(chk_str) If chk >= 177 And chk <= 221 Then MsgBox "行=" & k & " 列=" & j & Chr$(13) & Chr$(13) & "文字列= " & chk_str, , "カタカナ" End If Next k Next j Next i End Sub

ochiyan707
質問者

補足

ご回答ありがとうございます。 さっそく、試してみたところ、半角カタカナを順番にボックス表示させることはできました。 ところが、文字コードの範囲を全角カタカナの9506~9587に置き換えてみたところ、全角カタカナを拾ってくれません。 If chk >= 9506 And chk <= 9587 Then また、新しいワークシートの左上から縦に順番に書き出したいのですが、以下のようにしてもうまくいきませんでした。 rr=1 ・ ・ Worksheets(LS_N).Cells(rr, 1).Value = chk_str rr = rr + 1 何が問題なのでしょうか? マクロはあまり詳しくないものですから、いろいろとご面倒をおかけしますが、解決方法が分かりましたらお教え下さい。 よろしくお願いいたします。

  • macchan1
  • ベストアンサー率38% (52/136)
回答No.1

例えば関数とオートフィルタを利用するなら以下のような操作をします。 例えばA列にその文字列が入力されている場合、E1セルに以下の式を入力して右方向及び下方向にオートフィルします。 =IF(LEN($A1)<COLUMN(B1),"",CODE(MID($A1,COLUMN(B1),1))) D1セルに以下の数式を入力して下方向にオートフィルし、この列を基準に○をオートフィルタして抽出結果を別シートにコピー貼り付けして下さい。 =IF(SUMPRODUCT((D1:Y1>=9506)*(D1:Y1<=9587))=LEN($A1),"○","")

ochiyan707
質問者

補足

さっそくのご回答ありがとうございます。 関数の部分は非常に参考になりそうです。 ただし、入力範囲の列が1列ではなく、また、途中に空白セルなどもあり、さらにシートが複数にまたがっているのです。 ですので、オートフィルタを用いる方法ですと手間がかかりすぎると思われるのです。 マクロを利用する形でも良いので一括処理できる方法はないでしょうか? 面倒な質問で申し訳ありません。

関連するQ&A

  • セル内からの数字の抽出

    複数のセルがあり、そのセルそれぞれに、 「(文字列A)(数字1) (文字列B)(数字2)」 と入力してあります。(文字列A)と(文字列B)は、定型文字列なので、複数のセルがありますが、同じ文字列が入っています。 一方で、(数字1)(数字2)は、それぞれのセルによって、異なった数字が入っています。 ただし、セルによっては、(文字列A)(数字1)は、入力していないものもあります。 このようなセルが複数ある中から、(数字1)だけを抽出して、セル内に「(数字1)」だけの列を作りたいのですが、何かよい方法はないでしょうか?よろしくお願いします。

  • エクセルでランダムに抽出後、一つのセルにまとめる方法

    エクセル初心者です。 エクセルのシート1に A列の1行目~10行目にA~Jまでの文字が入力されています。 これをシート2の B列の1~100行目に シート1からランダムで抽出した3つ又は4つの文字を ACE DFG ・・・・ のように埋めるには、どのような式を入れればできるのでしょうか? 文字はだぶらないように抽出したいと思います。 文字はCAEのように、順番が逆になっても構いません。 むしろ時々逆になったりするほうが都合がよいです。 抽出される文字数も、3つだけでなく、ランダムで4つ抽出するときも あるようにしたいです。 オフィス2003を使用しています。 ご回答よろしくお願いします。

  • Excel VBA カタカナ セル判定方法

    Excel VBAでA列はカタカナ文字のみ入力したいです。 ボタンを押下する事により、A列でカタカナ以外の文字が入っていたらセルの色を変えたいと思っています。 「アイウエオ」OK 「アイウぇオ」NG 「亜イウエオ」NG 「アイウ_エオ」NG 各セルに入っている文字列を一文字ずつ切り出して判定すればできるような気がしますが、物凄い時間がかかりそうです。これを簡単な方法で実現できないでしょうか?

  • Excel のセルどうしでの循環を避けた参照の方法

    次の方法があれば教えてください。 Excelの同一ワークシートの中にある、または複数のワークシートに存在するセルA,B,C,D,...の間において、任意のセルを選択し、そのセルに任意の数値/文字列を入力した場合、他のセルもその数値を参照するように関連付けたいのですが、これらのセル間で、互いに循環問題を生じないようにするには、どうしたらよいのでしょうか?

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • 【excel2003 vba】指定した文字列が入力されている「セル範囲」の表示方法?

    ◎Sheet1  A B C D E 1○○○-- 2○○○×× 3---×× 4×○--- ※「-」は空白 上記のようにセルに「○」「×」が入力されている「Sheet1」シートがあります。(例として○×の2種類を使っていますが、本当はもっとたくさんの種類の文字列があります。) vbaを使って、以下の一覧表を「List」シートに作成するコードを作成できませんでしょうか? ◎List  A     B 1○     ×  '文字列の種類 2A1:C2  D2:E3 '文字列の範囲  3B4     A4  '同上 【ToDo】 (1)1行目に文字列(○、×)を入力する (2)1行目に入力してある文字列が入力されているすべての「セル範囲」を2行目以降の各列に抽出する。 **1セル内に「○」「×」の両方が入力されているものもある。**  ⇒例えば、A1セルに「○×」と入力されていたら、「Rist」シートのA列B列の両方に「A1」が抽出されるようにしたい。 1セルごとのセル番地(○:A1,A2,B1,…)を一覧化することはできるのですが、同じ文字列をまとめた「範囲」の抽出ができないのです。 どなたかお力添えをお願いできませんでしょうか? 宜しくお願い致します。

  • エクセルで複数のセルをランダムに並べ替えるには?

    複数のセルに文字を入れて、ランダムに並べ替える方法を誰か知りませんか、選択範囲に乱数を発生させるのではなく複数のセルの選択範囲内をランダムに並べ替える方法です 並べ替えを使うと、何かしらの法則に従って並べ替えは出来るんですが、ランダムに並べ替える方法がわかりません  誰か知ってる方、教えてください

  • EXCEL2010で同じ文字列のセルの数を数え・・

    EXCEL2010で一つのワークシート上に様々な文字列が散らばっているとします。 この中でたとえばAAAという文字列が何個あるかを抽出してAAA 1、またBBBという文字列が何個あるかを抽出してBBB 3というように表示させたいのですが、方法をご存じの方、よろしくお願いいたします。VBAを使わずに解決して下さると嬉しいです。 ちなみに、COUNTIFなどの関数は、あらかじめ探したい文字列が分かっている場合には使えますが、本件はそうではなく、ワークシート上にどんな文字列があるのか一目ではわからないくらいたくさんあります。 理想は、その文字列が入っている全てのセルを範囲選択しておいて、何か関数で抽出させ、 AAA 3 ABC 19 BBB 21 DCF 3 などといったリストが作成されることです。 よろしくお願いいたします。

  • エクセルでセルのデータがカタカナかどうか調べたい。

    例えばセルA1の内容を調べるとして、PHONETIC(A1)=A1なら、セルA1の内容はカタカナだと判定していましたが、最近、これでは不十分であることがわかりました。 そこで、セルA1の内容が、全角カタカナかどうかを調べるエクセル関数又はマクロコマンドがあるはずだと信じて探していますが、見つかりません。TYPE関数では、セルの内容が数値か文字列かを調べられますが、その文字列がカタカナか英数字かなどを調べられません。ご存知の方はお教えください。

  • エクセルのセルの値を後ろに追加してまとめる方法

     ブック内に複数のシートがあります。  複数のシートの体裁は同じで、B4:F9の範囲のデータ(文字列)を 同体裁のシートに改行も含んでセル毎にまとめたいのです。範囲内には、空白も多いです。  シートが3つなら、sheet1!B4&sheet2!B4&sheet3!B4の方法でまとめられると思うのですが、シートの枚数が決まっていません。(改行はできてませんが) 良い方法はないでしょうか?

専門家に質問してみよう