自立学習×個別指導

NextStage

学習塾 ネクストステージ

埼玉県川越市大字砂935-6

新河岸駅下車徒歩2分

電話 049-265-8994

FAX 049-265-8640

2015/11/17

【VBAヒント集】GoTo ステートメント

if文やloop文,dowhile文などは、マクロの勉強をし始めるとどのテキストやwebページでも真っ先に紹介されています。

 

一方で、go to文はほとんど紹介されていないことが多いです。

 

どうも、構造化プログラミングという論点から推奨されていないのが原因です。
プログラムがごちゃごちゃするから使うのをよそう!ということです。

 

確かに、商品化するような複雑なプログラムや、頻繁に修正が必要なプログラムならその通りです。

 

しかし、ちょっとしたマクロを書くだけなら、go to文は便利です。

 

下の2つのコードを使うだけです。
① Go To 行き先
② 行き先:

 

これで①のコードから②のコードまでジャンプすることができます。

 

例①条件分岐に使う
——————————————-
Sub goto1()
buf = MsgBox(“私のこと好きですか。”, vbYesNo)
If buf = vbNo Then
GoTo baibai
End If
MsgBox “ありがとうございます。”
baibai:
MsgBox “じゃあね”
End Sub
——————————————-
『好きですか』という問いに、Noと答えると『ありがとうございます。』を飛ばして、『じゃあね』に行くようになっています。if文だけでもできますが、条件が重なったときには使いやすいのではないでしょうか。

 

例②繰り返しの文として使う
——————————————-
Sub goto1()
retry:
buf = MsgBox(“私のこと好きですか。”, vbYesNo)
If buf = vbNo Then
MsgBox “私はあなたのことが大好きです。”
GoTo retry:
End If
MsgBox “ありがとうございます。”
End Sub
——————————————-
行き先をGoToの前に入れておくと、戻ることができます。『好きですか』という問いに、Noと答えるともどって再度同じ質問をします。Yesと答えない限り永遠と続きます。

 

GoTO文は使い勝手がよいので、条件分岐に困ったら頼ると良いでしょう。

 

一方で、他の条件分岐の方法もしっかり学習をした方が、幅が広がります。

2015/11/08

【EXCEL VBA】分数を扱う-セルの値自動取得-

EXCELと分数の相性の悪さ…もともとEXCELは『データテーブル』+『手軽なビュー』というのが持ち味ですので、いわゆる学校で使われている分数の形式で表示する必要性はあまりないわけです。

 

私のようにプリントの教材をEXCELで作っている人は、分数の表示をどうしようと悩まれたことがあると思います。

 

今回、新しいプリントを作るにあたり分数の数値をセルから自動取得するマクロを作成しました。

 

分数といってもテキストボックス2つと直線をあわせたものです。
マクロで、分数の線や、中心位置を自動調整するようにしました。

 

また、複数の分数をサクサク扱えるように、設定用のプロシージャと、自動調整用のプロシージャを別にしました。

 

使ってみて、作業効率は数式エディタと同じくらいではないでしょうか。

 

自動で数値替えを行いたい人にはお勧めです。

 

①シート上の準備
1 シート上に、テキストボックス2つ(分母・分子)と直線を用意
2 図形の名前を変更(ホーム⇒検索と選択⇒オブジェクトの選択と表示 で打ちかえる)
図形の名前は下図を参考にしてください。『名前+通し番号』です。
※この時点でフォントを設定しておいてかまいません。

 

689e15_94c2ed2c426f4e3ca26c4bb3b7ad7c1e

 

②マクロを書く
‘—————グローバル変数として宣言———————–
Dim buf, mytarget, mytarget1, mytarget2, mytarget3, myvalue, myvalue1

 

‘—————参照元設定用のマクロ———————–
Sub 分数()
Calculate
buf = 1’—通し番号
myvalue = “BA2” ‘—分子
myvalue1 = “BB2” ‘—分母
Run “分数作成”
End Sub

 

‘—————自動調整用マクロ———————–
Sub 分数作成()
mytarget = “分子” & buf ‘—分子の数値が入ったテキストボックス
mytarget1 = “分母” & buf ‘—分母の数値が入ったテキストボックス
mytarget2 = “分数” & buf ‘—分数の線
mytarget3 = “分数化” & buf ‘—グループ名
デフォルトtop = ActiveSheet.Shapes(mytarget3).Top ‘—もとの上端
デフォルトleft = ActiveSheet.Shapes(mytarget3).Left ‘—もとの左端
leftblank = 7 ‘—テキストボックスの文字が入る左端の空白を調整
mypoint = 5 ‘—文字のポイント数により調整

 

‘—すでに入力されている分母と分子の文字の長さのうち長い方を取得
ActiveSheet.Shapes(mytarget).Select
文字0 = Len(Selection.Characters.Text)
ActiveSheet.Shapes(mytarget1).Select
If Len(Selection.Characters.Text) > 文字0 Then
文字0 = Len(Selection.Characters.Text)
End If

 

‘—分母と分子に数値を入力
ActiveSheet.Shapes(mytarget).Select
Selection.Characters.Text = Range(myvalue)
ActiveSheet.Shapes(mytarget1).Select
Selection.Characters.Text = Range(myvalue1)
myleft = ActiveSheet.Shapes(mytarget2).Left

 

‘—入力した分母と分子の文字の長さのうち長い方を取得
文字 = Len(Range(myvalue))
If Len(Range(myvalue1)) > 文字 Then
文字 = Len(Range(myvalue1))
End If

 

‘—場所と長さを調節
ActiveSheet.Shapes(mytarget).Left = myleft – leftblank + (文字 – Len(Range(myvalue))) * mypoint / 2
ActiveSheet.Shapes(mytarget1).Left = myleft – leftblank + (文字 – Len(Range(myvalue1))) * mypoint / 2
ActiveSheet.Shapes(mytarget2).Width = mypoint / 2 + mypoint * 文字
ActiveSheet.Shapes(mytarget2).Left = myleft – mypoint / 4
ActiveSheet.Shapes(mytarget3).Top = デフォルトtop
ActiveSheet.Shapes(mytarget3).Left = デフォルトleft – mypoint / 2 * (文字 – 文字0)
End Sub

 

※自動調整用のleftblank mypointの数値は適当に調節してください。使用しているフォントの種類や大きさによって変わります。

 

③複数用意するときは、
オートシェイプのコピー ⇒ 名前の変更 ⇒ 設定用マクロに入力 するだけ

 

実用的な範囲で見栄えの良い分数が操作できる(はず?)です。

2015/12/11

【EXCEL_VBA】最短講座⑥ データや数式の入力

EXCELの自動化を実現するVBAマクロを、「とりあえず使ってみたい」という人のために、最短で説明する講座です。(Excel2010で説明します。)
前回はセルのデータを自動選択することを学習しました。
 
今回は、「データや数式の入力」を学んでみましょう。
①インプットボックスを使ったセルへの入力


マクロを使ってやりたいことNo.1といっても良いのではないでしょうか。
しかし、InputBox関数の使い方は引数(設定できること)が多いために、わかりづらいところもあります。
今回は、入力だけの設定でできる便利な使い方をみていきましょう。
 
1.ただ入力するだけ
—————————-
Sub 入力()
Dim mydate
mydate = InputBox(“入力してください。”)
Range(“A1”) = mydate
End Sub
—————————-
【説明】mydateという変数を用意して、インプットボックスに入力されたデータを格納⇒A1セルにそのデータを入力する。
 
2.キャンセルのときの設定を追加する。
—————————-
Sub 入力()
Dim mydate
mydate = InputBox(“入力してください。”)
 
If mydate = “” Then
MsgBox (“入力を取り消します。”)
Else
Range(“A1”) = mydate
End If
End Sub
—————————-
【説明】インプットボックスでキャンセルボタンを押されたときは、何も入力されていないのと同じ状態になりますので、mydate=””で判断します。今回はif関数を使い分岐しました。(インプットボックスにキャンセルボタンを押した!という判断はありません。)
 
3.次々に入力する。
—————————–
Sub 入力()
Dim i
i = Application.WorksheetFunction.CountA(Range(“A:A”))
i = i + 1
 
Dim mydate
mydate = InputBox(“入力してください。”)
 
Do While mydate <> “”
Cells(i, 1) = mydate
i = i + 1
mydate = InputBox(“入力してください。”)
Loop
 
End Sub
—————————–
【説明】A列につぎつぎにデータを入力する設定です。i = Application.WorksheetFunction.CountA(Range(“A:A”))ですでに入力されている個数をしらべてその続きから入力します。今回はキャンセルボタンを押すか、何も入力せずにOKボタンを押すと止まるようにループさせました。
 
ということで、インプットボックスは最低限の設定だけでも便利です。その他にも、タイトルをつけたり、表示する位置を指定したり、といろいろな機能が備わっています。1つずつ項目を付け足して試してみるとおもしろいですよ。
 
 
 

②セルに数式を入力する。


なるべく自動的に集計できるようにするために、セルに数式をマクロで入力したい、ということがあります。
どうやって入力すれば良いのか、悩むことがあると思いますが・・・数式の扱いは簡単です。

 

たとえば、Range(“A1”) = “=sum(B:B)” のように、文字列と同じように数式を入力してあげればよいのです。今回は=sum(B:B)という数式を入れましたので、B列のすべての和が求まります。
(これは、=から始まる文字列は数式だ!というExcelの自動認識を利用しています。)

 

しかし、数式の入力で気をつけなければならないことが1つあります。
数式自体に文字列を入力するときです。

 

たとえば、=COUNTIF(B:B,”川越”) という数式を入力するときに、
Range(“A1”) = “=COUNTIF(B:B,”川越”)” とするとエラーになります。

 

プログラムの受け取り手のコンピューターが、【“=COUNTIF(B:B,”】という文字列と【川越】という得たいの知れないものと【”)”】という文字列と認識するためです。

 

数式の中の文字列は”川越”ではなく、””川越””にします。”を2つ使って挟むことで上手く認識させるのです。
Range(“A1”) = “=COUNTIF(B:B,””川越””)” が正解です。入力されたあとの数式は =COUNTIF(B:B,”川越”) になります。

 

今回はデータの入力で困りやすいインプットボックスと数式を扱いました。

 
 
次回は、自作のフォームを利用した入力について、学んでいきます。
 
 

┿━━━━━━━━━━━━━━┿
— 学習塾NextStage ( ネクストステージ )–
┿━━━━━━━━━━━━━━┿
■営業時間 平日13:00~21:30
土曜10:00~21:30
日曜 不定期
■住所:川越市大字砂935-6
■電話:049-265-8994            
2016/01/05

合格_待ち受け 縦・大

最後まで努力しろ!

tate_960×1280

 

 

学習塾NextStage ( ネクストステージ )
■営業時間
平日13:00~21:30
土曜10:00~21:30
日曜 不定期
■住所
埼玉県川越市大字砂935-6
■電話
049-265-8994            
2015/10/27

【家庭学習ツール】図形描画用EXCELベータ版

689e15_10b84fff68a84a87995bedcdcd1680c9

 

算数や数学の問題をつくるときに、Wordのオートシェイプにイラついたことはありませんか。​

 

 

 

⇒ぴったりあわせたつもりなのに、印刷したときに少しずれている・・・。
⇒角度の設定が面倒・・・。
⇒長さをあらわす ⌒ みたいな図形がきれいに入れられない・・・。

 

オートシェイプも見た目がきれいな図形をパッとつくるにはとても良いのですが、数学的な図形には設定が大変です。

 

また、私の学習塾では、個々にプリント教材を作成することも多く、図形の作成に時間をとられていました。

 

これらの悩みを解決するためにEXCELの図形描画ソフトを作成しました。

 

AR_CADなどのすばらしい無料描画ソフトもあるわけですが、今回はオートシェイプとの互換性を残すことを目的にEXCELで作成しました。

 

ですので、オートシェイプが扱えれば、すぐに扱えるようにしています。

 

職場でMsOfficeしか使えない某大手塾の職員にもおすすめです。

 

まだ試作版ですが、一度公開してみます。VBAのコードだけは恥ずかしいのでパスをかけます。

 

基本的な操作方法は、
①メニューバーから作図したい図形を選ぶ。
②画面の左の方の、設定値をいじくる。
③描画ボタンを押す。
で終了です。

 

エラー処理やら使い方の説明やらまだまだ未完成ですが、どんなソフトかは体験できると思います。

 

使ってみて、こうしたら良いのでは? こういう機能がほしい! などありましたら、ぜひコメントください。

 

ダウンロードはこちらから。

学ぶのが楽しくなり積極的に勉強する子が育つ学習塾のお役立ちブログです

新河岸にあるNextStageは、勉強させる、教えるという方針ではなく、生徒一人一人が自らの意思で積極的に学ぶことができる環境を整えております。自分の弱点や苦手分野を把握して生徒をサポートするパソコンとともに、理解できる楽しさを噛みしめながら前へと進んでいき、成績アップへとつなげていけます。
自ら学ぶ力がつく学習塾NextStageのブログでは、ご自宅からも簡単にアクセスして学べる家庭学習支援ツールの配信や、中学受験や高校受験などに役立つ情報やアドバイスを掲載しております。
塾だけでは物足りず、もっと勉強したいときや、受験勉強でつまずいたとき、不安になってしまったときに、新河岸のNextStageのブログをご覧ください。

→TOPに戻る