自立学習×個別指導

NextStage

学習塾 ネクストステージ

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

新河岸駅下車徒歩2分

電話 049-265-8994

FAX 049-265-8640

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のコードだけは恥ずかしいのでパスをかけます。

 

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

 

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

 

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

 

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

2015/09/28

【EXCEL_VBA】最短講座⑤ セルのデータを自在に選択

EXCELの自動化を実現するVBAマクロを、「とりあえず使ってみたい」という人のために、最短で説明する講座です。(Excel2010で説明します。)

 

前回はif文とselect caseで条件分岐を行いました。

 

今回は、「セルのデータを自在に選択する」ことを学んでみましょう。

 

まずは、事前の準備として、データを用意しておきます。
下記のマクロを実行してください。
——————————————————————————-
Sub ランダムデータ入力()
Dim i, j, k, l
Sheets(1).Select
Cells(1, 1) = “実施日”
Cells(1, 2) = “担当者”
Cells(1, 3) = “評価”
For i = 2 To 26
‘A列への入力
Cells(i, 1) = Application.RoundUp(Rnd * 12, 0) & “月” & Application.RoundUp(Rnd * 30, 0) & “日”
‘B列への入力
j = Application.RoundUp(Rnd * 5, 0)
Select Case j
Case 0
Cells(i, 2) = “なかむら”
Case 1
Cells(i, 2) = “さかい”
Case 2
Cells(i, 2) = “きむら”
Case 3
Cells(i, 2) = “もりした”
Case 4
Cells(i, 2) = “なかじま”
Case Else
Cells(i, 2) = “その他”
End Select
‘C列への入力
Cells(i, 3) = Application.RoundUp(Rnd * 10, 0) * 10
Next
End Sub
——————————————————————————-
【説明】コードは今まで学習したのを中心に使いました。Application.RoundUp(Rnd * ●, 0) のコードは、1~●までのランダムな整数をつくります。sheets(1).select はシート番号1のシートを選ぶことをあらわしていますが、重要ではありません。

 

①データの全範囲を選ぶ
今回のデータは3列、26行にデータが入っていますが、実際にExcelを使用していくとデータの個数が、どんどん変化していきます。データの数が変わっても、すべてのデータを選択する方法です。

 

新しくマクロを書きます。標準モジュールは新しいのを挿入しても良いですし、今までのコードに続きを書いても大丈夫です。
————————————
Sub 全選択1()
Range(Cells(1, 1) ,ActiveCell.SpecialCells( xlLastCell ) ).Select
End Sub
————————————
【説明】EXCELのVBAには、データがどこまで入っているか、自動で調べてくれる関数が備わっています。ActiveCell.SpecialCells( xlLastCell )はシート内のデータが入っている最も右下を選んでくれます。今回は、Cells(1, 1)を開始点として選択します。データの開始位置は必要に応じて変えてください。
しかし、これだと右や下の方の外れたところに、関数やデータがあるとそこまで選択してしまいます。

 

ひとつのかたまりとして選択したいときは次のようにします。
————————————
Sub 全選択2()
Cells(1, 1).CurrentRegion.Select
End Sub
————————————
【説明】これだと、外れたところにあるデータは無視できます。そのかわり、行や列が1行でも空いていると、そこまでをかたまりと見なすので注意が必要です。

 

空白の行や列の扱いをどうするかで使い分けましょう。

 

②データの最も下のセルを選ぶ
2つの方法が考えられます。
————————————
Sub 最下端選択1()
Cells(1, 1).End(xlDown).Select
End Sub
————————————
【説明】Cells(1, 1)を起点として、一番下のセルを選びます。普通ですね。
しかし、これだとデータに空白があるとそこで止まってしまいます。
そこで一般的には、次のようにすることが多いです。

 

————————————
Sub 最下端選択2()
Cells(Rows.Count, 1).End(xlUp).Select
End Sub
————————————
【説明】Rows.Countは、シートの最終行まで何行あるか調べています。つまり、1列目の最も下のセルを選んでから、データが入っている最終行まで戻っていくイメージです。こうすると途中に空白セルがあっても問題ありません。

 

③データの最も右のセルを選ぶ
————————————
Sub 最右端選択()
Cells(1,Column.Count).End(xlToLeft).Select
End Sub
————————————
【説明】最下端選択2()を修正したものです。1行目の最も右のセルを選んでから、左に戻ります。

 

ちなみに、②と③を組み合わせると、最も右下のセルを選べます。
————————————
Sub 右下選択()
Cells(Rows.Count, 1).End(xlUp).Select
Cells(Selection.Row, Columns.Count).End(xlToLeft).Select
End Sub
————————————
【説明】Selectionは、.selectで選んだセルの情報をそのまま引き継げます。今回は、Selection.Rowとして、選択したセルの行番号を取得しています。場合によっては、ActiveCell.SpecialCells( xlLastCell )で選べない端点を選ぶのに使えます。

 

④データの最も下の次のセルを選ぶ
新しいデータを入力するときによく使います。次のセルを選ぶときは、Offset(●,■)を使います。これを使うと、下の方に●行、右の方に■列ずらすことができます。

 

最下端選択2()にOffsetを付け加えます。
————————————
Sub 新規セル選択()
Cells(Rows.Count, 1).End(xlUp).Select
Selection.Offset(1, 0).Select
End Sub
————————————
【説明】一番下のセルを選んでから、それをひとつ下にずらすということです。Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Selectでも同じ動きをしますが、あとで見返してもすぐわかるように、小分けして書いています。

 

⑤行や列を選択する。
今までは、Cellsでセルを選択していましたがRowsで行(上から何番目か)、Columnsで列(右から何番目か)を選択できます。いくつかの例を挙げておきます。

 

・Rows(4).Select ‘上から4番目の行を選択します。
・Columns(4).Select ‘右から4番目の列を選択します。
・Rows(Rows.Count).End(xlUp).Select ‘データの一番下の行を選択します。
・Rows(Rows.Count).End(xlUp).Select
Rows(Selection.Row + 1).Select ‘データの一番下の次の行を選択します。
※行や列操作の場合は、Offsetを使わず、最終行+1で指定すれば良いわけです。

 

今回はここまで。すでに学習した内容で、あれもこれもできてしまいますね。

 

次回はデータ(数値や関数)の入力について学習します。

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

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

→TOPに戻る