« 2007年5 月 | メイン | 2007年7 月 »
【問題】
A1からA10のセルに5,7,5,5,7,6,4,4,5,4の10個の
数値が入力されています。何種類の数値が入力されているか
求るにはどのような関数を使えばよいでしょう?
(●`ε´●):この場合は、4,5,6,7の4種類だな・・・・。
投稿情報: 午前 09時35分 カテゴリー: 三四郎関数 | 個別ページ | コメント (0) | トラックバック (0)
このブログの一太郎マクロ関連の記事は今までに
書きためたものを再掲示したものであった。しかし、前回の
「余計な改行文字を削除」からはリアルタイムで書いたものである。
当然、今回のものもリアルタイムの記事である。
さてお題は久しぶりの漢字書取問題作成マクロである。
悪児さんの第7弾である。今回の売りは・・・
悪児は()の不要化で対抗することにしました。
あらかじめ括弧で囲んだ漢字を変換するには、
対象となる漢字を括弧で囲まなくてはならない、
どうせマクロ化するならそこまで自動化しましょうよ。ということです。
もちろん、頭から順に指定しなくても、ちゃんと登場順に
番号が振られますよ。(^^)ゞ
・・・ということである。ということで早速、DLして試してみた。
動きも軽快でこれは面白い。くまぷーは何パターンか
試してみた。
すると・・・
悪い児は悪児です
悪い児は悪児です
・・・で検証したとき、下の順で( )をつけていくと
1.悪い児は(悪児)です
悪い児は悪児です
2.悪い児は(悪児)です
悪い(児)は悪児です
3.(悪)い児は(悪児)です
悪い(児)は悪児です
・・・つまり、1行目の「悪児」、2行目の「児」、1行目の「悪」の順に
( )をつけていくと下のようになってしまうのだ。
1.(①あく)い(③こ)は(②あくじ)です
(①あく)い(③こ)は(②あくじ)です
①.悪 ②.悪児 ③.児
悪児さんは「頭から順に指定しなくても、ちゃんと登場順に
番号が振られますよ。(^^)ゞ」と仰っているのだから
おそらくこういう結果になるはずではないのだろうか?
1.(①あく)い(②こ)は(③あくじ)です
(①あく)い(②こ)は(③あくじ)です
①.悪 ②.児 ③.悪児
投稿情報: 午後 10時53分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (7) | トラックバック (0)
一太郎Webフォーラムに余計な改行文字を削除したいのだが・・・
という投稿があった。『具体的には、句点「。」に続く改行文字は残して
その他の余計な改行文字を削除する方法』を知りたいということだ。
(●`ε´●):簡単だな。すぐに思いつくのは1文字ずつ判定して
改行文字だったら、さらにひとつ手前が句点かどうかを
判定する・・・・句点でなければ改行文字を削除する・・・
【´・ω・`】:うん、そんなカンジでいいと思うよ。
でも、マクロを使わなくても出来るよ
1)「句点+改行文字」を本文に出てこない文字に置換する。
例えば@@@などに・・・。
2)改行文字を置換して消去する。(置換(R)テキストボックスには何も入力しない。)
3)@@@を「句点+改行文字」に置換する。
※改行文字は置換ダイアログボックスの「メニュー」の
▼をクリックすれば検索文字などに使えます。
(●`ε´●):でも、おいらどうしてもマクロでやりたいんだ。
【´・ω・`】:じゃあ、こんなのでどう?
文字全置換(.検索文字列="。\n",.置換文字列="@@@",.検索方向=3,.あいまい検索=0,.確認=0)
文字全置換(.検索文字列="\n",.置換文字列="",.検索方向=3,.あいまい検索=0,.確認=0)
文字全置換(.検索文字列="@@@",.置換文字列="。\n",.検索方向=3,.あいまい検索=0,.確認=0)
(●`ε´●):3行マクロだな?
【´・ω・`】:うん、これでたいていの場合はなんとかなると思うけど・・・。
(●`ε´●):これ・・・、記録マクロだろ?
【´・ω・`】:へへへ、ばれた?
名称:スピード
*
*
*
*
*
*
ゲームの目的:同じ牌をクリックするとその牌が裏向きになります。
なるべく短時間で全ての牌を裏返してください。
全部裏返すと所要時間が表示されます。
ゲームの開始:「START」をクリックする。
※ゲームを中止するときには「中止」を2回クリックしてください。
ダウンロード:SPEED.lzhをダウンロード
スピードのコード:
Call Init()
MsgBox("ゲームを始めます")
%BlankCell=0
%StartTime = ThisTime()
Do While %BlankCell <108
Set %FirstCell = Range?
Set %SecondCell = Range?
If %FirstCell ="中止" Or %SecondCell ="中止"Then
MsgBox("ゲームを中止します。")
Stop
End If
%X1 = Col(%FirstCell)
%Y1 = Row(%FirstCell)
%X2 = Col(%SecondCell)
%Y2 = Row(%SecondCell)
If Cells(%Y1, %X1)=Cells(%Y2, %X2) Then
%FirstCell.Clear(1, false, false, false)
%SecondCell.Clear(1, false, false, false)
%FirstCell.CellStyle.BackColor = RGB(204, 153, 0)
%SecondCell.CellStyle.BackColor = RGB(204, 153, 0)
%BlankCell=%BlankCell+2
End If
Loop
%EndTime = ThisTime()
%ElapsedTime =%EndTime-%StartTime
%MyMsg=Minute(%ElapsedTime) & " 分" & Second(%ElapsedTime) & " 秒かかりました。"
MsgBox(%MyMsg)
Sub Init()
declare variable Pai(108) As String
declare variable Temp As String
declare variable Moji As String
declare variable X as Integer
declare variable Y as Integer
declare variable i as Integer
Pai()={"一索","二索","三索","四索","五索","六索","七索","八索","九索",\\
"一索","二索","三索","四索","五索","六索","七索","八索","九索", \\
"一索","二索","三索","四索","五索","六索","七索","八索","九索",\\
"一索","二索","三索","四索","五索","六索","七索","八索","九索",\\
"一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒",\\
"一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒",\\
"一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒",\\
"一筒","二筒","三筒","四筒","五筒","六筒","七筒","八筒","九筒",\\
"一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬",\\
"一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬",\\
"一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬",\\
"一萬","二萬","三萬","四萬","五萬","六萬","七萬","八萬","九萬"}
Range("D6:O14").Clear(1, false, false, false)
Range("D6:O14").CellStyle.BackColor = RGB(204, 153, 0)
MsgBox("ゲームを始めます")
!!シャッフル
Randomize(ThisTime())
For i = 1 TO 1000
X = Int(Rand() * 108)+1
Y = Int(Rand() * 108)+1
Temp=Pai(x)
Pai(x) =Pai(y)
Pai(y)=Temp
Next
i=1
For y = 6 To 14
For x = 4 To 15
Cells(y, x) = Pai(i)
Moji = Right(Pai(i),1)
select case Moji
Case "萬"
Cells(y, x).CellStyle.BackColor = RGB(204, 255, 255)
Case "筒"
Cells(y, x).CellStyle.BackColor = RGB(255, 204, 204)
Case "索"
Cells(y, x).CellStyle.BackColor = RGB(204, 255, 153)
End Select
i = i +1
Next
Next
End Sub
投稿情報: 午後 09時28分 カテゴリー: 三四郎マクロでゲーム作成 | 個別ページ | コメント (0) | トラックバック (0)
このサイトは「教員のための三四郎活用術」なのですがこの頃、とんと三四郎が話題に上ってきません。すっかり、三四郎から遠ざかってしまっています。 さて一太郎Q&A掲示板を何気なく見たら、何やらくまぷーにも答えられそうな質問がありました。ここの掲示板には以前一度、回答をしました。一太郎に関する質問に回答するのは初めてだったので、ドキドキだったのですが質問者にほったらかしにされてしまい悲しかったのですが、マナーの悪い人ばかりではなかろうとついまた回答をしてしまいました。すると今度はすぐにレスが付いたのでニコニコです。 | ||||||
名称:簡易カレンダー作成マクロ * * * * *
|
投稿情報: 午後 10時03分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
いや~、とうとうやっちゃいました。 えっ?!不祥事じゃないですよ。 ほんとうに日経PC21の表計算大会マクロ部門に 一太郎で応募してしまいました。 応募要項に対象ソフトはExcel97~2003と 明記されているのですから、明らかに |
一太郎は対象外です!! |
相手にしてもらえないことは百も承知なのですが・・・ つい手が滑ってメールを出してしまいました。 これが三四郎や1・2・3などの 表計算ソフトで応募したのなら シャレにも何にもなりませんが ワープロソフトで応募したということで・・・ ご勘弁をm(__)m |
ゲッ★(゚゚ュ)с=(`´メ |
関連トピック:日経PC21表計算腕自慢大会マクロ部門を一太郎で!! |
日経PC21表計算大会マクロ部門Q2(一太郎版)応募ファイルの ダウンロードは下から |
結果はもちろん落選でした(^^ゞ
投稿情報: 午後 08時01分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
2月9日に新しい一太郎が発売された。こんどは2007になった。 もうワープロソフトというジャンルは枯れたジャンルなので、 バージョンアップといってもいつもはあまり注目すべき新機能がない。 しかし、今回は1点だけ、「むむっ、これはっ?!」というものがあった。 それは「ふりがなをテキスト形式で保存」という新機能だ。 JustSystemの説明によると これならふりがなを振った後、問題文をテキスト形式にして、 括弧に番号をふって親文字を削除しちゃえば 「漢字書取問題」ができちゃうじゃん!! ふりがなの取得にはいろいろ苦労していたからだった。 一太郎マクロではメニューコマンドの「全ての単語」に 対応していないのでPushKeys()を使ってキー転送してみたり、 裏でEXCELを呼び出してExcelにふりがなを取得させてみたりなどと・・・。 でも一太郎2007でふりがなを親文字の後ろに()で囲って 挿入できるならば、ふりがな取得も マクロ対応になっていて「漢字書取問題作成マクロ」なんて 簡単にできちゃうかも!! |
甘いかな?(^_^;) |
投稿情報: 午後 03時20分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
今回のお題は「一太郎の表計算機能」だ。
ご存じの通り、一太郎には「罫線」-「計算」-「計算」から
呼び出す簡易計算機能がある。
これは簡単な四則演算しかすることができないが、
今回のテーマ、日経表計算大会マクロ部門の問題では
足し算と引き算しか使わないので、
この機能で十分対応できる・・・と思っていた。
ところが、少し考えが甘かったようだ。
*
*
*
*
上図を見て欲しい。 D=A+B-C という計算が出来ないのだ。
A,B,C,Dが同列または同行に存在しないとエラーになるようである。
この辺りは作業セルを使えば何とかなるであろうが、
機能的に少々貧しい。
表のレイアウトをオリジナルのままにしておきたかったので
この機能を使うのはやめることにした。
一太郎にはこの他にもう一つ作表機能がある。
「挿入」-「表枠」から呼び出すやつだ。
しかし、これは一太郎内の機能ではない。
別のソフトで作った表を貼り付けるだけである。
いわば三四郎やExcelで作った表を
リンク貼り付けするのと同じだから問題外である。
この部分もマクロでやらざるを得ないようだな。
一太郎はラクをさせてはくれない。
ほんとうに一太郎は楽しいな。
投稿情報: 午後 12時14分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前回、一太郎の「文書マクロ」はシート毎に独立していて、Sheet1の
「文書マクロ」はSheet2からは見えないということを書いた。
だから、Sheet2からSheet1のマクロを実行することが出来ない。
Sheet2からRunDocumentMacro("シートを追加")とやると
「指定したマクロがありません」というエラーになるのだ。
では修飾詞をつけてRunDocumentMacro("Sheet1.シートを追加")、
あるいはRunDocumentMacro("Sheet1!シートを追加")としたら
どうであろうかと思い足掻いてみたのだが、結局上手く行かなかった。
(●`ε´●):ギブアップか?
【´・ω・`】:この程度で白旗を掲げるはず無いだろ!!
一太郎マクロ初心者は何か打開策はないものかとヘルプを
いろいろ調べてみた。そして次の方法をとることにした。
1.Sheet1のマクロ「シートを追加」をいったんシステムマクロとして複写する。
2.システムマクロ「シートを追加」をSheet2の「文書マクロ」に複写する。
3.システムマクロ「シートを追加」を削除する。
下がそのコードだ。
!!シート名をデフォルトに戻す
%Str=GetSheetCount( )
CurrentSheetItem("Sheet" & %Str)
!!元シートをコピー
SelectAll()
Clip()
!!新規シート追加
PushKeys("#F{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"\\
& "{DOWN}{RIGHT}{ENTER}#N")
!! 文書マクロ "シート追加" をシステムマクロ
!! "シート追加" へコピーする
%moto_name = "シート追加"
%saki_name = "シート追加"
%saki_title = "シート追加"
DuplicateMacro( %moto_name, 2, %saki_name, \\
%saki_title, 1 )
!! システムマクロ "シート追加" を文書マクロ
!! "シート追加" へコピーする
ChangeCurrentSheet( "Sheet" & %Str )
DuplicateMacro( %moto_name, 1, %saki_name, \\
%saki_title, 2 )
!! システムマクロ "シート追加" を削除する
DeleteMacro("シート追加" , 1)
!!新規シートの名前設定
%Str=GetSheetCount( )
CurrentSheetItem("2007年" & %Str & "月")
!!元シートを新規シートに複写
Paste()
!!元のシートの名前を書き戻す
%Str=%Str-1
ChangeCurrentSheet( "Sheet" & %Str )
CurrentSheetItem("2007年" & %Str & "月")
ChangeCurrentSheet( "2007年" &(%Str+1) & "月")
いやあ、本当に一太郎は面白いなぁ!!
パズルみたいだ!!(^。^)
サンプルファイルは下からダウンロードしてください。
投稿情報: 午前 10時00分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
間に「漢字書取問題作成マクロ」の話題が入ってしまった。
話を元に戻そう。話は「日経表計算大会腕自慢マクロ部門を一太郎で!!」だ。
前回は一太郎マクロに新規シートを追加する命令がないので
PushKeys()で誤魔化したところまでであった。
そこで次にくまぷーは元シートの内容を新規シートにコピーするために
次のコードを書いた。赤い部分が前回のコードに付け加えた部分である。
ここさえできてしまえば完成したも同じである。
!!シート名をデフォルトに戻す
%Str=GetSheetCount( )
CurrentSheetItem("Sheet" & %Str)
!!元シートをコピー
SelectAll()
Clip()
!!新規シート追加
PushKeys("#F{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"\\
& "{DOWN}{RIGHT}{ENTER}#N")
!!新規シートの名前設定
ChangeCurrentSheet( "Sheet" & %Str )
%Str=GetSheetCount( )
CurrentSheetItem("2007年" & %Str & "月")
!!新規シートに元シートをコピー
Paste()
!!元のシートの名前を書き戻す
%Str=%Str-1
ChangeCurrentSheet( "Sheet" & %Str )
CurrentSheetItem("2007年" & %Str & "月")
ChangeCurrentSheet( "2007年" &(%Str+1) & "月")
くまぷーは上のマクロを実行してみた。狙い通りに新規シートが追加され、 元シートの内容がコピーされていた。うまくいった・・・と思ってさらに 新規シートからもう一枚、新にシートを追加するためにマクロを 実行してみようとした。すると・・・。 | ||
(・_・)......ン? な、ない!! | ||
文書マクロのリストに「シートを追加」マクロが登録されていないのだ。 一太郎では「文書マクロ」という言葉を使ってはいるが、その実態は 「文書マクロ」ではなく「シートマクロ」であったのだ。 「文書マクロ」というならば、文書単位、つまり同じファイルのなかならば、 どのシートからも利用できるはずなのだが、一太郎はシートにマクロが くっついているのだ。 一太郎の複数シートシステムは内部的には複数の文書を1つのファイルに 見せかけているに過ぎないのであろう。 仰っていたことに関わっているのかも知れない。
|
投稿情報: 午前 06時41分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
とうとう漢字書取問題作成マクロシリーズもVer.4となりました。
以前、くまぷー版はⅢで打ち止めだと申しましたが、
仰っていた悪児さんがまだ攻めて来るので、再びこのテーマに
取り組むことに致しました。
それでⅣの特徴を申しますと・・・
一切PushKeys()を使っていない
・・・ということです。PushKeys()を使っていないので、
動作は非常に安定しております。
ところが悪児さん版ではご本人が次のように述べられているように、
不可避的に動作が不安定です。
『元々「PushKeys」をマクロで制御しようというのが「裏技」ですから、十分な動作保証などできない、という立場ですので、すべてのパソコンで正常に動作する、などということは望んでいません。 というか、通常は正常に動作していても、裏で別アプリを動かしているときなど、同じ作業でも誤動作することがありますので、それ以上は諦めています。「CPUの使用状況等によって誤動作することがあります」という注意書きで「終わり」ですね。』
(●`ε´●):くまぷー、おまえはPushKeys()を使わないことによって、 プログラムの動作を安定させたというわけか? 得意技だから、それもおまえらしくていいかもな!! 一太郎Webフォーラムに「No.3585 マクロ作ってみませんか。」という投稿を なさいました。ここでこのコーナーを紹介して、「日経PC表計算腕自慢大会 マクロ部門Q2」の競作を多くの一太郎ファンに呼びかけられました。 お祭り好きのくまぷーです。悪児さん、ありがとう (^o^)/~~~ では「日経PC表計算腕自慢大会マクロ部門Q2一太郎版」用に考えた テクを使っているんだ。だから、「漢字書取問題作成マクロⅣ」は 申し訳ないけど、完成していますよということを示すために パスワード付きでアップしておくよ。 パスワードの公開はしばらく待ってd(^-^)ネ! |
(2006/12/31) |
※現在はパスワードなしのものを公開しています。下よりDLしてください。
投稿情報: 午前 07時33分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
「悪児さんの逆襲・・・漢字書取問題挑戦5(続)」に対して悪児さんのコメントが
公開されました。くまぷーはすでに
「日経PC21表計算腕自慢大会マクロ部門を一太郎で!!」というお題に
移ってしまったので、話の流れが前後してしまうのですが、
今回は以前に戻ってまた「漢字書取問題作成マクロ」扱います。(^^ゞ
くまぷーは「漢字書取問題挑戦5」について次の2点の指摘させていただきました。
1.パソコン(環境)によっては、正常に動作しないことがある。
2.「(残業)と(残業手当)とサービス残業」が上手く変換できない。
詳しくは「悪児さんの逆襲・・・漢字書取問題挑戦5(続)」をご覧下さい。
1.については悪児さんは次のように仰っています。
『元々「PushKeys」をマクロで制御しようというのが「裏技」ですから、十分な動作保証などできない、という立場ですので、すべてのパソコンで正常に動作する、などということは望んでいません。 というか、通常は正常に動作していても、裏で別アプリを動かしているときなど、同じ作業でも誤動作することがありますので、それ以上は諦めています。「CPUの使用状況等によって誤動作することがあります」という注意書きで「終わり」ですね。』
これについてはくまぷーも同感です。PushKeys()を使うとコードが上から順に
実行されなくなったりするなど極めて気まぐれな関数なので、PushKeys()を
使ったプログラムはどうしても気まぐれなプログラムになってしまいます。
できるならばPushKeys()は使いたくない関数です。ですから、プログラムの安定性を
考えれば今までのプログラムの中では一番実用性の高い方式は
くまぷーの「漢字書取問題作成マクロⅡ」ではないのかと思っています。
あれではExcelを一太郎マクロで呼び出し、その機能を利用するという手を
使っています。PushKeys()を使っていないので安定性は一番です。
Excelの普及度を考えるとあの方式がが一番、いいのかなと・・・(^^ゞ
2.については・・・
『ATOKが勝手に音節を区切って部分的に変換してしまうためで、実は、随分前から気づいていて(「漢字書取問題挑戦5」の登録ファイルのメモにある、 「熟語になっている漢字以外は誤動作する可能性があります」という記述がそれです)、 その改良版も出来上がっていたのですが、くまぷーさんのご指摘を待っていたのです。』
・・・ということです。
早速、DLして試してみると漢字の読み取り部分は良くなっていたのですが、
同じ漢字については同じ番号を振ったふりがなに変換するという部分の不具合が
まだそのまま残っていました。何かの手違い?かと思いメールにてお知らせいたしました。
そのことについては悪児さんのサイトをご覧下さい。
現在のバージョンは「きっちーさんのキー割付」を取り入れたものに差し替えたそうです。
これで今までの最強版ができあがったということになるのでしょうか。
・・・てなことを書いていた悪児さんより、下記のご指摘を頂きました。
>くまぷーさんの、「Ⅲ」の場合、
>範囲指定して実行した場合、
>範囲外の漢字まで、
>丸数字&かなに変換されてしまいます。
>これは、「仕様」でしょうか?
【´・ω・`】;「文字全置換」を使っているから、これは仕様です!!
(●`ε´●):おい、くまぷー!そんなことを言っていると悪児さんの
「漢字書取問題挑戦6」が最強だということを認めてしまうことになるぞ!!
【´・ω・`】:だってあっちの方が優れているんだもん、仕方がないよ。
(●`ε´●)::なんだ負けを認めて終わりか?
【´・ω・`】:ここまで戦ったんだから、いいじゃん。相手は一太郎界の大御所なんだし・・・。
(●`ε´●):立て、立つんだジョー3さん!!(「じょー」と打ったら「ジョー3さん」に
変換されてしまいました)いや、立て、立つんだくまぷー!!
今こそ「漢字書取問題作成マクロⅣ」を出すとき時だ!!
【´・ω・`】:しかたがないなあ~。じゃちょっと待っててd(^-^)ネ!
投稿情報: 午前 08時43分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
AddSheet()は名前だけ見ると新規シートを追加する関数のようなのだが、
既存のファイルを読み込んでシートとして追加するものだということがわかった。
なんで単純にシートを追加する関数が無いんだ。それぐらいあってもいいと
おもうのだが、開発側の手抜きではないか?!それともくまぷーのヘルプの見方が
悪いだけなのか?それならば一太郎Webフォーラムにでも「教えてください」と
投稿すれば悪児さんやきっちーさんが教えてくれるかもしない(^^ゞ
うだうだ言っていても方ないので使いたくはなかったのだがPushKeys()による
キー転送でシートを追加することにした。下がそのコードだ。
PushKeys("#F{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"\\
& "{DOWN}{RIGHT}{ENTER}#N")
これで取り敢えず新規シートは追加することが出来た。そこでくまぷーは
追加されたシートの名前が「2007年2月」になるように下のコードを書いた。
PushKeys("#F{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"\\
& "{DOWN}{RIGHT}{ENTER}#N")
ChangeCurrentSheet( "Sheet" & %Str )
%Str=GetSheetCount( )
CurrentSheetItem("2007年" & %Str & "月")
すると不思議なことに一枚目のシートの名前をデフォルトの「Sheet1」のままに しておくと正常に動作するのだが「2007年1月」に変更してマクロを実行すると 誤動作してしまうのだ。マクロのコードを全然変更しないで「Sheet1」の名前を ちょっといじっただけで誤動作してしまうのだ・・・(?_?)。 いったい、どういう内部構造になっているのだろう。 |
手強し、ジャストシステム!! |
マクロ実行前にデフォルトに戻しておけばいいじゃん!! そして実行後に名前を再設定する・・・
かなりドタバタしているけれど取り敢えずこれで動く・・・。 でもまたまた基本的な問題が・・・ ジャストシステムは楽しませてくれるなぁ・・・ |
投稿情報: 午前 05時45分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
いよいよ、今回から日経PC21表計算大会マクロ部門のQ2に一太郎で 挑戦する。Q2のお題は「翌月シートを作成し、今月の残高を自動転記」と いうことである。 一太郎はくまぷーの知る限り、複数シートに対応している唯一の ワープロソフトである。ま、表計算ソフトではないので計算機能が エクセルに劣っているのは当たり前なので、その辺をマクロで処理すれば、 一太郎はもともと複数シートをサポートしている のだから、前回のお題の「漢字書取問題作成マクロ」に比べれば お茶の子さいさい、朝飯前の屁のカッパであろうとタカをくくっていた。( ̄^ ̄) どのようなコードを書けばよいのかと「記録マクロ」を使って調べることにした。 |
またかよ(-_-;) |
コードが生成されないのだ。ふりがな機能の「すべて単語」に続いて「シートの 追加」もかよ。確か、一太郎が複数シート対応になったのはVer.10の ときだったはず。 |
ジャストシステムよ、 |
くまぷーはこう見えても温厚な性格である。一太郎はなんと言っても ジャストシステムの主力製品である。いくらなんでも、何年もの間、知らんぷりで うっちゃられているはずがない。くまぷーの調べ方が甘いのではないかと 気を取り直してヘルプを調べてみることにした。ひょっとしたら、何か手が あるかもしれない。「Sheet」をキーワードにしてヘルプを調べてみた。 |
お~、な~んだ、あるじゃん!! |
検索リストの中にはしっかりと「AddSheet」というマクロ関数が 載っていた。 と、ところが・・・ よく見るとAddSheet関数は「一太郎ファイルからシートを追加します。」とある。 |
(・_・)......ン?、 |
なんとこの関数は単に新規シートを追加するのではなく、既存の 一太郎ファイルをシートとして読み込むという機能なのだ。 使えねぇじゃん!! |
(-_-;) またPushKeys()で キー転送かぁ~? |
投稿情報: 午後 07時25分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
(●`ε´●): 檄! 全国の一太郎マクロファンよ ここに集え!! |
いよいよ年末!!表計算ファンには恒例、日経PCの「腕自慢大会」の季節がやってきた。今年は十周年ということで従来にはなかったマクロ部門が新設された。はっきり言ってエクセルを使って回答するのならば「瞬殺」なので、戯れに一太郎マクロを使って回答を作ってみようと思い立った。 現在、悪児さんが参加してくれました。悪児さんの作品はこちらからDLできます。くまぷーのものはこちらからDLできます。ただ、二つとも現在はパスワードがかかっています。他のかたの参加を待っているので・・・ |
(●`ε´●): 誰か挑戦してみようという勇者は いないのか?! |
※飛び入り・野次馬大歓迎です。掲示板にどうぞ。(^^ゞ |
(2006/12/28) |
投稿情報: 午後 09時42分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (1) | トラックバック (0)
前回、悪児さんの漢字書取問題挑戦5にEdit()?から復帰せずに途中で
止まってしまうという不具合があるということを書いた。
これは恐らく38・39行目の
PushKeys("~^{F2}{F6}{ENTER}{ESC}[Q]")
Edit?()
が原因だと思われる。やはり、どうやってもPushKeys()は不安定だ。
くまぷーのⅢもPushKeys()を使っているので悪児さん版と同じ弱点がある。
ただくまぷー版ではPushKeys()は以下のように使っている。
PushKeys("{ENTER}")
Ruby?
仮に(くまぷーの環境でのことだが)悪児さんのものよりもくまぷーのものの方が
動作が安定しているとすれば、その理由は悪児さん版とくまぷー版とのキー転送の
数の差であろう。
ご覧の通り悪児さん版ではキー転送が6打であるがくまぷー版では1打である。
・・・というようなことを考えていると結局、PushKeys()を全く使わずにルビ設定のダ
イアログを出してしまった方が良かったのではないかと反省している次第である。
InputString()で出しているダイアログはふりがなの確認のためなのだから、
それならばルビ設定のダイアログでも支障はないはずである。
PushKeys()・・・使わずに済むのならば、使わないで済ませたい関数である。
投稿情報: 午後 07時17分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前々回の「悪児さんの逆襲・・・漢字書取問題挑戦5」に対しての悪児さんのコメントが下のものです。
くまぷーさんが、「それは今後の課題と言うことで」、とおっしゃっている同一漢字の混在の件まで
含めると・・・でも、忙しくなるからなぁ、そっちは、やっぱりもう少し先送りかなぁ。(^^)ゞ
-------------------------
って書いたら、くまぷーさんに、
「え、お気づきになっていない?! くまぷー版はⅢでその件にはとっくに対応していますが・・・( ̄^ ̄)えへん」
といわれてしまった(→こちら)。そこまで、気にしていませんでした。(^^;)(^^;)
というわけで、とりあえず、同一漢字の混在と確認のダイアログを表示するバージョンに 差し替えました。(^^)ゞ
さて、どうも、くまぷーさんに押され気味なので、ちょっと、逆襲を。(^^)ゞ
くまぷーさんのⅢですが、悪児の環境では、
(悪)い(児)は(悪児)です
悪い児は悪児です
の2行を変換させようとすると、あとの2つのかなの取得が出来ません。
手入力しなくてはならなくなります。(^^;)(^^;)
もちろん、悪児の5は、ちゃんと読みの候補を取得&表示しますよ~~(^_^)(^_^)/~
さて悪児さんのご指摘の件ですが、確かにくまぷーのⅢでは
(悪)い(児)は(悪児)です
悪い児は悪児です
のふりがなの取得ができません。しかし、これはと思って試してみると「ルビ設定」を手動で実行してもやはりふりがなの取得ができないのです。ところが
(悪)い(児)は(悪児)です
悪い児は悪児です
を
(良)い(子)は(良子)です
良い子は良子です
・・・にすればふりがなの取得が出来るのです。つまり、くまぷー版でできないというのは、一太郎のルビ振り機能の弱さによるものでしょう。悪児さん版がこのパターンでふりがな取得が出来るというのはルビ機能を使わずにATOKの再変換機能を使っているところによるものでしょう。確かにここの部分は悪児さん版の方が素性がいいようです。
しかし、くまぷーが2台のパソコンで悪児さん版を検証してみたところ、まだ問題があるように思えました。
それは・・・先程申し上げたとおり2台のPCで検証したのですが1台では問題なく動くのですがもう1台では途中で止まってしまうのです。前にあった不具合と同じでEdit?が終了しないのです。この場合は「ファイル」-「復帰」をしてもふりがなを取得することができませんでした。ちなみに不具合のあったパソコンのOSはWinXpホームエディションSP1、CPUはPEN4(2.53GHz)、メモリ512MB、一太郎2005です。恐らく悪児さんの環境では不具合はでなかったのでしょうがもう一度確認して頂ければと思います。ちなみに検証に使ったデータは次の3つです。
1.(悪)い(児)は(悪児)です
悪い児は悪児です
2. このマクロの(使用)によってあらかじめご(承知)の上ご使用下さい。
3.免責 このマクロの(使用)によっていかなる損害が生じようと、一切責任は負いません。あらかじめご(承知)の上ご使用下さい。
もう一つの問題点は上の不具合の無かったパソコンでも見られたものです。
(残業)と(残業手当)とサービス残業
という文字列を処理すると
(①ざんぎょう)と(②ざんぎょう手当)とサービス残業
①残業 ②残業手当
となって「手当」のふりがなが取得されないし、「サービス残業」の
「残業」が処理されていないのです。
最初の環境による問題はくまぷーも沢山のパソコンで検証しているわけではないのでひょっとしたら他の環境で問題が起きているのかも知れませんが
(残業)と(残業手当)とサービス残業
に関しては
もちろん、くまぷーのⅢは、ちゃんと読みの候補を取得&表示しますよ~~(^_^)(^_^)/~↑
悪児さんの文よりコピペ & 一部修正
投稿情報: 午後 07時40分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
悪児さんの掲示板にきっちーさん現れた。
悪児さん こんにちは
くまぷーさんとのやりとりを楽しく読ませてもらってます。
私もついつい書取問題つくってしまいました。
動作もふるおーとです(不具合が多少ならず・・・(^^;; )
きっちーさんと言えば知る人ぞ知る一太郎の達人だ。 おそらく日本で(ということは世界で)5本の指に入る一太郎の 使い手ではないであろうか。一太郎の発売元であるJust Systemが 運営しているQ&A掲示板「一太郎Webフォーラム」での活躍は素晴らしい。 その回答数(延べ148件)は悪児さん(延べ82件)の 約2倍である(2006/12/22現在)。 戦っていたところにいきなりガメラまで現れたようなものであろうか。 これはもう、一太郎の2第巨頭そろい踏みといったところだろう。 いまさらながら恐れ多いことを始めてしまったものである。 さて、そのきっちーさん、早速のメガトンパンチだ。
これは悪児さんの漢字書取問題挑戦5ではマクロを実行する前に やってしまおうということである。なるほどこれができれば悪児さんの 漢字書取問題挑戦5の弱点が克服されることになる。 このことに対しては悪児さんもご存じなかったようで次のように コメントなさっている。
| ||
投稿情報: 午前 05時54分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
この「一太郎マクロ初心者奮戦記」もいつの間にか回を重ねて30回を越えていた。
ほんの1ヶ月くらいの間に30回を越えたのだからかなり、いいペースだと言えよう。
いいペースだと言えば、悪児さんもいいペースで漢字書取問題マクロのバージョンを
アップしてきた。今回の漢字書取問題挑戦5に対する悪児さんのコメントが下のものだ。
昔、ジャストウインドウ版の一太郎5には、一太郎のマクロ関数として、 再変換(Retransfer)があって、それを使って、自動振り仮名マクロを作ったことがあります。
今、一太郎で再変換が出来ますが、これは、ATOKの機能になってしまい、一太郎マクロでは、 直接制御できません。で、振り仮名機能を代用にしたのですが、PushKeys()の制御法が見えてきた今、 挑戦することにしました。ただし、初期値では、「再変換」は、PushKeysでは制御できないキーに 割り当てられていますので、あらかじめ、ATOKのキーカスタマイズで、 「再変換」に、shift-ctrl-F2 を割り付けておく必要があります。
とりあえず、「再変換」にのみ注目ということで、振り仮名の確認等、 細かいことは省略したバージョンを紹介します。実行時の動作は、きれいになりました。(^^)(^^)
さて、かなの取得は、多分これで終わりでしょう。次は、「あらかじめ括弧で囲っておく」所まで、マクロ化したいところです。
更には、くまぷーさんが、「それは今後の課題と言うことで」、とおっしゃっている同一漢字の混在の件まで 含めると・・・でも、忙しくなるからなぁ、そっちは、やっぱりもう少し先送りかなぁ。(^^)ゞ
いよいよ悪児さんの逆襲だ。Ver.5では「すべての単語」から離れてふりがなの取得に
別の手を使ってきた。流石にベテランだけあって引き出しの数が多い。
くまぷーも早速ダウンロードして試してみようと思ったのだが・・・
この一太郎マクロ初心者は、一太郎歴はVer.3からなのだが普段たいしたことを
やっていないので標準機能をあまりというか・・・悲しいことにぜんぜん把握していない!!
あらかじめ、ATOKのキーカスタマイズで、 「再変換」に、shift-ctrl-F2 を
割り付けておく必要があります。
(--;) うう |
この辺りのやり方がよくわかりません。(^_^;) 「キーカスタマイズ」から出てくるダイアログには「再変換」が3つあって さらにそれぞれ、「文字未入力」「入力中」「変換中」・・・とたくさん、あります。 どれをいじったら良いのでしょう?(^_^;) |
今度のはかっこいいじゃないですか!! それに動きもいいですね!(^。^) ホンのチラッとだけ考えてヘルプで「ATOK」という 文字列が含まれる関数を全て調べたのですが使えそうなのが 一つもなくてあきらめたのでした。いや~、悪児さん、流石です。
え、お気づきになっていない?! くまぷー版はⅢでその件にはとっくに対応していますが・・・( ̄^ ̄)えへん |
投稿情報: 午前 06時44分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (6) | トラックバック (0)
「すべての単語」をPushKeys()で利用することは実際に問題作成するときには
実用的ではない!!ということを前回言った。それは「PushKeys()の怪・・・」で
述べたように「すべての単語」を実行しても全ての単語にふりがなが
振られるわけではないということだ。そしてさらにPushKeys()で「すべての単語」を
実行した場合は、さらに振り漏れが多くなるということだ。文章の長さがちょっと長めの
問題で実行した場合は、文章の後半では全くふりがなが振られない。
これでは全くダメである。
そこでくまぷーは「全ての単語」一発でふりがなを振ろうとせず、問題文を
スキャンしてかっこの付いた漢字に対してピンポイントでふりがなを振ることにした。
こうすればまず振り漏れはない。効率がよい。
「すべての単語」では実際には全ての単語にふりがながふられない以上、
「ルビ設定」で着実にひとつひとつふりがなを振っていった方が精度が高いに
決まっている。この出発点の違いがくまぷーの「漢字書取問題作成マクロⅢ」と
悪児さんの「漢字書取問題挑戦3」の動作安定性の差として最後まで大きく
響いてしまったと言えるだろう。
そこで悪児さんは「漢字書取問題挑戦4」を出してきた。その時のコメントが
以下のものである。
落とし穴、それは動作確認用のデータの節約でした。 大きなデータだと
当然実行に時間がかかるし、データを復元するのも面倒。
というわけで、漢字が2×3位しかないデータで動作確認をしたわけです。
と、ちゃんと動くんですね。で、できた\(^o^)/ってことで、
そこでやめちゃいました。
くまぷーさんに、「出来ましたよ」と宣言して、パスワードをつけて、
某所に置きました。 あまり簡単にできたので、多分くまぷーさんも
同じものを見つけるだろう、と思っていました。 ところが、くまぷーさんは
違う方法だった。そこで、まず失敗作を公開し、 もったいをつけた上で、
公表しようとして、ちょっと手直しをした上で、 もう一度動作確認を
したのです。
今度は、ちょっと大きめのデータで・・・(^^;)(^^;) と、ちゃんと動かない。
Edit?()が終了してくれないんです。手直しが悪かったのか、と思って、
その前のものも試しましたが、やはり同じ。 なんでぇ?
前にやったときには、ちゃんと動いたのに・・・(-_-;)(-_-;)(-_-;)
データ量の問題だ、ということに気づくまで、ちょっと時間がかかりました。
で、修正したのが、4.です。これなら多分、ちゃんと動くと思います。
一度では、振り仮名を振り残すケースがある、という、くまぷーさんご指摘の、
一太郎のバグにも対応していると思います。
ただ、実行してみれば感じられると思いますが、いかにも挙動が大袈裟で、
全然美しくない。(^^;)(^^;) 無理矢理、やっているぜい・・・って、感じ (^^;)(^^;)
というわけで、これでは、くまぷーさんのⅢに完敗です。m(_ _)m
「くまぷーさんのⅢに完敗です。m(_ _)m」・・・夢か?幻か?あの悪児さんが
くまぷーに・・・う、うれしい・・・(; ;)ホロホロ
で早速DLして「漢字書取問題挑戦4」を試してみた。今度のは 「すべての単語」の
ふりがな振り漏れを回避するためにループで一行々々 「すべての単語」を
実行している・・・。悪児さんも 「すべての単語」に拘るよりも「ルビ設定」で
ピンポイントでふりがなを振る方が素性がいいと(多分)思っていらっしゃるのだが
、ここで「ルビ設定」-「ピンポイント」方式にいまさら切り替えることは
できないところがつらいところだろう。ご自身でも「いかにも挙動が大袈裟で、
全然美しくない。(^^;)(^^;) 無理矢理、やっているぜい・・・って、感じ (^^;)(^^;)」と
仰っておられる。
実際に試してみるとやはり「無理矢理」がたたっているのか、動作に「?」が
付く点がある。それは悪児さん版の1から3で試したときは成功していたはずの1行文
このマクロの(使用)によってあらかじめご(承知)の上ご使用下さい。
が上手く処理されない。この不具合はくまぷーの環境でだけのことであろうか?
ちなみに2行にして
このマクロの(使用)によってあらかじめご(承知)の上ご使用下さい。
このマクロの使用によってあらかじめご承知の上ご使用下さい。
とすると問題なく処理される。
さて1回は自ら負けを認めた悪児さんだがこのまま終わるはずはない。
さすがは、くまぷーさん、と、シャッポ(本当は、シャポー)を
脱いでも良いのですが、 やはり、それでは芸がない、ということで、
もうひとつ、作ってみました。
ということで悪児さんは続けざまに「漢字書取問題挑戦5」を出してきた。
いったいどこまでいくんだろうか?(^。^)
投稿情報: 午前 06時37分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
悪児さんが「WORD FIND」では「悪児ならこう作る」でくまぷー版との 比較を行いその違いを解説していた。そこではJump()の落とし穴について 解説されていた。くまぷーはそれに全く気づかずに作品を公開してしまい、 結果として完敗ということになった。 |
ま、負けました・・・orz |
しか~し、今回の「漢字書取問題作成マクロ」ではけっこう いけているんではなかろうか? まず悪児さんの「漢字書取問題挑戦1」と 「漢字書取問題挑戦2」ではマクロを連続実行できないという致命的な欠点がある。 もともと初代の 「ふりがな-すべての単語」をあらかじめ実行してから マクロを実行しなければならないという点を自動化するということが目的なのだから、 マクロをひとつ実行したら後は最後まで手放しで行かなければならない。 悪児さんも「漢字書取問題挑戦2」は失敗作だとご自身ではっきりと仰っている。 これについても悪児さんは「動作確認をしたところ、とんでもない落とし穴が・・・ (14.に続く)」と仰っている。その落とし穴がどんなものかまだはっきりと 仰ってはいないのだが、くまぷーも「漢字書取問題挑戦3」の不具合を確認している。 |
それは「14.に続く」ということなので、それを待つことにする。さて悪児さん版と くまぷー版の基本的な違いはなんであろうか?悪児さん版ではふりがなを振るのに 「すべての単語」を利用しているがくまぷー版で利用しているのは「すべての単語」では なく「ルビ設定」である。この違いが大きい。(^^ゞ 実際に問題作成するときには実用的ではない!!(^^ゞ あとで言うd(^-^)ネ! |
投稿情報: 午前 12時51分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
おー悪児さんのサイトを見たら・・・
くまぷーさんの、「 ★一太郎マクロ初心者奮戦記★」に便乗して、 「悪児なら、こう作る」を始めましたが、その後、くまぷーさんに、 悪児の、「漢字書取問題作成」をネタに、「くまぷーならこう作る・・・」という、 「挑戦状」を頂戴しました。(^^)(^^)。「漢字書取問題作成」では、マクロに対応していない 「ふりがな-すべての単語」をあらかじめ実行してからマクロを実行する仕様にしていましたが、 くまぷーさんは、その「部分も自動にすること」に挑戦するとおっしゃる。
そんな、無茶な・・・、と思わないこともなかったけど、挑戦された以上仕方がない。
マクロ作者魂に火をつけてしまったらしい・・・(^^ゞ
初代の「042漢字書取問題作成」に続いて11.漢字書取問題挑戦1、
12.漢字書取問題挑戦2、13.漢字書取問題挑戦3と3本のマクロが発表されている。
いったい、いくつまでいくんだろう(?_?)
さて、くまぷー版と悪児さん版を比べてみて如何であろうか?
手前味噌になってしまうが、動作の安定性とかを見ると決して大御所の作に
劣るものではないとおもうのだが・・・
投稿情報: 午後 06時53分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
いよいよ漢字書取問題作成マクロⅢの公開です。ここでもう一度、
漢字書取問題作成マクロの流れを整理してみます。
悪児さんのバージョン(漢字書取問題作成マクロ・初代)はマクロ実行前に
『「ふりがな」-「すべての単語」を実行してから、マクロを実行』しなければなりません。
これは一太郎の標準コマンド「すべての単語」がマクロに対応していないというところから
来る制限でした。
そこで、くまぷーは漢字書取問題作成マクロⅡを作りました。
漢字書取問題作成マクロⅡは一太郎からExcelを呼び出し、その機能を
使い悪児さんバージョンの制限を回避するというものでした。
しかし、漢字書取問題作成マクロⅡはExcelの機能を使うが故に
Excelのインストールされていない環境では使えないという制限がありました。
漢字書取問題作成マクロⅢは悪児さんバージョンの制限と
漢字書取問題作成マクロⅡの制限をともに克服したものです。
Excel無しの環境で、かつマクロ実行前に『「ふりがな」-「すべての単語」を
実行することなく、漢字書取問題を作成することができます。
以下がその実行法です。 手順1:出題する漢字を全角の括弧で囲む。 * * 手順2:マクロ処理したい範囲を選択する。 * * 手順3:マクロ「漢字書取問題作成Ⅲ」を実行する。すると下のように出力される。 * * メモ1:ふりがなを自動で取得できない場合、またはふりがなが正しくない場合は 確認のダイアログから正しいふりがなを入力する。 | |
投稿情報: 午後 09時03分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
『戯れに一太郎を使って「漢字書取問題作成マクロⅡ」を作ってみました。
できばえは如何でしょうか?』ということを掲示板に書き込んだら、
悪児さんから下記のレスを頂いた。
試してみました。
素晴らしい。(^^)(^^)
非表示で呼び出せるんですね。〆(._.)
で、ちょっと気づいたことですが・・・(^^)ゞ
あ(悪児)は、(悪)い(児)です。
のような場合の読み分けが出来ないのは仕方がないとして、
(悪)い(児)は(悪児)です。
の場合だと、後ろの「悪児」が
「悪」と「児」に分割されてかなに直され、
最後に、「見つかりません」という
エラーになってしまいます。(^^;)(^^;)
ご意見ありがとうございます。
>「悪」と「児」に分割されてかなに直され、
>最後に、「見つかりません」という
>エラーになってしまいます。(^^;)(^^;)
そうですね。
「(悪)い(児)は(悪児)です。」の場合。
1回目のループで「悪」が下のように変換され、
(① あく)い児は(① あく)児です。
2回目のループで「児」が下のように変換されます。
(① あく)い(② じ)は(① あく)(② じ)です。
その結果、3回目のループで「悪児」を変換しようとするのですが、
ご指摘の通り、すでに「悪児」は読み仮名に変換されていて
存在しないので、「見つかりません」というエラーになってしまいます。
実はこのことはすでにわかっていたことなのですが
注として書くのを忘れてしまいました。m(__)m
実は漢字書取問題作成マクロⅡは括弧穴埋め問題作成システムの
コードを元にしたものなので・・・(^^ゞ
括弧穴埋め問題作成マクロの時は
メモ
2)「残業」「サービス残業」など共通の語句を含むことはできない。
ということを明記しておいたのですが
今回は忘れてしまいました。
http://www.geocities.jp/kuma_pooh1958/word001.htm
共通の語句を含む場合は語句の長い方から処理する
アルゴリズムに変更すればよさそうですね。それは今後の課題と言うことで・・・
P.S. 1・3マクロ館で「一太郎マクロ初心者奮戦記」を紹介していただいて
本当にありがとうございました。
投稿情報: 午前 05時52分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前回からの続きです。
選択された文字列を変数%Sentenceに格納する。
!!第4ブロック
%Str =GetString()
%StrNum = Size(%Str)
%Sentence = ""
For %i= 1 to %StrNum
%Sentence = %Sentence & %Str(%i)
Next
ここでは選択範囲の文字列を一字々々チェックし、全角左括弧、全角右括弧を
検索する。括弧が見つかったら、その間にある文字列を変数%Goku()に、
そのふりがなを変数%Yomi()に格納していく。
変数%GokuNumにはユーザが全角括弧で指定した語句数を格納する。
尚、補足であるがエクセルのふりがなはデフォルトでカタカナを指定しているので、
Zen()とHira()でひらがなでふりがなが表示されるようにしている。
!!このプログラムの心臓部(第5ブロック)
%CharCount = Len(%Sentence)
%GokuNum=1
For %i = 1 To %CharCount
If Mid(%Sentence, %i, 1) = "(" Then
%j = 0
%Cnt = %Cnt + 1
Do While Mid(%Sentence, %i + %j, 1) <> ")"
%j = %j + 1
Loop
%Goku(%GokuNum) = Mid(%Sentence, %i + 1, %j - 1)
%Yomi(%GokuNum) = Hira(Zen(%Excel.GetPhonetic(%Goku(%GokuNum))))
%GokuNum = %GokuNum + 1
End If
Next
WarningMode(0)で問い合わせのダイアログが表示されないようにする。
文字列全置換で全角左括弧、全角右括弧を消去する。
!!第6ブロック
WarningMode(0)
文字全置換(.検索文字列="(",.置換文字列="",.検索方向=3,.あいまい検索=1,.確認=0)
ReviveAdvancedRange( )
文字全置換(.検索文字列=")",.置換文字列="",.検索方向=3,.あいまい検索=1,.確認=0)
setMarumojiでサブプロシージャを呼び出し、グローバルな配列変数$Marumoji()に
丸数字を格納しておく。
Forループでユーザが全角括弧で指定した漢字を丸文字付きのふりがなに置換していく。
WarningMode(1)で問い合わせのダイアログが表示されるようにしておく。
呼び出したエクセルの後始末。
カーソルを文章末に移動し、ユーザが全角括弧で指定した漢字を書き出す準備をする。
!!第7ブロック
setMarumoji
for %i = 1 to %GokuNum -1
ReviveAdvancedRange( )
文字全置換(.検索文字列=%Goku(%i),.置換文字列="(" & $Marumoji(%i) & %Yomi(%i) & ")",.検 索方向=3,.あいまい検索=1,.確認=0)
next
WarningMode(1)
%Excel.Quit
Set %Excel = Nothing
EndOfParagraph( 2 )
Insert("",1)
Insert("",1)
文章末にユーザが全角括弧で指定した漢字に丸数字を付けて書き出す
以上が「漢字問題作成マクロⅡ」プログラムの主部である。
あとはサブプロシージャのsetMarumajiのコードだけだ。
!!サブプロシージャ
Sub setMarumoji
$Marumoji(1) = "① "
$Marumoji(2) = "② "
$Marumoji(3) = "③ "
$Marumoji(4) = "④ "
$Marumoji(5) = "⑤ "
$Marumoji(6) = "⑥ "
$Marumoji(7) = "⑦ "
$Marumoji(8) = "⑧ "
$Marumoji(9) = "⑨ "
$Marumoji(10) = "⑩ "
$Marumoji(11) = "⑪ "
$Marumoji(12) = "⑫ "
$Marumoji(13) = "⑬ "
$Marumoji(14) = "⑭ "
$Marumoji(15) = "⑮ "
$Marumoji(16) = "⑯ "
$Marumoji(17) = "⑰ "
$Marumoji(18) = "⑱ "
$Marumoji(19) = "⑲ "
$Marumoji(20) = "⑳ "
End Sub
単純にグローバルな配列変数$Marumoji()に丸数字を格納するだけだ。
投稿情報: 午後 08時32分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前回に書いたことだが、この「漢字書取問題作成マクロⅡ」のポイントは
一太郎マクロでExcelを操作する点である。下のコードがExcelを起動し、
ExcelのGetPhoneticを利用して「一太郎」という漢字を「イチタロウ」という
読み仮名に変換するものである。
%Kanji = "一太郎"
Set %Excel = CreateObject("Excel.Application")
%Yomi=%Excel.GetPhonetic(%kanji)
MsgBox(%Yomi)
この手の「アプリケーションの連携」に関するサンプルコードは割と
つまらないものが多い(と思う)のだが、このコードはけっこう面白いのではないだろうか?
さて、それでは「漢字書取問題作成マクロⅡ」の全コードを?ブロックに分けて紹介しよう。
!!変数宣言部(第1ブロック)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!漢字書取問題作成マクロⅡ
!!くまぷー作
!!2006/11/21
!! http://members.jcom.home.ne.jp/kumano-pooh-san/
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
declare variable %Goku(20)
declare variable %Yomi(20)
%Goku(20)はユーザが全角括弧で指定した漢字を、 %Yomi(20)は
そのふりがなを格納する配列。
!!第2ブロック
SelectRangeStart( )
StartOfRange()
%StartPage=GetPage()
%StartRow=GetRow()
%StartCol=GetColumn()
EndOfRange()
%EndPage=GetPage()
%EndRow=GetRow()
%EndCol=GetColumn()
後でJump()を使うために選択範囲開始部分と選択範囲終了部分のページ、
列、文字数を変数に格納。
!!エクセルを起動(第3ブロック)
Set %Excel = CreateObject("Excel.Application")
エクセルをバックグラウンドで起動し、変数%Excelで一太郎マクロから
操作できるようにする。
(続く)
投稿情報: 午前 02時58分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
PushKeys()を使って「書式」-「ふりがな」-「すべての単語」を実行するのは
タイミング的に見てどうもうまくいかないようだ。
(●`ε´●):PushKeys()を使うのは諦めるのか?
【´・ω・`】:いや、PushKeys()を使って「書式」-「ふりがな」-「すべての単語」を
実行するのを諦めるんだ。
(●`ε´●):なんだ、はっきりしない言い方だな。
【´・ω・`】:PushKeys()を使うのを諦めたわけではないんだが
すでに「漢字書取問題作成マクロⅡ」を
公開しているのでそちらを先に紹介しておこうと思って・・・
KanjiKakitori_Taro.zip(漢字書取問題作成マクロⅡ)をダウンロード
(●`ε´●):「漢字書取問題作成マクロⅡ」はあるけど「漢字書取問題作成マクロⅠ」が
ないようだが・・・
【´・ω・`】:悪児さんの公開している「漢字書取問題作成」が
「漢字書取問題作成マクロⅠ」のつもりなんだ。
(●`ε´●):そういうことか。
【´・ω・`】:「漢字書取問題作成マクロⅡ」の仕様は以下の通りだ。
使用法
手順1)下のように漢字を全角の括弧で囲む。
免責 このマクロの(使用)によっていかなる損害が生じようと、一切責任は負いません。あらかじめご(承知)の上ご使用下さい。
手順2)マクロ処理したい範囲を選択する。
手順3)マクロ「漢字書取問題作成Ⅱ」を実行する。すると下のように出力される。
免責 このマクロの(① しよう)によっていかなる損害が生じようと、一切責任は負いません。あらかじめご(② しょうち)の上ご(① しよう)下さい。
① 使用, ② 承知
備考)このマクロを実行するためにはエクセルが必要です。
開発環境 WindowsXp
一太郎2005
エクセル2000
【´・ω・`】:ポイントは一太郎マクロでExcelをコントロールして、その機能を
使っているところだ。Excelを使うことによって『「ふりがな」-「すべての単語」を
実行してから、マクロを実行』しなければならないという「漢字書取問題作成」の
制限を回避している。
(●`ε´●):ではこの「漢字書取問題作成マクロⅡ」が悪児さんの「漢字書取問題作成」に
対する「くまぷーならこう作る」の回答と考えていいのか?
【´・ω・`】:いや、悪児さんの掲示板でこう言われているし・・・
Excelがないと・・・
というのが、(^^;)(^^;) ですが、
一太郎マクロでExcelを動かす、
など、素晴らしい業が入っています。
【´・ω・`】:いちおう「素晴らしい業」と褒めて頂いてはいるのだが
「Excelがないと・・・というのが、(^^;)(^^;) ですが」ということで手放しで、
というわけではない。「くまぷーならこう作る」ということで公開するのだから、
当然、このあたりはクリアーしているものにしなければ芸が無いと
いうことになるだろう。
(●`ε´●):それではExcelなしのバージョンを期待していいんだな?!
【´・ω・`】:うん、もう完成している。この「漢字書取問題作成マクロⅡ」の
解説を少ししてから近日中に「漢字書取問題作成マクロⅢ」として
公開するから待っててd(^-^)ネ!
投稿情報: 午後 07時18分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
今回はPushKeys()はちょっと棚の上に乗せておいてJump()についてだ。
この関数はページ、行、列を指定してカーソルを移動させる便利な関数だ。
記録マクロを使って文字を書き込むとすぐに出てくるアレだ。
わりと便利そうなので使っていたのだが、悪児さんから以下のような指摘を
受けてしまった。
一太郎マクロでは、Jump()は、ちょっと怖いのです。
予期せぬ誤動作の元になることがあります。
文字数で位置を指定するのですが、
プロポーショナルフォントが導入されて以来、
フォントに左右されるようになってしまいました。
特に罫線表では、1つのセルに入る文字数が、
フォントによって変わってしまうので、
入る文字によって、ジャンプ位置が微妙にずれ、
それが誤動作につながる可能性があるのです。
_| ̄|○うっ・・・ |
言われてみれば至極当然のことなのだが、くまぷーはまったく気づ いていなかった。くまぷーの参考にしている一太郎マクロ入門が等幅 フォント全盛時のDOS版Ver.5用だったと言っても単なる言い訳に しかならない・・・やはり、一太郎マクロのキモはカーソルを如何に 巧みに操るかだな・・・。 悪児さん、勉強になりましたたぜい!!サンクスです。m(__)m |
投稿情報: 午前 12時12分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
一太郎マクロのPushKeys()の動作にはどうも妙なクセがあるようだ。
そこでくまぷーはヘルプを見てみた。そこには「PushKeys関数は入力待ちに
なってはじめて呼び出されます。」とある。そこでくまぷーは以下のコードを
使って検証してみることにした。
For %i = 1 to 5
PushKeys("1{ENTER}2{ENTER}")
Next
Wait(3)
Insert("BEBE",1)
Wait()はマクロの実行を停止し、指定した時間後に再開しするという命令だ。
こうすればPushKeys()を実行した後に3秒おいてInsert()が実行されるのでは
ないかと期待したが、結果は下図のとおりで、結局はPushKeys()よりも
Insert()が先に実行されてしまった。
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
そこで次に試したのがtry文を利用した例外処理だ。
try
gonnyo
exception
Hoge
end try
tryとexceptionの間に記述したコードgonnyoでエラーが起きると
exception以下のHogeが実行される。この条件分岐を使えば
ひょっとしたら何とかなるかも知れないと根拠はないのだが足掻いてみた。
try
For %i = 1 to 5
PushKeys("1{ENTER}2{ENTER}")
Next
%x=0
%x=9/%x !!ゼロ除算
exception
case "searcherror"
case else
Insert("BEBE",1)
end try
しかし、結果は先程と同じでPushKeys()よりもInsert()が先に
実行されてしまった。とほほ・・・。(-_-;)
投稿情報: 午後 05時51分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
一太郎マクロのPushKeys()の動作にはどうも妙なクセがあるようだ。
そこでくまぷーはヘルプを見てみた。そこには「PushKeys関数は入力待ちに
なってはじめて呼び出されます。」とある。
そこでくまぷーは以下のコードを使って検証してみることにした。
For %i = 1 to 5
PushKeys("1{ENTER}2{ENTER}")
Next
Insert("BEBE",1)
コードが上から下に逐次実行されるのならば実行結果は
下の通りになるはずである。
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
ところが実際にはそうはならず、下のような結果になってしまう・・・。
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Insert("BEBE",1) ・・・・・の方が
For %i = 1 to 5
PushKeys("1{ENTER}2{ENTER}")
Next
・・・・・よりも先に実行されてしまうのだ!!
(●`ε´●):
|
ヘルプに「PushKeys関数は入力待ちになってはじめて呼び出されま す。」とあるのはこういうことか・・・。 |
投稿情報: 午前 11時45分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前回のPushKeys()で「すべての単語」を実行することはできる。
しかし、実行結果をよく見ると、ふりがなが振られていない語句が
あることがわかる。そもそもPushKeys()から「すべての単語」を
実行するのではなく、直接メニューからPushKeys()を実行しても
ふりがなの振り漏れがあるようだ。このあたりも一太郎の機能上の
不備と言えるだろう。
振り漏れがある場合、何度か繰り返して「すべての単語」を
実行すると少しずつ振り漏れが少なくなっていき、やがて全ての
語句に漏れなくふりがなが振られるようだ。
PushKeys()から「すべての単語」を実行するのと直接メニューから
「すべての単語」を実行するのとを比較してみるとPushKeys()の方が
振り漏れが多いのだが、繰り返しPushKeys()を手動で繰り返し実行するうちに
徐々に振り漏れが少なくなっていくのは同じであるようだ。
そうであるならばPushKeys()をFor~Loopで適当な回数だけ繰り返せば
振り漏れはほとんど無くなるはずである。そこで考えたのが以下のコードである。
For %i = 1 to 100
PushKeys("#O{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{RIGHT}{DOWN}{DOWN"\\
& "}{ENTER}{ENTER}")
Next
このようにしてやればPushKeys()が100回繰り返されるはず・・・。
ところが実行してみると、どうも100回も繰り返されているようには
思えない。たった1回しか実行されていないような感じがする。(?_?)
これはいったい・・・???。
投稿情報: 午前 05時57分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
前回、「一太郎マクロの制限により」と言った。
それは具体的には何のことかというと、記録マクロを使って、
「書式」-「ふりがな」-「すべての単語」を実行しようとしても、
肝心の「すべての単語」がグレイアウトされてしまい実行不能なのだ。
こういうようなマクロ未対応のコマンドが度重なるバージョンアップにも
かかわらず、放置されている。このあたりがJUST SYSTEMの
やる気を疑ってしまうところである。
話が横に逸れてしまうが三四郎で言えばセルの結合・解除が
マクロ未対応のまま放置されている。これでは三四郎よりもただで手に入る
OpenOffice.orgのCalcの方が優れていると言わざるを得ない。
これでは、いくら安くてもわざわざカネを払ってまで三四郎を
手に入れる理由はあまりない。
三四郎はこのままでは朽ち果てて消えていくしかない・・・。
是非、次回のバージョンではなんとかして欲しい物である。
さて、「すべての単語」を直接実行する命令が、なければキー転送で
誤魔化すことができるであろうか。一太郎には記録マクロの他に
「キー記録」という機能が装備されている。
「キー記録」と「記録マクロ」の機能はとても似ている。違いは「記録マクロ」では
マウスとキーボードの操作を記録してコード化するのに対し、
「キー記録」は文字通り、キーボードの打鍵のみをコード化する。
そこで「キー記録」を使って「すべての単語」を実行してみることにする。
作られたコードは以下の通りだ。
PushKeys("#O{DOWN}{DOWN}{DOWN}{DOWN}{DOWN"\\
& "}{DOWN}{DOWN}{RIGHT}{DOWN}{DOWN"\\
& "}{ENTER}{ENTER}")
これを実行するとどうやら「すべての単語」を実行したのと同じ結果になる。
だからこのコードを悪児さんの「漢字書取問題作成」マクロの頭にくっつければ
OKのはずなのだが・・・
これで上手くいくほど甘くはあるまい・・・
投稿情報: 午後 10時13分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
さてWORD FINDを作り終えてしまったので次のお題を考えているのだが
、何がいいだろうか?一太郎の大御所がせっかく「悪児ならこう作る」なんていう
コーナーを作ってくれているのだから、それを意識して「くまぷーならこう作る」と
いうお題はどうだろうか。
一太郎の大御所である悪児さんが作ったものに対してくまぷー版を提示する。
神をも恐れぬ不遜な考えとお叱りを受け、あるいは失笑されそうだが、
面白そうなので敢えて挑戦してみよう。
具体的には悪児さんの「漢字書取問題作成」マクロを扱うことにしようか・・・。
これは以前に、くまぷーが悪児さんに作ってもらったマクロである。
せっかく作ってもらったマクロなのだが、一太郎マクロの制限により、
一部満足できないところがある。それをなんとかしてみたい。
このマクロの仕様を見て欲しい。マクロファイルの説明から引用すると
以下のようになっている。
マクロ名 「漢字書取問題作成」
機能 問題文の中()で囲まれた語句を順に(丸数字+ひらがな)に
置換し、解答(元の漢字)を文末に挿入する。
実行法 対象となる文書を開き、範囲指定して、「ふりがな」-「すべての単語」を
実行してから、マクロを実行する。
メモ ()数は20まで。
括弧は、全角の()を使う。
「すべての単語」実行時に読みを確認する必要はありません。
平仮名置換時に確認します。
一太郎2005では「すべての単語」はマクロに対応していないので
事前に実行しなければなりません。
なお、マクロ実行中にふりがなはすべて削除されます。
上に書いた「一部満足できない部分」とは『「ふりがな」-「すべての単語」を
実行してから、マクロを実行』しなければならないというところである。
せっかくマクロで自動処理をするのだから、この部分も自動にすることは
できないであろうか?
大御所が敢えてこの仕様でこのマクロを公開したのだから尋常な
手段でこの部分をどうにかすることはできないであろう。
しかし、盲蛇に怖じずと言われても一太郎マクロ初心者はものが
見えていない故に突き進むのであった・・・。
「漢字書取問題作成」は悪児さんのサイトからダウンロードできます。
番号は042です。
投稿情報: 午後 04時09分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
さて前に一太郎マクロの大御所悪児さんからメールを
頂いたということを書いた。あちらのサイトを覗いてみると
12月5日現在で以下の3つのマクロが登録されている。
1.アルファベットアトランダム入力
2.文字列取得
3.リスト単語降順ソート
さすがに大御所だけのことはある。手慣れたものだ。
学ぶところは多々あるのだがその中でも特に注目したいのは
カーソルの移動である。前回書いたことだがワープロマクロを
自由に操るのに一番大切なことは文字の書き込みと
文字の読み取りである。
文字の書き込みにはInsert()、読み取りにはGetCharacter()、
またはGetString()なのだが、一太郎マクロではカーソル位置に
文字を書き込み、カーソル位置の文字を読み取る仕様なのであるから
カーソルの移動が一太郎マクロを操る際のポイントとなる。
そういうわけで一太郎マクロの極意はカーソルの移動にあると言っても
差し支えあるまい。
悪児さんのコードからカーソルの移動のノウハウを頂くとしよう・・・。
投稿情報: 午前 06時21分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
いよいよ、WORD FIND完成版の公開だ。実はいよいよ、と言っているが
とうの昔に出来上がっていたのだ。だから、今コードを見直してみると
気持ちの悪い部分もあるのだが、一太郎マクロ処女作ということで
敢えて手直しせずに公開することにした。下がそのキャプチャー画面である。
*
*
*
*
*
*
*
*
*
*
免責: | このマクロの使用によっていかなる損害が生じようと、一切責任は負いません。あらかじめご承知の上ご使用下さい。 |
マクロ名: | 「WORD FIND」 |
機能: | リストに入力した単語を12×12のマス目にランダムに配置する。 |
詳細: | 単語は20個まで。 |
単語配置は右から左、左から右、上から下、下から上、右下から左上、左上から右下、左下から右上、右上から左下の8方向にランダムに配置する。 | |
ブランクのマスにはオプションでランダムにアルファベットを配置する。 | |
実行法: | 右上の「★実 行★」ボタンをクリックする。 |
以下がそのコードだ。
declare variable $MyCell(1 To 12, 1 To 12)
%TopWall = 1
%BottomWall = 12
%LeftWall = 1
%RightWall = 12
%LoopCountMax=100
!!単語の長さを取得する
SetLength
!!単語を長い順にソートする
For %i = 1 to 20-1
For %j = %i + 1 To 20
If $Length(%i) < $Length(%j) Then
%Temp =$MyWord(%i)
$MyWord(%i) = $MyWord(%j)
$MyWord(%j) = %Temp
%TempNum =$Length(%i)
$Length(%i) = $Length(%j)
$Length(%j) = %TempNum
End If
Next
Next
!!単語、既データ消去
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=44)
For %i = 1 To 20
削除(.回数=12)
Insert($MyWord(%i))
DownCell
Next
!!単語の長さ、既データ消去
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=69)
For %i= 1 to 20
削除(.回数=2)
Insert($Length(%i))
DownCell()
Next
!!単語をメモリ上のセル%MyCellに書き込む
%LoopCount=1
Do
%WordNum = 1
For %i = 1 To 30000
If %WordNum = 20+1 Then !!20はwordの最大数
Exit Do
End if
!!%LoopCountMaxに達しても回答例が見つからないときの処理--開始--
If %LoopCount = %LoopCountMax Then
%para = {.Title = "回答例が見つかりません。", .Icon = 3, .Button = 5}
%Ans = MsgBox("処理を続けますか?", %para)
If %Ans = 6 Then !! 6は「はい」
%LoopCount = 0
Else
Stop
End If
End If
!!%LoopCountMaxに達しても回答例が見つからないときの処理--終了--
%Str = $MyWord(%WordNum)
Randomize(ThisTime())
%X = Int(Rand() * 12) + 1
%Y = Int(Rand() * 12) + 1
Randomize(ThisTime()) !!8方向
%Dir = Int(Rand() * 12)+1
%Length = Len(%Str)
%CanPlace = True
Select Case %Dir
Case 1 !!Bottom to Top
If %Y - %Length + 1 >= %TopWall Then
For %DY = %Length To 1 Step -1
If $MyCell(%Y - %DY + 1, %X) <> "" And $MyCell(%Y - %DY + 1, %X) <> Mid(%Str, %DY, 1) Then
%CanPlace = False
Exit For
End If
Next
If %CanPlace = True Then
For %DY = %Length To 1 Step -1
$MyCell(%Y - %DY + 1, %X) = Mid(%Str, %DY, 1)
Next
%WordNum = %WordNum + 1
End If
End If
Case 2 To 3 !!LeftBottom to RightTop
If %Y - %Length + 1 >= %TopWall Then
If %X + %Length - 1 <= %RightWall Then
For %DY = %Length To 1 Step -1
For %DX = 1 To %Length
If $MyCell(%Y - %DY + 1, %X + %DX - 1) <> "" And $MyCell(%Y - %DY + 1, %X + %DX - 1) <> Mid(%Str, %DY, 1) Then
%CanPlace = False
Exit For
End If
Next
Next
If %CanPlace = True Then
For %DY = %Length To 1 Step -1
$MyCell(%Y - %DY + 1, %X + %DY - 1) = Mid(%Str, %DY, 1)
Next
%WordNum = %WordNum + 1
End If
End If
End If
Case 4 !! Left to Right
If %X + %Length - 1 <= %RightWall Then
For %DX = 1 To %Length
If $MyCell(%Y, %X + %DX - 1) <> "" And $MyCell(%Y, %X + %DX - 1) <> Mid(%Str, %DX, 1) Then
%CanPlace = False
Exit For
End If
Next
If %CanPlace = True Then
For %DX = 1 To %Length
$MyCell(%Y, %X + %DX - 1) = Mid(%Str, %DX, 1)
Next
%WordNum = %WordNum + 1
End If
End If
Case 5 To 6 !!LeftTop to RightBottom
If %X + %Length - 1 <= %RightWall Then
If %Y + %Length - 1 <= %BottomWall Then
For %DX = 1 To %Length
For %DY = 1 To %Length
If $MyCell(%Y + %DY - 1, %X + %DX - 1) <> "" And $MyCell(%Y + %DY - 1, %X + %DX - 1) <> Mid(%Str, %DY, 1) Then
%CanPlace = False
Exit For
End If
Next
Next
If %CanPlace = True Then
For %DX = 1 To %Length
$MyCell(%Y + %DX - 1, %X + %DX - 1) = Mid(%Str, %DX, 1)
Next
%WordNum = %WordNum + 1
End If
End If
End If
Case 7 !! Top To Bottom
If %Y + %Length - 1 <= %BottomWall Then
For %DY = 1 To %Length
If $MyCell(%Y + %DY - 1, %X) <> "" And $MyCell(%Y + %DY - 1, %X) <> Mid(%Str, %DY, 1) Then
%CanPlace = False
Exit For
End If
Next
If %CanPlace = True Then
For %DY = 1 To %Length
$MyCell(%Y + %DY - 1, %X) = Mid(%Str, %DY, 1)
Next
%WordNum = %WordNum + 1
End If
End If
Case 8 To 9 !!RightTop to LeftBottom
If %X - %Length + 1 >= %LeftWall Then
If %Y + %Length - 1 <= %BottomWall Then
For %DX = %Length To 1 Step -1
For %DY = 1 To %Length
If $MyCell(%Y + %DY - 1, %X - %DX + 1) <> "" And $MyCell(%Y + %DY - 1, %X - %DX + 1) <> Mid(%Str, %DX, 1) Then
%CanPlace = False
Exit For
End If
Next
Next
If %CanPlace = True Then
For %DX = %Length To 1 Step -1
$MyCell(%Y + %DX - 1, %X - %DX + 1) = Mid(%Str, %DX, 1)
Next
%WordNum = %WordNum + 1
End If
End If
End If
Case 10 !! Right to Left
If %X - %Length + 1 >= %LeftWall Then
For %DX = %Length To 1 Step -1
If $MyCell(%Y, %X - %DX + 1) <> "" And $MyCell(%Y, %X - %DX + 1) <> Mid(%Str, %DX, 1) Then
%CanPlace = False
Exit For
End If
Next
If %CanPlace = True Then
For %DX = %Length To 1 Step -1
$MyCell(%Y, %X - %DX + 1) = Mid(%Str, %DX, 1)
Next
%WordNum = %WordNum + 1
End If
End If
Case 11 To 12 !! RightBottom to LeftTop
If %X - %Length + 1 >= %LeftWall Then
If %Y - %Length + 1 >= %TopWall Then
For %DX = %Length To 1 Step -1
For %DY = %Length To 1 Step -1
If $MyCell(%Y - %DY + 1, %X - %DX + 1) <> "" And $MyCell(%Y - %DY + 1, %X - %DX + 1) <> Mid(%Str, %DX, 1) Then
%CanPlace = False
Exit For
End If
Next
Next
If %CanPlace = True Then
For %DX = %Length To 1 Step -1
$MyCell(%Y - %DX + 1, %X - %DX + 1) = Mid(%Str, %DX, 1)
Next
%WordNum = %WordNum + 1
End If
End If
End If
End Select
Next
%LoopCount = %LoopCount + 1
Loop
%para = {.Title = "回答例が見つかりました。", .Icon = 3, .Button = 5}
%Ans = MsgBox("空白をアルファベットで埋めますか?", %para)
!!SlamIt
If %Ans=6 Then
FillBlank
End If
SlamIt
Sub SetLength
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=44)
For %y = 1 to 20
%Str=""
For %x = 1 to 12
%S = GetCharacter()
If %S= " " Or %S = " " Then
Exit For
End If
右
%Str = %Str & %S
Next
$MyWord(%y)=%Str
$Length(%y) = Len(%Str)
ジャンプ(.ページ番号=1,.行番号=(5+%y),.文字位置=44)
Next
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=68)
For %i= 1 to 20
削除(.回数=2)
Insert($Length(%i))
DownCell()
Next
End Sub
sub FillBlank
ジャンプ(.ページ番号=1,.行番号=4,.文字位置=2)
範囲選択開始(.単位=1)
範囲選択単位(.単位=7)
ジャンプ(.ページ番号=1,.行番号=15,.文字位置=73)
削除(.回数=1)
For %Y = 1 To 12
For %X = 1 To 12
Randomize(ThisTime())
%num = Int(Rand() * 26) + 97
If $MyCell(%Y, %X)="" then
$MyCell(%Y, %X)= Char(%num)
End If
Next
Next
end sub
sub SlamIt
ジャンプ(.ページ番号=1,.行番号=4,.文字位置=2)
範囲選択開始(.単位=1)
範囲選択単位(.単位=7)
ジャンプ(.ページ番号=1,.行番号=15,.文字位置=73)
削除(.回数=1)
For %Y = 1 To 12
For %X = 1 To 12
Randomize(ThisTime())
%num = $MyCell(%Y, %X)
Insert(%num)
if %X < 12 Then
RightCell()
End If
Next
DownCell
LeftCell(11)
Next
end sub
投稿情報: 午前 05時44分 カテゴリー: 一太郎マクロ初心者奮戦記Ⅱ | 個別ページ | コメント (0) | トラックバック (0)
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
最近のコメント