エクセルマクロで日本語を抽出して転記する方法

このQ&Aのポイント
  • エクセルマクロを使用して、単一セル内にあるデータから英文と訳文を抽出し、訳文を隣のセルに転記する方法を教えてください。
  • マクロが組めなければ関数で対応しようと考えましたが、データが多い場合には計算時間がかかるため、マクロでの実装を希望しています。
  • 初心者ですが、簡単なマクロであれば組むことができます。ただし、抽出の部分で問題が発生しています。お力をお借りしてよろしくお願いします。
回答を見る
  • ベストアンサー

エクセルマクロで日本語を抽出して転記する方法

お世話になります。    単一セル内に英文+訳文といったデータがある場合に、同一行の隣のセルに訳文のみ転記するマクロを教えていただきたいのですが。完成形としては、当初のセルに英文のみ、右隣のセルに訳文のみといったものを想定しています。    マクロが組めなければ関数でと考えましたが、データが大量になると自動計算が不可避で(たとえば手動計算にしても保存時等)時間がかかることから、マクロでと考えました。    マクロは初心者ですが、簡単なものでしたら組めますが(今回も、ダブルクリック対応とか、()内の文字列を削除するとかはできました>)、抽出がうまく行きません。    お手数をおかけしますが、よろしくご教示下さい。

  • Yeyen
  • お礼率87% (7/8)

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

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

No.2です。 投稿後もう一度質問文を読み返してみると >完成形としては、当初のセルに英文のみ、右隣のセルに訳文のみといったものを・・・ とありましたので、前回のコードは英字関係のみを抽出するだけでした。 ご希望の方法ではなかったと思いますので、もう一度顔を出しました。 B列に英字関係・C列に日本語を!という感じです。 尚、日本語を抽出するとなるとかなり、条件が多くなってしまいます。 第一水準・第二水準漢字・ひらがな・カタカナ・「ぁぃぅぇぉっゎ」等の促音 「が行・ざ行・・・」等々の濁音などに対応すると大変なので、前回のB列以外をC列にまとめるコードにしてみました。 Sub test() 'この行から Dim i, k As Long Dim str, buf1, buf2 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 0-9 . , ! ? ]" Then buf1 = buf1 & str Else buf2 = buf2 & str End If Next k Cells(i, 2) = buf1 Cells(i, 3) = buf2 buf1 = "" buf2 = "" Next i End Sub 'この行まで これでC列にB列に表示されている文字以外が表示されると思います。 尚、確認の意味で敢えてA列はそのまま残しています。 A列削除は簡単だと思いますので・・・ 何度も失礼しました。m(_ _)m

その他の回答 (4)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

> 私の現状の知識では、悲しいかな、先頭文字か、1文字ずつしか抽出できないのです。 ちょっと、 現在のセルの中身がわからないのですが、たとえば A1セルに This is a pen. これはペンです。 とあるとした場合。 For i = 1 To Len(Range("A1").Value) If AscW(Mid(Range("A1").Value, i, 1)) > AscW("z") Then Eng = Left(Range("A1").Value, i - 1) Jpn = Mid(Range("A1").Value, i, Len(Range("a1").Value)) Exit For End If Next Range("A1").Value = Eng Range("B1").Value = Jpn といった具合でもよろしいと思うのですが…

Yeyen
質問者

お礼

kmetu 様ありがとうございました。 先後してしまいましたが、ご指摘の点で解決に至りました。 ご報告が遅れて申し訳ありませんでした。 機会がありましたら、またよろしくお願いします。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

>単一セル内に英文+訳文といったデータがある 「I am a boy. 私は少年です。」といった具合に,必ず半角で書かれた英文とそれに続いて日本語の訳文が続いているだけの単純な構図なら =LEFT(A1,LEN(A1)*2-LENB(A1)) =RIGHT(A1,LENB(A1)-LEN(A1)) などのようにして関数で切り出すのも容易です(再計算で時間が掛かる?ことは無いと思います)が,入り交じって混在しているのでしたら一文字ずつ舐めていくしかありませんね。 #少しでも具体的なサンプルを挙げてご相談を書いてもらえれば,クイズになることもなくすっきり回答が寄せられます。今後のご参考に。 #まぁ誰が書いても同じようなマクロにしかなりませんが sub macro1()  dim h as range  dim buf1 as string, buf2 as string, buf as string  dim i as long  for each h in range("A1:A" & range("A65536").end(xlup).row)   buf1 = ""   buf2 = ""   for i = 1 to len(h.text)    buf = mid(h.text, i, 1)    if strconv(buf, vbwide) = buf then     buf2 = buf2 & buf    else     buf1 = buf1 & buf    end if   next i   h.offset(0, 1) = buf1   h.offset(0, 2) = buf2  next end sub

Yeyen
質問者

お礼

keithin 様 ありがとうございました。 tim04 様とお二方の回答を参考に解決できました。 tim04 様が時間的に早く、2回も回答していただきましたので、 ベストアンサーにさせていただきました。 機会がありましたら、またよろしくお願いします。

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

こんばんは! VBAでの一例です。 A列の1行目からデータがあり、「英字」「数字」「?」「.」「,」「!」(←すべて半角)及び半角スペースを B列に表示するとします。 一文字ずつ舐めるように検索していますので、少し時間がかかるかもしれません。 画面左下にある操作したい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 For k = 1 To Len(Cells(i, 1)) str = Mid(Cells(i, 1), k, 1) If str Like "[A-z 0-9 . , ! ? ]" Then buf = buf & str End If Next k Cells(i, 2) = buf buf = "" Next i End Sub 'この行まで ※ 尚、他にも表示したい文字があれば If str Like "[A-z 0-9 . , ! ? ]" の部分内で、半角スペースの後に追加すれば大丈夫です 他に良い方法があればごめんなさいね。m(_ _)m

Yeyen
質問者

お礼

tom04 様 ありがとうございました。 参考になりました。 特に、mid の存在をすっかり忘れていました。 ご教示いただいた内容から、 1文字づつなめるのではなく、 正規表現で、単に日本語のFirstindex を Mid の切り出し位置に指定して、 それ以降の文字列を転記という方法にまとめました。 ありがとうございました。 機会がありましたら、またよろしくお願いします。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

英文と訳文に特殊な区切りとかつけていないのでしょうか? つけていれば Splitを利用するとかInStrとRightやMid、Leftなど組み合わせて利用することができます。 また、単純にセルの文字列の文字コードを一文字ずつ調べて(AscW)日本語が出現したところで分割すると言う方法が考えられます。

Yeyen
質問者

お礼

お世話になります。早速のご回答ありがとうございます。 ご指摘の点、当初は空白をターゲットにしてと思ったのですが、 WEBから英作文や単語をコピペしたので、サイトによっては必ずしも空白を設けておらず、 また文とは限らないので「.」もターゲットにできませんでした。 そこで、正規表現を使用するしかないのではと思っているのですが、 パターンを[^\x01-\x7E\xA1-\xDF]" とすれば、何とか日本語は切り出せるのですが、 私の現状の知識では、悲しいかな、先頭文字か、1文字ずつしか抽出できないのです。 現状のご報告としては、参考になりましたでしょうか。

関連するQ&A

  • エクセルのマクロ作成で困ってます

    マクロ初心者です。 ”Sheet1にあるデータについて、複数条件で抽出後、Sheet2の表に転記” という動作をマクロで組みました。 ここまでは良かったのですが、Sheet2に転記する際、下記の様にさらに条件を付加したいと思っています。 やりたいこと(ア) Sheet1で条件によりたとえば10個のデータを抽出できたとし、 1~6個目までは、Sheet2の1行~6行に転記、 7~10個目までは、Sheet2の11行~14行に転記。 ※”6個目まで1~6行に転記”というのは決まっているのですが、  この10個というのは、例であって、5個だったり、14個だったり、  抽出したデータにより異なるので、変数です。 やりたいこと(イ)   Sheet1から、さらに別の条件で抽出したデータを、  やりたいこと(ア)の10個目を転記した行のあとすぐ(例でいうと15行目)から転記したい。  ※やりたいこと(ア)で抽出した条件が6個以下だった場合、11行目から転記。 以上の2つです。 条件の抽出までは出来るのですが、 (ア)の7個目から別のところに転記 (イ)の別の条件で抽出したデータを(ア)の次(6個以下の場合は11行目)から転記 をどうやって組んだら良いかわかりません。 もし分かる方がいらしたら、 どのようなコマンド(?)を使ったら良いのか、 ご教示いただけると助かります。 よろしくお願いします!

  • Excelのマクロ 

    データが入力されている任意のセルでダブルクリックすると、 そのセルから右隣のデータが入力されているセルが全てコピー状態になる。 E1データ有 E2 データ有 E3データ有 E4データ有 E5データ無 E6 データ有 E7 データ有 E8データ無 上の例だと、E2でダブルクリックすると、E2~E4がコピー状態になる。E4でダブルクリックすると、E4だけがコピー状態になる。 以上のことがマクロで可能なら教えて下さい。 よろしくお願いします。

  • EXCELの表からの「抽出」、「転記」

    1.元帳(Sheet8)から転記した「金融機関向け提出資料」(Sheet10)があったので、こ れからまた転記して組単位で「No.」と「氏名」の表(Sheet5)を作りたいので  す。 2. 添付画像「金融機関向け提出資料」(Sheet10)において、9組を例にとると、No.7、No.16、No.17、No.23の、以下続  く。これ等をSheet5の表に抽出していきたいのです。Sheet5の構想は、1行目:組 番号、2行目は項目名:No.(A2)と氏名(B2)、3行目~27行目(25名分)に各  データを 抽出、転記する。一組分の範囲はA1:B27です。 3.組の数は9組ありますが、一組だけその方法を教えて頂ければ結構です。 4.尚、Sheet10のNo.は1~188です。Sheet10のG列に、組番号を転記しています。こ の組番号はSheet10では印刷領域外です。 5. Sheet10からSheet 5に抽出し、転記した最初の人の(1)No.と(2)氏名をオートフィ ルで下にコピーすると、同じ組のNo.と氏名が表示されたら良いのですが・・・。 6.私はマクロが使えません。INDEX関数やMATCH関数は使ったことがあります。 元帳(Sheet8)からINDEX関数で「金融機関向け提出資料」(Sheet10)に転記して います。 7.最初から9組分の表を作成しておいて、そこにデータを順次転記していく方法もあ るのかも知れません。 8.Sheet10の一部を「画像添付」します。 以上ですが、よろしくご指導ください。

  • Excel 2007 データ転記

    Excel 2007 データ転記 Sheet1とSheet2にデータがあります。 Sheet1とSheet2の会社主キーを比較します。 合致した会社主キーについて、Sheet1の姓、名、職種にSheet2のデータを転記したいです。 完成形を含めて画像を添付しました。 どのように解決すればよろしいでしょうか。 マクロ、関数のいずれでもかまいません。 アドバイス頂けますでしょうか。

  • エクセルでデータを抽出し,別シートに転記する方法

    「志望校一覧」というシートに添付ファイルのような書式で約200人のデータが入っています。 これを高校学科別にデータを抽出して書式を変えずに「志望校別」という別のシートに転記したいのですが,何か良いマクロか数式はありますか?実際のデータが入っている行は3行目(A子)から188行までです。並び順は右端のコード順,なおかつ組・番順になると良いのですが…。

  • マクロを使ってテキストを抽出したい?

    エクセルのマクロを使ってテキストを抽出したい? ある1つのCSVデータがあります。エクセルで開いてみるとA列からU列までデータがびっちり入っています。 F列の各セルにはテキストを含むhtmlタグや%%NL%%やスペースなどあります。 質問なのですがF列をテキストだけに変換(抽出)したいです。 そのようなマクロを教えていただけないでしょうか?

  • EXCEL データの抽出と転記

    1.添付ファイル(JPEG)では、Sheet 10とSheet 5を両方表示しています。同じブッ ク内ですが、当然分離しています。 2.やりたいことはSheet 10からデータを抽出してSheet 5に転記することです。   Sheet 5の9組に、その例を表示しました。 3.Sheet 5には25名分を表記しています。組はランダムです。 4.Sheet 10では、実際の組の数は全部で9つあり、No.は188あります。氏名と組には ところどころ空白があります。(不在者です) 氏名は昇順とは限りません。  それに対応できる「計算式」をお願いします。 5.私はEXCELに詳しくありません。マクロが使えません。Sheet 5の組がランダムに 表記されているので、どう抽出したらよいのか困っています。「〇〇関数を使えば よい」の回答は不要です。具体的な計算式での回答をお願いします。  尚、私はINDEX関数やMATCH関数は使いますが、VLOOKUP関数は使いません。 7.過日一度質問を投稿したのですが、私の不手際で「プライバシーの侵害につながる恐れのある内容が含まれていた」と判断されてしまいました。そして添付ファイルを削除され、質問の内容を編集されました。結果、質問の内容が回答者には伝わらなくなってしまいました。今回は質問の仕方を変えて再投稿しています。今度の添付ファイルは問題がないと思っています。 説明が長くなってしまいました。 よろしくご指導下さい。

  • ACCESSからエクセルを操作する方法

    宜しくお願いします。 (1)ACCESSのフォームをクリックして、抽出されたデータをエクセルに出力(マクロでやってます) (2)抽出されたデータを、エクセル上で、セル幅や項目変更等を、手動にて行っています。 この、(2)の処理を、エクセルのマクロを用いて行いたいのですが、ACCESSからエクセルのマクロ 操作は可能なのでしょうか? ご存知の方がいらっしゃいましたら、宜しくお願い致します。

  • 複数のブックからデータを転記するマクロについて

    こんにちは。 VBAの素人なのでネットや本などで自分なりに調べましたが、 どうにも解決できないので、ご教示いただけませんでしょうか。 複数のブックにある同一セル番地にある データを別のブックにまとめたいのですが、 ブック数が500程度あり、マクロでうまくできないか悩んでいます。  (1)転記元ブックを開く。  (2)転記元データをコピーする。  (3)転記先ファイルのセルに貼り付ける。  (4)転記元ブックを閉じる。 の繰り返しだと思うのですが、(2)ができず困っています。 ちなみに、500のブックとまとめるブックも同じフォルダにあります。 具体的には、転記元ブックは以下のような形で、A列に様々な温度のデータが縦に並んでいます。    A列   1行  温度  2行  27 ←ここのみ抽出したい 3行  28 4行  30 それぞれのブックのA2番地の温度データのみを抽出し、転記先ブックのA2からA500までまとめたい。 組んだマクロは以下です。 ------------------------------ Sub 特定フォルダ内ブックを並べ替えて転記() Dim myDir As String, myName As String, myBook As Workbook Dim motodata As Range, sakidata As Range   '集計用のブックがあるフォルダ名を指定 myDir = "D:\VBA練習" myName = Dir(myDir & "\" & "*.xls")   Do While myName <> ""   '↓転記先の最新レコード位置を取得する   Set sakidata = Range("A65536").End(xlUp).Offset(1)   '↓(1)指定した名前のブックを開いて変数に格納する  Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName)   '↓(2)転記元を取得する   Set motodata = myBook.Range("A2")      '↓(3)転記先に貼り付ける   motodata.Copy sakidata   '↓(4)開いたブックを閉じる   myBook.Close  myName = Dir()  Loop End Sub ------------------------------ mybookというキーワードを使用して、A2セルデータをコピーする構文をご教示いただけませんでしょうか。 以上、長々となってしまいましたが、何卒アドバイスの程お願いいたします。

  • エクセル 抽出マクロについて

    はじめまして。マクロ初心者です。 エクセルで抽出結果を別シートにコピーしたいのですが、 抽出条件が2列にわたっています。 A     B      C      D 日付   タイトル   分類(あ)  分類(い) 11/22   テレビ    3      2 12/15   ラジオ    1      4 11/18   雑誌     2      5 …というような感じです。 例えば分類が「2」のものを抽出したい時に、 ●シート1のあるセルに「2」と入力してマクロを実行。  ↓ ●シート2に以下のように結果をコピーして表示。 A       B 日付     タイトル 11/22     テレビ 11/18     雑誌 という具合にしたいのです。(C列、D列は表示しない) データはシート3に入力されていて、今後どんどん増えていく予定です。 エクセルは2007です。 本やホームページを参考に試行錯誤したのですが、うまくいきません…。 どなたかご回答よろしくお願いいたします。  

専門家に質問してみよう