何らかのソフトや関数を使い、多種多様な文章を、語尾から50音順に並べ替えることはできるでしょうか?
たとえば、
1.花は赤い(はなはあかい)
2.空は青い(そらはあおい)
3.雲は白い(くもはしろい)
4.雪は白い(ゆきはしろい)
という文章があったとして、語尾から50音順で
1.空は青い(そらはあおい)
2.花は赤い(はなはあかい)
3.雪は白い(ゆきはしろい)
4.雲は白い(くもはしろい)
と並べ替える手段を探しています。
使用目的は、書籍や報告書等の文章の塊から、
どんな言葉や動詞が使われているか、等を分析したいためです。
どうぞよろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
[Sheet1(コード)]に関して
1、[Sheet1]のタグを右クリック[コードの表示]を更にクリック。
2、以下のコードをコピペ。
Private Sub CommandButton1_Click()
Dim I As Integer
Dim N As Integer
Dim Datas() As String
Datas() = FileReadArray("C:\temp\test.txt")
DatasReverse Datas()
QuickSort Datas()
DatasReverse Datas()
N = UBound(Datas())
For I = 0 To N
FileAppend "C:\Temp\testII.txt", Datas(I)
Next I
FileAppend "C:\Temp\testII.txt", "" ' 閉じるためのコード
End Sub
Public Sub DatasReverse(ByRef Datas() As String)
Dim I As Integer
Dim N As Integer
N = UBound(Datas())
For I = 0 To N
Datas(I) = StrReverse(Datas(I))
Next I
End Sub
今回は、[Test.txt]を並びかえて[TestII.TXT]に書き出しています。
今回は、逆順入れ替えをサブルーチンにしています。
[標準モジュール]に関して
1、[Sheet1]のタグを右クリック[コードの表示]を更にクリック。
2、メニューの[挿入]-[標準モジュール]をクリック。
3、以下の関数をコピペ。
留意事項は、
FileAppend "", ""
でも構いませんのでファイルシステムオブジェクトを破棄するコードを忘れないことです。
なお、クイックソートにルーチンは高速のそれではありません。
もっとも、初歩的で判りやすいルーチンとされるものです。
Public Function FileReadArray(ByVal FileName As String) As String()
On Error GoTo Err_FileReadArray
Dim fso As Object
Dim strTexts() As String
Set fso = CreateObject("Scripting.FIleSystemObject")
strTexts() = Split(fso.OpenTextFile(FileName).ReadAll, vbCrLf)
Exit_FileReadArray:
FileReadArray = strTexts()
Exit Function
Err_FileReadArray:
MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"
strTexts() = Split("")
Resume Exit_FileReadArray
End Function
Public Function FileAppend(ByVal FileName As String, ByVal TEXT As String) As Boolean
On Error GoTo Err_FileAppend
Static isOpen As Boolean
Static fso As Object
Static txs As Object
If Not isOpen Then
isOpen = True
Set fso = CreateObject("Scripting.FIleSystemObject")
Set txs = fso.CreateTextFile(FileName, True)
End If
If Len(TEXT) > 0 Then
txs.WriteLine TEXT
End If
FileAppend = True
Exit_FileAppend:
On Error Resume Next
If Len(TEXT) = 0 Then
isOpen = False
Set txs = Nothing
Set fso = Nothing
End If
Exit Function
Err_FileAppend:
Resume Exit_FileAppend
End Function
Public Sub QuickSort(ByRef Datas() As String)
QSort Datas(), 0, UBound(Datas())
End Sub
Public Sub QSort(ByRef Datas() As String, _
ByVal intTop As Integer, _
ByVal intLast As Integer)
Dim I As Integer ' ループの索引
Dim J As Integer ' ループの索引
Dim R As Integer ' 分割した右側の配列の要素数
Dim N As Integer ' 比較する配列の総数
Dim Temp As String ' 配列を一時的に保存する
Dim Part As String ' 配列を分割するテストに選ばれた要素
N = intLast - intTop + 1
If N < 2 Then
Exit Sub
End If
' intTop = 0, N = 5 ---> 0 + 5 / 2 = 2
' intTop = 1, N = 3 ---> 1 + 3 / 2 = 2
' テスト値には、対象となる配列の真ん中を選ぶ
Part = Datas(intTop + Int(N / 2))
I = intTop - 1
J = intLast + 1
Do
' 左から比較する
Do
I = I + 1
Loop While (StrComp(Datas(I), Part) = -1)
' 右から比較する
Do
J = J - 1
Loop While (StrComp(Datas(J), Part) = 1)
' 左右の比較作業が出会わなかったら、
' I と J の要素を入れ替える
If (I < J) Then
Temp = Datas(I): Datas(I) = Datas(J): Datas(J) = Temp
End If
Loop Until (I >= J)
R = N - I
QSort Datas(), 0, I - 1 ' 左側部分の配列をソート
QSort Datas(), I, I + R - 1 ' 右側部分の配列をソート
End Sub
ところで、全てのコードは、VB6.0 でもそのまま動作します。
ですから、VB6.0で書くのがお勧め。
その際にファイル名を指定するように改造すれば、小さなフリーソフトまがいが出来上がります。
どなたか知人にでも頼まれるとチャッチャと作ってくれませんかね。
できました!!どうもありがとうございました。
ご親切にご説明、というかコピペだけで出来るように
していただいて、感謝です!!!!
この並べ替えのおかげで、1ヶ月以上はかかるかな、
なんて考えていた仕事が短時間でできそうです!
プログラムが書けるっていいですね。
ちょっと勉強してみようかなあ、という気持ちになりました。
本当にどうもありがとうございました。
No.4
- 回答日時:
小生門外漢なれど、VBAで「空は青い」を「イオアハラソ」に直しても質問の主旨に役立たないと思います。
質問標題がそれを希望するように取れますが。やはり文章から、単語の切り出しが、まず必要であって、
空、は、青いのように分解できないと、「青い」という「ア」のソートの最初桁も割り出せないのではないでしょうか。
単語の割り出しは、過去にどなたかが作成している単語や語句辞書を参照しないと、プログラムにルールだけ乗せて、達成できるものではないと思うし、かな漢字変換の機能のようなことをせねばならず、ジャストシステムやMSなどが今まで苦労してきたことを後追う形で個人でやるのは無理でしょう。ですから#2でおっしゃっているように、専門ソフトを使わざるを得ないと思います。
ワードVBAで、ワードの文書に対しては、ややそれに近いことをやってくれますが。
ーー
単語検索
検索方法:キーワード検索(前方一致・後方一致・完全一致・部分一致)、関連 語検索(前方一致・後方一致・完全一致・部分一致)、全文検索、目次検索・・
http://www.densijiten.co.jp/news/press.php?disp= …
形態だけでなく
日本語シソーラス
http://www.taishukan.co.jp/item/nihongo_thesauru …のような仕組みができるのが目的かと思いましたが。
そうですね、おっしゃっているようなことができれば理想です。
ただそれは個人では難しいのですね・・・。
言葉に関することは、なかなかコンピューターで割り切れるものでは、
ないようですね。
教えていただいた「広辞苑第五版+日本語大シソーラス」チェックしてみます。
本当に有難うございました。
No.3
- 回答日時:
<Test.txt>
1.花は赤い(はなはあかい)
2.空は青い(そらはあおい)
3.雲は白い(くもはしろい)
4.雪は白い(ゆきはしろい)
を
2.空は青い(そらはあおい)
1.花は赤い(はなはあかい)
4.雪は白い(ゆきはしろい)
3.雲は白い(くもはしろい)
と、並べてエクセルに表示するのは割りと簡単です。
Private Sub CommandButton1_Click()
Dim I As Integer
Dim N As Integer
Dim Datas() As String
Datas() = FileReadArray("C:\temp\test.txt")
N = UBound(Datas())
For I = 0 To N
Datas(I) = StrReverse(Datas(I))
Next I
QuickSort Datas()
For I = 0 To N
Datas(I) = StrReverse(Datas(I))
Me.Cells(I + 1, 1) = Datas(I)
Next I
End Sub
ここでは FileReadArray関数、QuickSort関数を利用しています。
この2つの関数は、エクセルの標準モジュールに登録する必要があります。
コード自体は、簡単です。
先ず、FileReadArray関数でDatas()という配列変数に呼び込んでいます。
次に For-Next文で文字列を逆にしています。
その後、QuickSort関数で並び替えて、また、For-Next文で文字列を逆にして元に戻しています。
ですから、数字も含めて並び代わっています。
さて、こういうVBA解決が質問者のニーズに答えているか否かは不明です。
ですから、FileReadArray関数、QuickSort関数の紹介は一応保留しておきます。
必要があれば補足します。
この回答への補足
早速ご回答ありがとうございました!
実は関数についての知識があまりなく、
「FileReadArray関数、QuickSort関数」とはどんなものか?
「それらををエクセルの標準モジュールに登録」とはどうするのか?
の2点がわかりません・・・。
もしよろしければ、教えていただけると大変助かります。
参考となるHP等でも結構です。
よろしくお願いいたします。
No.2
- 回答日時:
直接の回答にはなりませんが、もし使用目的が
>書籍や報告書等の文章の塊から、どんな言葉や動詞が使われているか、等を分析したい
ということであれば、形態素解析ソフトというものがあります。このソフトは、入力されたテキストデータを単語で区切り、品詞ごとに分類をしてくれるもので、必要に応じて動詞と形容詞だけ、とか、名詞だけとか指定して抽出することも出来ます。
よく自由記述のアンケートの分析に使われています。フリーソフトで大変有名なものとして
http://chasen-legacy.sourceforge.jp/
茶筌というものがあります。
おお!こんなソフトがあるのですね。
使ってみます。
ただ単語だけひっぱってくると、名詞として使われているのか
動詞の一部として使われているのかわからないですが、
これだと品詞の情報は落ちないわけですね!便利そうです。
ありがとうございました!!
No.1
- 回答日時:
EXCELのVBAにStrReverseという文字を反転させる関数があります。
これを使ったユーザー定義関数で可能だと思います。
VBEの標準モジュールに
Function KanaReverse(MOJI)
KanaReverse = StrReverse(Application.GetPhonetic(MOJI))
End Function
で
エクセルにて
A1="空は青い"
B1=KanaReverse(A1) → "イオアハラソ"
になります。
ユーザー定義関数の詳細は下記を参照
http://takashixxx.blog88.fc2.com/blog-entry-21.h …
そうなんです!反転できればいいのになあと考えていたのです。
VBAというのを知っていると、いろいろできるんですねえ。
ご紹介いただいたHPで勉強しようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる(続) 4 2023/03/21 21:28
- 英語 口頭での"the following..."の可否等について 6 2022/08/19 01:01
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- 日本語 「災害級の暑さ」と言う言い方について 12 2023/08/02 20:36
- Excel(エクセル) Excelについて質問です(ver2019) 1 2023/06/30 21:20
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる 2 2023/01/14 22:14
- Excel(エクセル) EXCELで指定した改行タグを入れていく 1 2022/04/15 23:25
- 魚類 写真をみて症状のわかる方いませんか 2 2023/08/01 19:14
- 会社・職場 面倒臭いのか? 2 2022/10/26 10:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
!至急!ふざけてないような面...
-
「雨が止む」と「雨があがる」...
-
国語の授業で、「自分流枕草子...
-
「~になる」と「~となる」の...
-
「のち」(後)は、「ひらがな...
-
テプラプロで一行で文字の大き...
-
「~されていなく、」は「~さ...
-
よろしくお願いします^ ^ 男性...
-
夏場のお弁当に漬物(ぬか漬け...
-
雨上がりに木の下に落ちている...
-
雨の日になると電話がつながら...
-
夜に茹でたほうれん草を翌日の...
-
自分流枕草子
-
理屈と屁理屈っていうのは、ど...
-
絶縁 溶接用手袋
-
雨降りなのに窓を開けている・...
-
『元気ですか』の返し方 私は「...
-
「向う」の送り仮名について
-
引っ越しに関するスピリチュア...
-
【雨もしたたるいい女の意味】
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「のち」(後)は、「ひらがな...
-
「雨が止む」と「雨があがる」...
-
テプラプロで一行で文字の大き...
-
よろしくお願いします^ ^ 男性...
-
「~になる」と「~となる」の...
-
「部屋干し」より、「外干し」...
-
「~されていなく、」は「~さ...
-
町内班長の挨拶
-
雨の翌日のお花見は中止した方...
-
絶縁 溶接用手袋
-
理屈と屁理屈っていうのは、ど...
-
キシラデコール塗装3時間後に降雨
-
夏場のお弁当に漬物(ぬか漬け...
-
魚(鯉など)が跳ねる理由
-
夜に茹でたほうれん草を翌日の...
-
『元気ですか』の返し方 私は「...
-
「向う」の送り仮名について
-
「~という感じ」「~といった...
-
拘らず・関わらず??
-
あまり着てないコートをクリー...
おすすめ情報