[[20211026210524]] 『文の分割』(ゆゆ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文の分割』(ゆゆ)

excelで
”、” ”。” ”「” ”」”
で文章を区切りたいです。
sheet1で本文をA1、A2、、、A(N)に入れておき
sheet2に句読点鍵括弧で分割された短文をA1、A2、、、、A(N)に入れていきたいです。
どのようにVBAを作成したらいいでしょうか。
とても困っているので解答をお願いしたいです、、、!!

sheet1

  A    B C
1 本文
2 本文
3 本文
・・・

sheet2

  A       B  C
1 私は、
2 山へ芝仮に、
3 彼は、
・・・

みたいな感じにしたいです。

< 使用 Excel:Office365、使用 OS:Windows10 >


処理前のイメージがよくわからないですが、とりあえずsplit関数を入れ子にしてみてはどうですか?

(もこな2) 2021/10/26(火) 21:16


処理前は物語の文すべてが入っている感じです
A1=私は、山へ芝仮に、彼は、川へ選択に、・・・
A2=あるひ男は、落ちていた藁を見つけました。それを拾って、・・・
A3=蟹はサルに騙されました。サルは「この栗はいい栗だよ。」といって蟹の持っていた柿と交換しました。

と入力されているsheet1を

A1=私は、
A2山へ芝仮に、
A3彼は、
A4川へ選択に、
A5・・・
A6あるひ男は、
A7落ちていた藁を見つけました。
A8それを拾って、



という風にsheet2に出力したいです。

split関数などを調べましたがうまく設計できなかったため質問させていただきました。
(ゆゆ) 2021/10/26(火) 21:27


 ワークシート関数でやりたいんですかね?

 Sub sample()
   Dim aCell As Range
   Dim buf() As String
   Dim iR As Long, L As Long
   iR = 1
   With Worksheets("Sheet1")
      For Each aCell In .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
         buf = Split(SplistSentence(aCell.Value), vbLf)
         L = UBound(buf) + 1
         Worksheets("Sheet2").Cells(iR, 1).Resize(L).Value = WorksheetFunction.Transpose(buf)
         iR = iR + L
      Next
   End With
 End Sub
 Function SplistSentence(ByVal Sentence As String) As String
   Sentence = Replace(Sentence, "、", "、" & vbLf)
   Sentence = Replace(Sentence, "。", "。" & vbLf)
   Sentence = Replace(Sentence, "「", vbLf & "「")
   Sentence = Replace(Sentence, "」", "」" & vbLf)
   Sentence = Replace(Sentence, "。" & vbLf & "」", "。」")
   SplistSentence = Sentence
 End Function
(´・ω・`) 2021/10/26(火) 21:54

 同じことをPowerQueryで
 let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"列1", type text}}),
    置き換えられた値 = Table.ReplaceValue(変更された型,"、","、#(lf)",Replacer.ReplaceText,{"列1"}),
    置き換えられた値1 = Table.ReplaceValue(置き換えられた値,"。","。#(lf)",Replacer.ReplaceText,{"列1"}),
    置き換えられた値2 = Table.ReplaceValue(置き換えられた値1,"「","#(lf)「",Replacer.ReplaceText,{"列1"}),
    置き換えられた値3 = Table.ReplaceValue(置き換えられた値2,"」","」#(lf)",Replacer.ReplaceText,{"列1"}),
    置き換えられた値4 = Table.ReplaceValue(置き換えられた値3,"。#(lf)」","。」",Replacer.ReplaceText,{"列1"}),
    区切り記号による列の分割 = Table.ExpandListColumn(Table.TransformColumns(置き換えられた値4, {{"列1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "列1"),
    変更された型1 = Table.TransformColumnTypes(区切り記号による列の分割,{{"列1", type text}})
 in
    変更された型1
(´・ω・`) 2021/10/26(火) 22:22

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.