電子書籍の厳選無料作品が豊富!

妙(みょう)法(ほう)蓮(れん)華(げ-)經(きょう) 如(にょ-)來(らい)壽(じゅ-)量(りょう)品(ほん)
自我得佛來(じ-が-とくぶつらい)  所經諸劫數(しょ-きょうしょ-こっしゅ)  無量百千萬(む-りょうひゃくせんまん)つづく。

上記データを「妙法蓮華經…」と、「みょうほうれんげきょう…」に分けたい。教えてください。マクロは初心者です。

A 回答 (5件)

Sub sss()


Dim i As Integer
Dim j As Integer
Dim お経 As String
Dim 文字種 As Integer
Dim 括弧 As Boolean
Dim 結果(2) As String
Dim s As String
文字種 = 1
お経 = Cells(1, 1) ’お経という変数にA1にある文字列を入れますA1
j = Len(お経)    ’お経の文字列数をjに入れます
For i = 1 To j    ' 1~jまで一個づつ処理します
  s = Mid(お経, i, 1) 's にお経のi番目の文字を入れます
  括弧 = False
  Select Case s   ’sによって処理をわける
     Case "("    ’ "(" の場合文字種を2(かな)にする
      括弧 = True '括弧である(true)
      文字種 = 2 ’ "(" の場合文字種を1(感じ)にする
    Case ")"
      括弧 = True
      文字種 = 1
  End Select
  If 括弧 = False Then ’括弧じゃないとき文字を連結
      結果(文字種) = 結果(文字種) + s
  End If
Next
Cells(3, 1) = 結果(1)
Cells(4, 1) = 結果(2)
End Sub
一応オーソドックスに処理してます。
配列(結果)に出力を入れました。
最後は結果の確認ですね。
    • good
    • 0
この回答へのお礼

A1のデータをいれたらできました。

みなさんの、思考回路はすばらしい。
ありがとうございます。

お礼日時:2009/10/21 19:31

>またモニタのメッセージBOXに見えるだけではなく、テキストがほしいのです。



テキストファイルへの出力はマクロの基本です。入門書に書いてあるはず。検索してもたくさん見つかるはず。お手元には本がないのですか?検索もしていない?
どうやらマクロそのものが敷居が高いのかもしれません。
以下のようにしてはどうでしょう。

(1)「妙(みょう)法(ほう)蓮(れん)華(げ-)經(きょう)・・・」を、改行を置換できるテキストエディタに貼り付ける。
  #メモ帳ではできないので、高機能のフリーのテキストエディタをVectorなどからダウンロードしてください。
(2)「)」を改行に置換。これで
    妙(みょう
    法(ほう
    蓮(れん
    ・・・
   のようになります。
(3)Excelを開き、(2)のテキストをA1セルに貼り付け。
(4)「データ」-「区切り位置」を使い、「(」で区切る。これによってA列に漢字、B列にひらがなが入る。
  #「区切り位置」の使い方は、入門書や検索で調べてください。
(5)A列を選択し、テキストエディタに貼り付ける。
(6)テキストエディタで検索する文字列を改行にし、置換後の文字列に何も入力しないことで改行を削除する。
  #これで、漢字が1行になります。
(7)B列についても同様の処理をして、1行にする。

以上です。
    • good
    • 1
この回答へのお礼

みなさんは、すばらしい!
テキストファイルへの出力はマクロの基本でしょうね。勉強不足を痛感し、もっと本を読んでみます。
ありがとうございました。

お礼日時:2009/10/21 19:27

もし正規表現は敷居が高いと思われるなら、こちらの方が分かり易いと思います。



Sub mcr()
 Dim ary As Variant
 ary = Split("妙(みょう)法(ほう)蓮(れん)華(げ-)經(きょう)", ")")
 Dim kanji As String, kana As String, tmp As Variant, tmp2 As Variant
 For Each tmp In ary
 tmp2 = Split(tmp, "(")
 If UBound(tmp2) > 0 Then
  kanji = kanji & tmp2(0)
  kana = kana & tmp2(1)
 End If
 Next
 MsgBox kanji & vbCrLf & kana
End Sub
    • good
    • 0
この回答へのお礼

初心者ですので補足に書き込むべきかわかりませんが、ありがとうございます。
無量百千萬(む-りょうひゃくせんまん)つづく。
つづくというのは、あと1000文字以上文章があります。

またモニタのメッセージBOXに見えるだけではなく、テキストがほしいのです。
プログラムをにコピペして、実行しました。
正規表現は敷居が高いと…の意味も理解できない素人ですが、
再度よろしくお願いします。

お礼日時:2009/10/21 16:47

こんにちは。



別のWord・マクロの質問とは似ていますが、こちらの方が簡単です。
どちらか一つにしてほしいものです。
Wordの場合は、

Const SUTRA As String =

Dim Sutra As String

Sutra = Selection.Text
にすればよいと思います。

'-------------------------------------------

Sub TextSplit()
Dim Matches As Object
Dim Match As Object
Dim buf0 As String
Dim buf1 As String
Const SUTRA As String = "妙(みょう)法(ほう)蓮(れん)華(げ-)經(きょう) 如(にょ-)來(らい)壽(じゅ-)量(りょう)品(ほん)自我得佛來(じ-が-とくぶつらい)  所經諸劫數(しょ-きょうしょ-こっしゅ)  無量百千萬(む-りょうひゃくせんまん)つづく。"
With CreateObject("VBScript.RegExp")
 .Pattern = "[\((]([^\))]+)[\))]"
 .Global = True
 buf0 = SUTRA
 If .Test(SUTRA) Then
 Set Matches = .Execute(SUTRA)
 For Each Match In Matches
  buf0 = Replace(buf0, Match.Value, "")
  buf1 = buf1 & Match.SubMatches(0)
 Next
 End If
End With
 MsgBox buf0 & String(2, vbCrLf) & buf1
End Sub
    • good
    • 0
この回答へのお礼

さきほどのWendy02さんですか、ありがとうございます。
無量百千萬(む-りょうひゃくせんまん)つづく。
つづくというのは、あと1000文字以上文章があります。

またモニタのメッセージBOXに見えるだけではなく、テキストがほしいのです。再度よろしくお願いします。

お礼日時:2009/10/21 16:39

一例まで。



Sub try()
Dim myReg As Object
Dim myMatch As Variant
Dim st As String
Dim st1 As String
Dim st2 As String

Set myReg = CreateObject("VBScript.Regexp")
myReg.Pattern = "\(.+?\)"
myReg.Global = True

st = "妙(みょう)法(ほう)蓮(れん)華(げ-)經(きょう)如(にょ-)來(らい)壽(じゅ-)量(りょう)品(ほん)自我得佛來(じ-が-とくぶつらい)所經諸劫數(しょ-きょうしょ-こっしゅ)無量百千萬(む-りょうひゃくせんまん)"

st1 = st

For Each myMatch In myReg.Execute(st)
st1 = Replace(st1, myMatch.Value, "")
st2 = st2 & Replace(Replace(myMatch.Value, "(", ""), ")", "")
Next

MsgBox st1 & vbLf & st2
Set myReg = Nothing

End Sub
    • good
    • 0
この回答へのお礼

初心者ですので補足に書き込むべきかわかりませんが、ありがとうございます。
無量百千萬(む-りょうひゃくせんまん)つづく。
つづくというのは、あと1000文字以上文章があります。

またモニタのメッセージBOXに見えるだけではなく、テキストがほしいのです。再度よろしくお願いします。

お礼日時:2009/10/21 16:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!