• ベストアンサー

Excel(かWord)で英文を一語ずつ縦に並べる

いつもありがとうございます。 Microsoft Excel(無理ならばWord)で英文を一語ずつ縦に並べ替えたいのですが、 どのようにすれば良いでしょうか。バージョンはともに2016です。 次のような英文があったとします。 I have now that will just make my work flow run smoothly このように一語ずつ分けて書かれている英文を縦に I have now that will …後略 と並べ替えたいのですが、 マクロを使ったりして一括でなんとかできないでしょうか? 識者の方よろしくお願いいたします。

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

  • ベストアンサー
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

Sub Macro1() Dim wrdArry As Variant Dim i As Long With ActiveSheet wrdArry = Split(.Range("A1").Value, " ") For i = 1 To UBound(wrdArry) .Cells(i, 1).Value = wrdArry(i) Next i End With End Sub でしょうか。

bloom08
質問者

お礼

無事解決できました!本当に助かりました。ありがとうございますm(_ _)m

その他の回答 (10)

回答No.11

No.10 です。訂正が1点あります。 ★ vbCr を vbCrLf に置換すれば、 Excelでもなんでも)好きな場所に(Ctrl+Vとかで)貼付け 出来るようになる という説明が抜けていました。 この際、 誤)  vbCr 正)  vbCrLf という風に訂正させてください。 失礼しました。

回答No.10

こんにちは。お邪魔します。 > 英文を一語ずつ "単語"ではなく"一語"と表現されている点が結構気に掛かっていて、 試しに、幾つかの基準で難しい版を書いてたりもしてたのですが、、、。 例えば、word数で制限されている原稿とか書く?とかいう目的だったり? とか、事情とか要求とかがもしあるならば、 具体的なオーダーの解る方がお応えし易かったかな、とか。 さておき。 単語の扱いにかけてはWord等のテキストエディターの得意分野、 ということはご承知の上のようですので、 Excel VBA として、  一連のテキストとして出し入れする為のクリップボード と、  正規表現(英単語を取り出します。空白基準ではありません) を使って、単語を抽出する簡易なマクロを 汎用性を意識して書いてみました。 ユーティティ的には悪くない設計と思いますけれど、 単語(一語)の扱いをどういう基準に落とすか、については、 そちらで内容をカスタマイズして貰うか、他の処理を追加して貰うとか、 必要になるのかも?と想像しています。 実際に処理する場面での手順としては、 1)単語を抽出したい元のセル範囲(複数可)を選択 2)マクロ[セル内の英単語取り出し]を実行 3)(Excelでもなんでも)好きな場所に(Ctrl+Vとかで)貼付け のように、基本的にマニュアル操作感覚で 一般機能のように扱えるツールっぽく作ってあります。 VBA(VBE)の標準モジュールに下記のスクリプトをコピペすれば すぐにも使用可能です。 マクロ[セル内の英単語取り出し]を ボタンやShape等やショートカットキーに登録しておく方が より便利になるかも、です。 ' ' === 標準モジュール == ' ' // 英単語をピックアップしたい元のセル範囲を事前に選択しておいてから実行 ' ' // (単矩形範囲の単or飛び飛び複数セル または 単列or単行の飛び飛びセル範囲であれば機能する) ' ' // →ピックアップした英単語(改行区切り)をテキストとして、好きな場所に貼付け可能に Sub セル内の英単語取り出し() Dim sBuf As String   Selection.Copy   With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' New DataObject     .GetFromClipboard     sBuf = 単語整形(.GetText)     .Clear     .SetText sBuf, 1     .PutInClipboard   End With   MsgBox "英単語データはクリップボードに格納され貼付け可能です" ' 煩いと思ったらこの行削除 End Sub ' ' // 英単語をピックアップしたい形に整形する関数(簡易版:非word数基準) ' ' // "I'm", "they've" などの省略形を 1 word として扱います。 Private Function 単語整形(ByVal sBuf As String) As String   If InStr(sBuf, """,") Then sBuf = Replace(sBuf, """", "") ' DQ削除   With CreateObject("VBScript.RegExp")     .Global = True     .Pattern = "[^\w'\-]"     sBuf = .Replace(sBuf, " ") ' 「a-Z 0-9 _ ' -」以外の文字を削除     .Pattern = "\s+"     単語整形 = .Replace(LTrim$(sBuf), vbCr) ' スペース(の塊り)を改行に置換   End With End Function ' ' ===

回答No.9

では・・ちょっとばかり皆さんと違う方向で(笑)。 A1に例の英文があるとして・・ A1セルにカーソルを合わせ、 ・データタブから「区切り位置」 ・「カンマやタブなどの・・・区切られたデータ」を選択し「次へ」 ・「スペース」にチェック、「連続した・・」にもチェックし「次へ」 ・「完了」 これで、単語ごとに区切られてセルに格納されますので、 ・全範囲を選択し、コピー ・範囲外にフォーカスを置き(A2セルとか)、  ホームタブから「行列を入れ替えて貼り付け」 で完了。 VBAでやるなら Sub Sample1()   Range("A1").TextToColumns DataType:=xlDelimited, _                Destination:=Range("A1"), _                ConsecutiveDelimiter:=True, _                Comma:=False, _                Space:=True   Range("A1:" & Cells(1, Columns.Count).End(xlToLeft).Address).Copy   Range("A2").PasteSpecial Transpose:=True   Application.CutCopyMode = False End Sub こんな感じですかね。 例えば英文中にカンマ「,」などが入るなら (Yes, I do.  とか)、 「区切り位置」機能では「カンマ」のチェックを。 VBAに書き加えるなら、   Comma:=True, _ に書き換えてみてくださいませ。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

この課題は、ワードVBA向きでしょう。 一般にワードVBAは情報が得にくく、市販本もごく少なく、学習の関心も薄いようですが、関心を持って調べていると、ワードで単語が捉えられる便利な機能があったな、と記憶に残る。 http://www.relief.jp/docs/018025.html Dim wrd As Word.Range For Each wrd In ActiveDocument.Words dic.Add wrd.Text, "" Next wrd のように、For Each   Nextで単語のコレクションを1つづつ捉えられる。 これをエクセルシートのA列なりに書き出せば仕舞です。 Wordの文章に VI have now that will just make my work flow run smoothly. があるとして 上記のサイトはDictionaryという仕組みを使ったものだが、その部分を省いて、わかりやすくして、下記のプログラムを実行すると Wordの標準モジュールに張り付けて実行(F5キー)。 ーー Sub 文書に含まれる単語をExcelに書き出す2() Dim wrd As Word.Range Dim key As Variant Dim xls As Object 'Excel.Application Dim i As Long ' ----- On Error Resume Next Set xls = CreateObject("Excel.Application") xls.Visible = True With xls .SheetsInNewWorkbook = 1 .Workbooks.Add i = 1 For Each wrd In ActiveDocument.Words .Cells(i, 1).Value = wrd.Text  ’Textが必要 i = i + 1 Next wrd On Error GoTo 0 End With Set xls = Nothing End Sub ーーー 結果 I have now that will just make my work flow run smoothly . ==== しかし(英文)文章は多様なので、いろんなケースでチェックしてみる必要はあると思う。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.7

Chiquilin様、 いいものを 見せて、頂き 有難うございます 然し、其れ 配列ベクトルが 違う、だけ ですよ 此れで、ループ無し です Sub test() Dim 単語数 As Long, temp As Variant  Let 単語数 = Len(Cells(1, 1)) - Len(Replace(Cells(, 1), " ", "")) + 2  With ActiveSheet   Let temp = Application.Transpose(Split(.Cells(1, 1).Value, " "))   .Range(.Cells(2, 1), .Cells(単語数, 1)).Value = temp  End With End Sub ワークシートでは 横方向が 配列、1次側、 縦方向が 配列、2次側、 です 1次配列の、各要素を 列内に、行違いで 連続で。並べたい 場合は トランスポンド、すれば ループ不要、です

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.6

Sheet2 において、 セル A1 に数値 1 を入力 式 =FIND(" ",Sheet1!A$1&" ",A1+1) を入力したセル A2 を下方にズズーッとオートフィル Sheet1 において、 次式 を入力したセル A1 を下方にズズーッとオートフィル =IFERROR(TRIM(MID(A$1&" ",Sheet2!A1,Sheet2!A2-Sheet2!A1)),"")

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.5

済みません 少し 長く、なって しまいました エクセル、です(2007以降対応) A1に、原文が 入って、いる と、して =IFERROR(MID(" "&$A$1&" ",SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,),ROW(A1))+1,SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*100^100+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,),ROW(A2))-SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,),ROW(A1))),"") 下ヘ フィル、頂ければ 使えます 但し、 >空白は、半角で  入れて、ください >単語は  1文字、のみの  空白で  挟んで、ください >原文は  100^100字、以内に  して、ください  (エクセルの 制約の、方が きついはず ですが) MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1) で、 原文を、1文字ずつに 解体して、います そして 空白で、ない 文字位置に 極大値を、与え MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30 加えて 全、文字位置値を 与え MID(" "&$A$1&" ",SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)) 定数配列的、扱いの 可能な、ものに 変え INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,) 先頭から、何文字目に 単語が、始るか を、算出 SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,),ROW(A1))+1 先頭から、何文字目に 単語が、終るか を、算出 SMALL(INDEX((MID(" "&$A$1&" ",ROW(INDIRECT("A1:A"&LEN($A$1)+2)),1)<>" ")*10^30+ROW(INDIRECT("A1:A"&LEN($A$1)+2)),,),ROW(A2)) させて、います 如何で、しょうか?

参考URL:
https://1drv.ms/x/s!AjviygfJDgV_1FrssKB8_9ih3lXX
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

Excel2016なんだから 数式でやるなら =IFERROR(INDEX(FILTERXML("<a><b>"&SUBSTITUTE($A$1," ","</b><b>")&"</b></a>","//b"),ROW(A1)),"") 下方向にコピー でいいはずです。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

A1セルに提示の文字列があるとして次の操作をすれば目的通りになります。 A1セルを選択して「データ」タブの「区切り位置」を実行します。そのとき、区切り文字を空白にすると右側のセルへ1語ずつ分割されます。 次に1行目を選択してコピーコマンドでクリップボードへ記憶させます。 A2セルを選択して貼り付けを行いますが、行列を入れ替えて貼り付ければA2から下へ1語ずつ貼り付けられます。 1行目が不要になれば削除してください。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.2

A1に英文がある場合 A2に以下の式を入れて下にドラッグコピーし、 =IF(ISERR(MID(A1,FIND(" ",A1)+1,1000)),"",MID(A1,FIND(" ",A1)+1,1000)) B1に以下の式を入れて下にドラッグコピーしてみてください。 =IF(ISERR(LEFT(A1,FIND(" ",A1)-1)),A1,LEFT(A1,FIND(" ",A1)-1))

関連するQ&A

  • 英文からポルトガるル語

    英文で{I will make final decision.} ポルトガル語の読み方が解りません! {Eu tomarei decis&atilde;o final.}だと思うんですが、 カタカナでもなんでも良いので解る方教えて下さい!!!

  • 語法問題

    その仕事を引き受けた以上、きっとやります。 Now that I have accepted the task, I will do it fail.でNow thatが日本語訳をみるとそれにあたるものがわかりません。教えてください。

  • 「言っちゃった」の英文

    例えば、友達との会話で、 「Aさんに、『7時に待ち合わせ』って言っちゃった」 という文章ですが・・・。 英語で言おうとすると、 I have told A that we will meet at 7. になってしまうんです・・・。 要は、普通に、 「Aさんに、7時に待ち合わせって言ったよ」 にしか、ならないのです。 ポイントは、「7時に待ち合わせって、間違えて言っちゃった」 と言う事なので、 I have told A that we will meet at 7, but its wrong. なんて、言わないといけなくなるのでしょうか? 後悔のニュアンスを含む、「言っちゃった」や「○○しちゃった」 という表現は、英文ではどう言うのでしょうか?

  • 英文添削お願いします。

    英文添削お願いします。 30th September ‘10 The first half of fiscal year will be over at today. I feel that time run out before I finish anything. But I will go writing my diary in English. I wonder how much this diary make my English ability improve? My defect is what I want a result. So I just enjoy reading, writing and hearing English now. But I spent a lot of time to write this diary.

  • 英文メールを日本語訳にして欲しいのですが。

    以下の内容を日本語にして頂けますでしょうか。 宜しくお願いします。 yes I have recieve your payment so today I will apply for paper work with the address that you have send to me once the document are ready I mail you a copy and set for shippment I hope you understand me now? by the way how long will it takes you to obtain your import permit from your authority ?

  • 英文日記を添削していただけますか(^^)

    短いですが、英文日記を書きました。初心者なので、特に文法的な間違いや、表現のおかしい部分などがあれば、直していただけると助かります(^^)  一応、最後に私の表現したい内容を日本語で表記しておきます。  Tomorrow is the final day of Turin Olympics. Now that, we haven’t won any medals is Japan unluckily. I hope that Japanese female figure skaters will make the podium.  (日本語)あしたはいよいよトリノオリンピックの最終日だ。でも残念なことに今のところ日本は1つもメダルを取っていない。女子フィギュアでぜひ表彰台にあがってほしいな。  

  • 英文の日本語訳をお願いします

    It seems increasingly likely that I really will undertake the expedition that has been preoccupying my imagination now for some days. これは小説の中の一文です。 いろんな訳し方(日本語の単語の選択)があると思います。 翻訳された本の訳だけでなくいろんな方の訳も見て参考に 勉強したいと思います。よろしくお願いします。

  • この短い一行の英文の解釈について教えてください。

    この短い一行の英文の解釈について教えてください。 英語のテキストに、以下の一文がありました。 I don’t want them to make sushi with hands that have been smoking. で、和訳は、「ヤニ臭い手で寿司に握らないでほしい」と、ありました。 私はバカだからよくわからないのですが^^; なぜ hands that have been smoking. と、なっているのでしょうか? 「手がタバコを吸うの?」と、思ってしまいました。^^; hands that smell cigarettes. ならわかるのですが… すいません、この英文について、ご解説お願いしますm(_ _)m

  • この動画の英文を教えてください。

    この動画の、5:57からの、「It's over」から、7:27までの「You are the best」までの英文を書き出していただけないでしょうか? http://www.youtube.com/watch?v=e-v4vB0d238 ちなみに私がやってみましたが、ほとんど意味が分からない状態です・・・。 よろしくお願い致します。 <私が書き出した文> It's over. kakarot... sorry about like that, but I now done it. Majin boo so much storonger than anyone that I face befor. But I know that I still wait to the win. amaging have you do it, kakarot. after that vegeta,how can I say pipe that in a same time be so gent in the fly I make me angry just thinking about it. But purhaps this my anger, that make me brind too so wrong I see of now. this stay done too clear. you better the me kakarot, you are the best.

  • 英文翻訳お願いします。

    個人輸入での英文の翻訳お願いします。   I will make sure this goes out today. I completely understand the customs deal and I have your list of items you want sent 5 days apart.

専門家に質問してみよう