Lunatical life in broad daylight
へにょ~~~…… リ ツ 。ヮ ツ。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
集計用マクロが完成しました♪
ノリ ;・ヮ⌒ル 「というわけで、お姉ちゃんがオリコンタワー予選で面白い戦いをしている間に、幾多のデバッグを経て生徒会選挙の集計用マクロが完成しましたよ」
ッリ *⌒ヮ⌒*)ッ 「わぁい♪ さっそく動かしてみようよぉ~」

(ゆずっちマクロ2号 動作前)
100308-01.jpg

(ゆずっちマクロ2号 動作後)
100308-02.jpg

ッリ ;・ヮ・)ッ 「えっと……とりあえず、何が起こったのか説明して欲しいんだけど」
ノリ ・ヮ・ル 「サイズの都合で見えないですけれど、この表には、立候補した県のセルに"◎"を入れてあります。そのセルを参照して、『得票済都道府県』の欄に☆付きで入力したのですよ。」

ッリ川・ヮ・)ッ 「まさか、これだけってことはないよね……?」
ノリ*⌒ヮ⌒*ル 「もちろんです。この表が威力を発揮するのは、むしろ選挙が始まってからですよ。試しに、得票したところを○で埋めていった状態で走らせると……」

(ゆずっちマクロ1号 動作後)
100308-03.jpg
ノリ ・ヮ⌒ル 「はい、この通りです」
ッリ *⌒ヮ⌒*)ッ 「すごいよぉ~♪ どれだけ集計データがややこしくなっても、コマンドひとつで『得票済都道府県』の欄が完成しちゃうんだね☆」
ノリ ーヮール 「正直、なんとか使える状態にまで持って行けてほっとしています。セルの相対参照で何度もエラーを出した時は、どうなるかと思っちゃいました」

ッリ ・ヮ・)ッ 「最後の都道府県名にも“、”があるのは、どうにかならないの?」
ノリ ・ヮ・ル 「不可能ではありませんけれど、『読点を付ける or 付けない』の判定文を追加しなければならない分だけプログラムが複雑になります!(きっぱり)」
ッリ ーヮー)ッ 「あ、そうなの……」
ノリ ・ヮ・ル 「文字変数は、足し算は簡単ですけれど、引き算はできないのです。それでも、都道府県名にデフォルトで付けてある“、”を空白に置き換えたものなら簡単でしたよ」

(ゆずっちマクロ2号 動作後)
100308-04.jpg

ッリ ⌒ヮ⌒)ッ 「こうやって見比べてみると、やっぱり読点がある方が読みやすいよね。せっかくだから、ここはゆずっちマクロ1号を選ぶことにするよぉ」
ノリ >ヮ<ル 「やりました! 長かったマクロフィーバーウィークも、やっと完走です~☆」
ッリ ・ヮ⌒)ッ 「最後の“、”に関しては、“ゆずっちのシッポ”ということで許してあげてね」
ノリ ;⌒ヮ⌒ル 「あはははは~……です」

(※追記には、ゆずっちマクロ1号のモジュールを載せておくよぉ ッリ ・ヮ・)ッ )
【おまけ: Subプロシージャ「syuukei」 通称:ゆずっちマクロ1号(仮名) 全文】

Sub syuukei()
' 処理を始める行番号を定義する
Dim myRow As Integer
myRow = 4

' マクロで処理する人数(=行数)を決定する。
Dim ninzuu As Integer
ninzuu = InputBox("現在、立候補している人数を入力して下さい", "参加者数の確認")

' 結果欄に入力する文字変数を定義する。
Dim Result As String
Result = ""

' ここからループ開始
For i = 1 To ninzuu Step 1

' 行内の各セルから、データを文字列として取得する。
Dim Area01, Area02, Area03, Area04, Area05, Area06, Area07, Area08, Area09, Area10, Area11, Area12, Area13, Area14, Area15, Area16, Area17, Area18, Area19, Area20, Area21, Area22, Area23, Area24, Area25, Area26, Area27, Area28, Area29, Area30, Area31, Area32, Area33, Area34, Area35, Area36, Area37, Area38, Area39, Area40, Area41, Area42, Area43, Area44, Area45, Area46, Area47 As String
Area01 = Cells(myRow, 4)
Area02 = Cells(myRow, 5)
Area03 = Cells(myRow, 6)
Area04 = Cells(myRow, 7)
Area05 = Cells(myRow, 8)
Area06 = Cells(myRow, 9)
Area07 = Cells(myRow, 10)
Area08 = Cells(myRow, 11)
Area09 = Cells(myRow, 12)
Area10 = Cells(myRow, 13)
Area11 = Cells(myRow, 14)
Area12 = Cells(myRow, 15)
Area13 = Cells(myRow, 16)
Area14 = Cells(myRow, 17)
Area15 = Cells(myRow, 18)
Area16 = Cells(myRow, 19)
Area17 = Cells(myRow, 20)
Area18 = Cells(myRow, 21)
Area19 = Cells(myRow, 22)
Area20 = Cells(myRow, 23)
Area21 = Cells(myRow, 24)
Area22 = Cells(myRow, 25)
Area23 = Cells(myRow, 26)
Area24 = Cells(myRow, 27)
Area25 = Cells(myRow, 28)
Area26 = Cells(myRow, 29)
Area27 = Cells(myRow, 30)
Area28 = Cells(myRow, 31)
Area29 = Cells(myRow, 32)
Area30 = Cells(myRow, 33)
Area31 = Cells(myRow, 34)
Area32 = Cells(myRow, 35)
Area33 = Cells(myRow, 36)
Area34 = Cells(myRow, 37)
Area35 = Cells(myRow, 38)
Area36 = Cells(myRow, 39)
Area37 = Cells(myRow, 40)
Area38 = Cells(myRow, 41)
Area39 = Cells(myRow, 42)
Area40 = Cells(myRow, 43)
Area41 = Cells(myRow, 44)
Area42 = Cells(myRow, 45)
Area43 = Cells(myRow, 46)
Area44 = Cells(myRow, 47)
Area45 = Cells(myRow, 48)
Area46 = Cells(myRow, 49)
Area47 = Cells(myRow, 50)

' 文字列に○か◎が入っているかどうか判定して、真ならば都道府県プラス句点を付ける。
If Area01 = "○" Then
Result = Result + "北海道、"
ElseIf Area01 = "◎" Then
Result = Result + "北海道☆、"
Else
End If
If Area02 = "○" Then
Result = Result + "青森、"
ElseIf Area02 = "◎" Then
Result = Result + "青森☆、"
Else
End If
If Area03 = "○" Then
Result = Result + "岩手、"
ElseIf Area03 = "◎" Then
Result = Result + "岩手☆、"
Else
End If
If Area04 = "○" Then
Result = Result + "宮城、"
ElseIf Area04 = "◎" Then
Result = Result + "宮城☆、"
Else
End If
If Area05 = "○" Then
Result = Result + "秋田、"
ElseIf Area05 = "◎" Then
Result = Result + "秋田☆、"
Else
End If
If Area06 = "○" Then
Result = Result + "山形、"
ElseIf Area06 = "◎" Then
Result = Result + "山形☆、"
Else
End If
If Area07 = "○" Then
Result = Result + "福島、"
ElseIf Area07 = "◎" Then
Result = Result + "福島☆、"
Else
End If
If Area08 = "○" Then
Result = Result + "茨城、"
ElseIf Area08 = "◎" Then
Result = Result + "茨城☆、"
Else
End If
If Area09 = "○" Then
Result = Result + "栃木、"
ElseIf Area09 = "◎" Then
Result = Result + "栃木☆、"
Else
End If
If Area10 = "○" Then
Result = Result + "群馬、"
ElseIf Area10 = "◎" Then
Result = Result + "群馬☆、"
Else
End If
If Area11 = "○" Then
Result = Result + "埼玉、"
ElseIf Area11 = "◎" Then
Result = Result + "埼玉☆、"
Else
End If
If Area12 = "○" Then
Result = Result + "千葉、"
ElseIf Area12 = "◎" Then
Result = Result + "千葉☆、"
Else
End If
If Area13 = "○" Then
Result = Result + "東京、"
ElseIf Area13 = "◎" Then
Result = Result + "東京☆、"
Else
End If
If Area14 = "○" Then
Result = Result + "神奈川、"
ElseIf Area14 = "◎" Then
Result = Result + "神奈川☆、"
Else
End If
If Area15 = "○" Then
Result = Result + "新潟、"
ElseIf Area15 = "◎" Then
Result = Result + "新潟☆、"
Else
End If
If Area16 = "○" Then
Result = Result + "富山、"
ElseIf Area16 = "◎" Then
Result = Result + "富山☆、"
Else
End If
If Area17 = "○" Then
Result = Result + "石川、"
ElseIf Area17 = "◎" Then
Result = Result + "石川☆、"
Else
End If
If Area18 = "○" Then
Result = Result + "福井、"
ElseIf Area18 = "◎" Then
Result = Result + "福井☆、"
Else
End If
If Area19 = "○" Then
Result = Result + "山梨、"
ElseIf Area19 = "◎" Then
Result = Result + "山梨☆、"
Else
End If
If Area20 = "○" Then
Result = Result + "長野、"
ElseIf Area20 = "◎" Then
Result = Result + "長野☆、"
Else
End If
If Area21 = "○" Then
Result = Result + "岐阜、"
ElseIf Area21 = "◎" Then
Result = Result + "岐阜☆、"
Else
End If
If Area22 = "○" Then
Result = Result + "静岡、"
ElseIf Area22 = "◎" Then
Result = Result + "静岡☆、"
Else
End If
If Area23 = "○" Then
Result = Result + "愛知、"
ElseIf Area23 = "◎" Then
Result = Result + "愛知☆、"
Else
End If
If Area24 = "○" Then
Result = Result + "三重、"
ElseIf Area24 = "◎" Then
Result = Result + "三重☆、"
Else
End If
If Area25 = "○" Then
Result = Result + "滋賀、"
ElseIf Area25 = "◎" Then
Result = Result + "滋賀☆、"
Else
End If
If Area26 = "○" Then
Result = Result + "京都、"
ElseIf Area26 = "◎" Then
Result = Result + "京都☆、"
Else
End If
If Area27 = "○" Then
Result = Result + "大阪、"
ElseIf Area27 = "◎" Then
Result = Result + "大阪☆、"
Else
End If
If Area28 = "○" Then
Result = Result + "兵庫、"
ElseIf Area28 = "◎" Then
Result = Result + "兵庫☆、"
Else
End If
If Area29 = "○" Then
Result = Result + "奈良、"
ElseIf Area29 = "◎" Then
Result = Result + "奈良☆、"
Else
End If
If Area30 = "○" Then
Result = Result + "和歌山、"
ElseIf Area30 = "◎" Then
Result = Result + "和歌山☆、"
Else
End If
If Area31 = "○" Then
Result = Result + "鳥取、"
ElseIf Area31 = "◎" Then
Result = Result + "鳥取☆、"
Else
End If
If Area32 = "○" Then
Result = Result + "島根、"
ElseIf Area32 = "◎" Then
Result = Result + "島根☆、"
Else
End If
If Area33 = "○" Then
Result = Result + "岡山、"
ElseIf Area33 = "◎" Then
Result = Result + "岡山☆、"
Else
End If
If Area34 = "○" Then
Result = Result + "広島、"
ElseIf Area34 = "◎" Then
Result = Result + "広島☆、"
Else
End If
If Area35 = "○" Then
Result = Result + "山口、"
ElseIf Area35 = "◎" Then
Result = Result + "山口☆、"
Else
End If
If Area36 = "○" Then
Result = Result + "徳島、"
ElseIf Area36 = "◎" Then
Result = Result + "徳島☆、"
Else
End If
If Area37 = "○" Then
Result = Result + "香川、"
ElseIf Area37 = "◎" Then
Result = Result + "香川☆、"
Else
End If
If Area38 = "○" Then
Result = Result + "愛媛、"
ElseIf Area38 = "◎" Then
Result = Result + "愛媛☆、"
Else
End If
If Area39 = "○" Then
Result = Result + "高知、"
ElseIf Area39 = "◎" Then
Result = Result + "高知☆、"
Else
End If
If Area40 = "○" Then
Result = Result + "福岡、"
ElseIf Area40 = "◎" Then
Result = Result + "福岡☆、"
Else
End If
If Area41 = "○" Then
Result = Result + "佐賀、"
ElseIf Area41 = "◎" Then
Result = Result + "佐賀☆、"
Else
End If
If Area42 = "○" Then
Result = Result + "長崎、"
ElseIf Area42 = "◎" Then
Result = Result + "長崎☆、"
Else
End If
If Area43 = "○" Then
Result = Result + "熊本、"
ElseIf Area43 = "◎" Then
Result = Result + "熊本☆、"
Else
End If
If Area44 = "○" Then
Result = Result + "大分、"
ElseIf Area44 = "◎" Then
Result = Result + "大分☆、"
Else
End If
If Area45 = "○" Then
Result = Result + "宮崎、"
ElseIf Area45 = "◎" Then
Result = Result + "宮崎☆、"
Else
End If
If Area46 = "○" Then
Result = Result + "鹿児島、"
ElseIf Area46 = "◎" Then
Result = Result + "鹿児島☆、"
Else
End If
If Area47 = "○" Then
Result = Result + "沖縄"
ElseIf Area47 = "◎" Then
Result = Result + "沖縄☆"
Else
End If

' 結果欄に出力する。
Dim ii As Integer
ii = i - 1
Range("C4").Offset(ii, 0).Value = Result

' 次に処理する行番号を更新する。
myRow = myRow + 1

' 次に処理する人のために、結果欄を一旦空白に戻す。
Result = ""

' ここでループ終了
Next i

End Sub






コメント
▼この記事へのコメント<(あれば表示)
・・・見てて頭痛が・・・

すごいですね、多才です。

結構あこがれちゃいますw
2010/03/08(月) 01:26:33 | URL | byKAKUS (#-) [ 編集]
なんというプログラマホイホイwww(←本職)

EXCEL VBAは触れたことがないのであまりうまく言えませんが、マクロの大部分を占めているセル内の文字列の取得とResult文字列加算部分をまとめて二重ループにしてしまいたい欲求に駆られてしまいますw

以下、こんなルーチンで行けるんじゃないかなと思ってネットで文法調べて組んでみたもの。それでもそこそこ長いので、txtに格納してみたり。

http://blog-imgs-36.fc2.com/t/m/y/tmymkn/macro.txt

…処理速度とかバグチェックとか何にも考えずに即興で組んだだけなので、動作確認はしてませんw
しかもまだうちの子のエントリーも済んでいないのに何やってるんだろ自分というね。
もう少し、エントリー地域だけ検討してからまた改めて来ます。
2010/03/08(月) 23:08:53 | URL | byトムヤムクン (#.PJ07Huk) [ 編集]
>>KAKUSさん
 才につきましては、1個ずつ覚えていけばそのうち多くなりますので安心してくださいw

 興味を持ったことを見逃さずにちゃんと手を出していけば、私なんかあっという間に追い越せちゃうと思いますよ ッリ ;⌒ヮ⌒)ッ
(※すずっちは、萌絵描きとJ-POPだけは一生覚えられそうにありません)

>・・・見てて頭痛が・・・
 可読性の低いプログラムでごめんなさい(汗)
 どうやら、ウィンドウからコピペした時に、インデント(字下げ)が全部無効になっちゃったみたいです……
 近日、“ゆずっちのしっぽ”を除去した完成版を作りますので、そのときにはちゃんとテキスト形式にエンコードしたものを載せようと思います。

 それはともかく、表計算のマクロは一度覚えるとその効果の絶大さにきっと驚かれると思います。
 最近の仕事でも「手作業だと丸1日かかる作業」が「3分」に短縮できましたので、基礎だけでも覚えておいて損はないですよ♪

 ちなみに、教科書にはこの本を使いました。フルカラーでレイアウトが見やすいので、視覚的にはとっつきやすいです(↓)

『はじめてのExcel VBA―Excel2007/2003/2002対応 Windows版』
ttp://bookweb.kinokuniya.co.jp/htm/4798023124.html

>>トムヤムクンさん
 すっごく簡潔になってるよぉ……即興でこんなレベルの構文を組んじゃうなんて、プロのお仕事はすごいです ッリ川・ヮ・)ッ
 追記のモジュールは、昨夜に「ややこしくても何でも、とにかく動きさえすれば最低ラインクリアです~!」とか言って組んでいたものなのですけれど、休日に命令文を読み解きながら試運転してみますね♪
2010/03/08(月) 23:40:05 | URL | byゆい すずほ (#BhkiWIsU) [ 編集]

■ コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL

▼この記事へのトラックバック(あれば表示)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。