【ExcelVBA】動的配列で複数図形を一括接続する

最近、ウォーキングをするようになって、 少し減量に成功したケロです。 全然、記事とは関係ない事から書き始めましたが、 ウォーキング1hr~1.5hrほどするとPCを触る時間が減ります。 なのでブログも更新が進まないって事が書きたかったですが… 個人的な話なんでこれくらいにして。 フローの修正が残っていたので、まとめてみようと思います。 今回は、複数の図形に一括で直線を繋げる処理を作ってみます。 カギ線の場合、結合点を指定する必要があるので、 直線のみの対応になります。 ここで考えておく必要があるのが、 ・全図形なのか ・選択した図形なのか の二点です。 フローなら図形が当然増えていきます。 全図形にすると数が多い事や、後から追加した図形の接続を考えると、 選択した図形の一括接続がいいと思います。 まず、以前に作った図形接続のプロシージャを見てみます。 標準モジュール4に作っていたので、リネームしてLineConnectに変更します。 オブジェクト名を変更するとリネームする事ができます。 LineConnectモジュールを開いて、接続プロシージャを開きます。 標準モジュール(LineConnect) Option Explicit Sub Connection() Dim arrow As Shape '矢印線取得' Dim selectSh(2) As Sha…

続きを読む

【ExcelVBA】線を識別してループを飛ばす

フローチャート作りもいよいよ大詰めとなりました。 完成とするには、3つの課題が残っております。 ・図形揃えで線が反応する ・複数図形一括つなぎ ・線種を切り替える 今回は、図形揃えで線を反応させなくする処理を作ります。 おさらいになりますが、 図形の中央揃えをつくりました。 全ての図形と選択図形を中央揃えする、二つのプロシージャを作ったのですが、 標準モジュールが増えたので、どこに組んだか分からなくなるので、 まず、モジュールの名前を変更します。 図形中央揃えは、全図形と選択図形の二つなんですが、 選択図形の場合、線を選ばなければ問題ないので、 全図形の方を修正していきます。 修正する部分を確認する為にプロシージャを見てみます。 標準モジュール(ShapeCentering) Option Explicit Sub PositionCheck() Dim sh As Shape '図形取得' Dim cell As Range '図形下セル取得' Dim posLeft As Double '図形の左位置' Dim posTop As Double '図形の縦位置' Dim leftBorder As Double '横境界線' Dim topBorder As Double '縦境界線' Dim addLeft A…

続きを読む

【ExcelVBA】結合点を選択できるようにする

前回、図形を線で繋ぐ事ができたのですが、 いろいろと修正部分があるので、順次作っていこうと思います。 その前に、今回テストを繰り返す内に、標準モジュールが増えてしまいました。 コードを記載する際、標準モジュールとしていたのですが、 一つのモジュールに、何個もプロシージャを書いてるわけではないので、 分かりにくくなると思います。 どのモジュールに組んでるか分かり易くする為に、モジュール名を変更する事にしました。 モジュール名の変更は、 モジュールを選択するとオブジェクト名が表示されるので、 この部分(赤枠)を書き換える事で好きな名前にする事ができます。 少し逸れたので話を戻して、 今回は、カギ線繋ぎについて修正していきます。 カギ線繋ぎで問題なのが、 結合点が4に固定されてるのは、使い勝手が悪い。 図形を選択してないとエラーが出る。 図形の選択数が、1個の時、3個以上の時、機能しなくなる。 この辺りを修正する必要があります。 修正案として、 ・図形選択を2つに限定する ・結合点を選択できるようにする ・エラー対応 この3つを組み込んでみようと思います。 まずは、エラー対応と図形を2つ選択した時だけ機能する処理を作ります。 標準モジュール(LineConnect) Sub ElbowConnect() Dim arrow As Shape '矢印線取得' Dim s…

続きを読む

【ExcelVBA】図形を線で繋ぐ

図形移動が作れたので、いよいよ大詰めの “線で繋ぐ" でっす。 フローチャートなんで、線で繋がないと意味がないです。 繋ぐ方法は、線を引いて二つの図形を繋げるだけなんで、 簡単と言えば簡単なんですが… まずは、線で繋ぐ部分を手動で行ってみようと思います。 まずは、矢印線を選択してシート上に作成します。 線が引けたら繋ぎたい図形の結合点に、線の結合点を重ねる事で、 図形と線を接合する事ができます。 ひし形の図形にも矢印線を結合して、図形を移動させてみます。 結合された線は、図形と共に移動します。 これをコードにしていきます。 まずは、矢印線を引いてみます。 標準モジュール Option Explicit Sub Connection() Dim arrow As Shape Set arrow = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 250, 300, 250, 370) With arrow.Line .EndArrowheadStyle = msoArrowheadTriangle .Visible = msoTrue .Weight = 1.75 End With End Sub 説明する…

続きを読む

【ExcelVBA】図形をセル中央に整列させる

図形移動の処理を作れたのですが、 Dragで移動させられると楽なのにと思っています。 そこで、Drop時にセルの中央に合わせられないかと考えていたのですが、 実現が難しいんですよね。( ̄~ ̄;) ウーン いろいろと考えて思いついたのが、 図形を一括で整列させる方法です。 Drop時にセル中央に移動しなくても 移動させた図形を一括でセル中央に整列させられれば、 もう少し、直感的な作業ができるのでは!?と考えました。 これなら図形を個々に調整するより楽かもって事で処理を考えてみます。 まず図形がどのセル上にあるか判断する必要があります。 セルが分かれば、そのセルの中央に移動させるだけの処理なので簡単に作れそうです。 シート上の図形を取得して、どのセルか割り出します。 標準モジュール Option Explicit Sub CellSearch() Dim sh As Shape 'シート上の図形取得' Dim cell As Range '図形下のセルを取得' For Each sh In ActiveSheet.Shapes With ActiveSheet.Shapes(sh.Name) Set cell = Range(.TopLeftCell, .BottomRightCell) End With …

続きを読む

【ExcelVBA】図形を好きなセルに移動させる

フローチャートを作りたいって事で、 前回は、作図のコードを組む事ができました。 図形が用意できたので、続ていは移動処理を考えてみようと思います。 図形を移動させると綺麗に並べるのに手間が掛かります。 わざわざセルの、グリッド線に合わせたり、目算で中央に合わせたり… 正直面倒でっす。ヽ(´~`;)ウーン 移動させたら自動的にセル中央に揃ってくれると楽なのにと 何度思った事か。 今回は、この辺りを考えてみようと思っています。 移動のさせ方なんですが、Drag&Dropで狙ったセルに移動させる方法が、 直感的で楽な方法なんですが、実装が困難なんです。 マウスのクリックを検知する方法が独特なんです。 フォーム上とかオブジェクト上と限定的で、 シート上では検出するのが難しいんですよね。 WindowsAPIを使えば実装できるようなんですが、 正直、敷居が高くて難しいです。 なので違う方法を考えてみます。 図形を移動させるには、 ・移動させる図形を取得 ・移動先のセルを取得 二つの動作が必要になります。 まずは、図形の取得を作ってみます。 ・選択した図形を取得する まず、どの図形を動かすかって事が分からないと移動させる事もできないので、 選択中の図形を特定していきます。 方法としては、二つあって、 ・全図形の中から選択中の物を探す ・クリックした時に図形を取得する 全シェイプ中から探す場…

続きを読む

【ExcelVBA】指定セルの中央に図形を作成する

ExcelVBAを触り出すと奥が深いと言うか… 分からない事だらけです。(T^T) ヒック 毎日、調べる作るの繰り返しでして、 Unityに戻れるのは、いつになる事やら… そろそろ戻りたいってのもあるのですが、 折角、触れるようになってきたExcelVBAなんで、 最後に、今後使っていける何かを作りたいなと思いました。 自称プログラマーなんで、やはり”フローチャート” 必須ですよね。 プログラムのフロー起こしって、結構面倒だったりします。 Excelで綺麗に仕上げようと思うと手間も掛かります。 なので、マクロで少しでも楽に作成できる物を作ってみます。 フローチャートのマクロで必要な機能とすれば、 ・図形作成 ・図形を綺麗に並べる ・図形移動 ・図形をラインで繋げる こんな感じになりそうです。 今回は、図形作成をマクロで組む事にします。 図形と言っても種類があるので、 各種類を綺麗に配置できるように組んでみたいと思います。 今回、図形は5種類を用意します。 ・シェイプ69番 端子 ・シェイプ61番 処理 ・シェイプ63番 分岐 ・シェイプ67番 書類 ・シェイプ73番 結合 フローの内容によって図形が変わるので、 今回は、プログラムで良く使う5つをピックアップしてみました。 これを作図して、綺麗に並べようと思います。 まず作図なんですが、 ActiveSheet.Shapes.AddSh…

続きを読む

【ExcelVBA】時間の切り上げ、切り捨て、丸め

ボタンをいろいろと作って、マクロにも少し慣れてきたので、 新しくマクロを組んで行こうと思います。 Excelを触ってると、日付や時間を取得する場面があると思います。 日付や時間は、Date関数やNow関数で簡単に取得する事ができますが、 表示時間を5分単位や10分単位で取得して表示させたい。 こんな事を考えた事は、ないでしょうか。 数値の切り上げ、切り捨ては関数が存在していますが、 時間については、よくわかりません。(^_^;)\('_' ) オイオイ... そこで調べ倒して、自分なりに作ってみたものを 記事にしていこうと思います。 まずは数値の 切り上げ、切り捨て、四捨五入、を調べたのでまとめてみます。 ・WorksheetFunction VBAでもワークシート関数を使う事ができます。 セルに書き込む関数の事です。 ・Round   四捨五入 ・RoundUp  切り上げ ・RoundDown 切り捨て 数値の小数点を処理するのに使います。 Round(数値,桁) 四捨五入をします。 VBA関数のRoundは、偶数丸めになります。 Excelを触る方なら、銀行丸めの方が馴染みがあるかも。 WorksheetFunctionのRoundは、四捨五入を行ってくれます。 コーディングは、 ActiveSheet.WorkSheetFunction.Round(数値,桁) ActiveShe…

続きを読む

【ExcelVBA】ボタンの配置(実践編)

前回、ボタンの配置を考えるって事で、 いろいろと埋め込める事を紹介しました。 今回は実践編と言う事で、 シートの保護とセル結合を作ったbookに組み込んで行こうと思います。 今回の内容としては、 ・ボタンを各所に埋め込む ・シート保護のパスワードを自前で用意する ・シート保護忘れ防止の処理を作る この辺をまとめようと思います。 ・セル結合ボタンをタブに埋め込む もともとセル結合は、ホームタブ内の、配置グループにあるので、 マクロのセル結合もタブに設定した方が使い易いと思います。 前回記事を参考にタブに組み込んでみます。 リボンの▼から、その他のコマンドを選択してExcelのオプションを開きます。 開いたら、左メニューからリボンのユーザー設定を選択します。 コマンドの選択をマクロに切り替えて、セル結合_解除を表示します。 メインタブの項目にセル結合マクロを登録させたいのですが、 新しいタブにすると分かりにくいので、 ホーム内の、配置グループの下に、新しいグループを作成して、名前をマクロに変更します。 マクロ自体は、既存のグループに入れる事ができないので、 新しいタブか新しいグループを作る必要があります。 このグループにセル結合のマクロを追加します。 追加できたら、名前とアイコンを変更します。 追加したセル結合_解除を選択して、 名前をセル結合にして、赤枠のアイコンを設定します。 Exce…

続きを読む

【ExcelVBA】ボタンの配置を考えてみる

ボタンを使ってマクロを組んできましたが、 正直、ボタンを複数作ると操作する範囲が狭まったり、 作業のジャマになったりしますよね。 そんな事で、小技を織り交ぜながらボタン配置を考えてみたいと思います。 ・分割とウィンドウ枠の固定 一般的には、簡単で設定がしやすい方法なんですが、 作業エリアが小さくなるのが難点です。 実際に設定してみたいと思います。 こんな感じでボタンを配置した場合、 セルの下移動や横移動をさせるとボタンも消えて行きます。 操作したいセルが表示範囲より外側にある場合は、 ボタン操作できなくなります。 そこで、ボタンのエリアだけを固定して、常に表示させるようにします。 まず、ホームから表示にタブを切り替えます。 表示内にある分割のボタンを押すとグレーのグリッド線でシートが分割されます。 この分割線は、シートを4分割にするもので、 それぞれの範囲で同じシートを表示してくれるものです。 グリッド線をドラッグする事で表示範囲をエリア毎に設定する事ができます。 グリッドをドラッグしてボタンのある黄色いエリアに合わせて、 グリッドを調整します。 続いて、ウィンドウの固定をします。 分割ができたらウィンドウ枠の固定→ウィンドウ枠の固定を選択します。 これでボタンエリアのみ固定する事ができるので、 シートを下にスクロールしてもボタンを使う事ができるようになります。 簡単に設定できるのですが、作…

続きを読む