【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分割にするもので、 それぞれの範囲で同じシートを表示してくれるものです。 グリッド線をドラッグする事で表示範囲をエリア毎に設定する事ができます。 グリッドをドラッグしてボタンのある黄色いエリアに合わせて、 グリッドを調整します。 続いて、ウィンドウの固定をします。 分割ができたらウィンドウ枠の固定→ウィンドウ枠の固定を選択します。 これでボタンエリアのみ固定する事ができるので、 シートを下にスクロールしてもボタンを使う事ができるようになります。 簡単に設定できるのですが、作…

続きを読む

【ExcelVBA】マクロでセル結合・解除

使うと便利、セル結合。 でも、VBAや関数を駆使するする人にとっては、鬼門のセル結合。 セル結合については、賛否両論で正直悩ましい処理なんです。 でも… 表の見た目を作るのに便利と言う事で、活用する機会が多いかと思います。 ただ、シートの保護を使うとセル結合が使えなくなります。 シートの保護中に使えるようにしたいんですが、 設定項目にも無くて、手動では設定できない。 となればマクロで組めるのかって事なんですが、 できます! ただし!ロックしているセルでも結合ができてしまいます。 この辺りをクリアしないと、セル結合を使うのは危険なわけです。 なので、ロックセルを結合をさせない設定を踏まえながら説明しようと思います。 まず、前回作ったシートの保護機能プロシージャを呼び出します。 VisualBasicを開いて、標準モジュールで組んだので、Module1を開きます。 シート保護機能 Sub シート保護機能() Const cellName As String = "J1" Const protection As String = "保 護 中" Const notProtect As String = "解 除 中" Const yellow As Integer = 27 Const green As Integer = 43 Const pass As String = "…

続きを読む

【ExcelVBA】マクロでシートの保護・解除

前回、ボタンの使い方について記事にしたのですが、 実際、ボタンを使ってどんな処理ができるか作ってみようと思います。 今回は、タイトルにも書いたシートの保護を作ってみたいと思います。 シートの保護って、使った事があるでしょうか? 関数を組んでる方なら使った事があるんじゃないでしょうか。 セルに入力を行うと以前の値が上書きされてしまいます。 この事は、Excelを触った方なら当然知っておられると思います。 関数は、セルに書き込む事でセル上の計算を自動に行ってくれる、 Excelの機能で便利なんですが、問題があります。 関数をセルに書き込むって事は、 上書きされると、関数が消えてしまう事になります。 関数を設定してるシートなんかは、消えてもらうとこまるので、 そのセルにロックを掛ける必要があります。 セルをロックする為には、シートの保護機能を使う事になるんですが… シートの保護は設定が面倒なんですよね~ (T-T) グスッ また、かけ忘れも良く起こります。 なので、ボタン一つで保護・解除ができると、すごく楽になるかと思うんですよね。 その辺を踏まえて、セルのロックからシートの保護までを説明していこうと思います。 使用するExcelは、Excel365になります。 シートの保護 ざっくりした表で申し訳ないんですが、 赤枠に売り上げ計算の関数が組み込まれています。 入力は売上個数入力に行うと自動的に売り上…

続きを読む

【ExcelVBA】マクロって何から始めたらいいの?

Unityでゲーム作りの勉強をしているケロと言います。 普段は、Unityで作れた物を記事にしています。 機会があって、VBAを触っていたので、 少しの間、VBA初心者ながら作れたものを記事にしていこうと思っています。 ただ、VBA初心者と言う事でコーディングがヘタクソです。 正直、その辺りは生温かく見守って頂けるとうれしいでっす。m(_ _)m 前置きは、これくらいにして本題に入って行こうと思います。 プログラムには無縁、表計算だけExcelを使ってる でもマクロも覚えたい。 正直、何から始めればいいか分かんないですよね。 ケロも昔、覚えたいって思っていましたが、 何から始めればいいの?となりました。 とりあえず本を買って勉強しようと考えたんですが、 本を開くと、いきなりプロシージャがどうとか、オブジェクトがどうとか… 見るだけで、無理!ってなって勉強しなかった事を覚えています。 あれから幾年経ったことやら… 今やゲーム作りを勉強してるとは… 逸れてしまいました(;^_^A  話を戻して、 確かに概念や文法って大事なんですが、 何も知らないのにイキなりそんな事言われても分かるかよ!ってなります。 なので作りたい物を作る事から始めると、覚えるのも早いと思います。 今回は、簡単に作れて、実用性のあるボタン作りを説明します。 ちなみにコード(プログラム)の部分は、マクロの記録を使います。 ボタンで何…

続きを読む

ExcelVBAをカジってみた

最近Unityを全然触れていません。 なぜかと言うとタイトルにも書いたんですが、 ExcelVBAのマクロにハマっています。 ハマってるのは、面白いってのもあるんですが、 難しい、IDEが使いにく、エラーがよくわからない。 いろいろとハマっております。(T-T) グスッ なぜ今頃VBAとなるんですが、 嫁さんが職場で、Excelテストを受けろと言われたそうで、 80点くらい取れないと講習を受けさせられる、との事でした。 初歩的な使い方から関数までのテストだそうで、 ケロは、関数が使えるので、カテキョする事になりました。( ̄ー ̄)ゞ フフッ 久々に関数をイジってると、 VBAを覚えたいな~ 以前、そんな事を思ってながら放置していたので、 折角の機会なんでVBAをイジってみる事にしました。 やり始めて、最初に戸惑ったのがIDEの違いでした。 C#だと変数入力やコマンド入力の際、コード補完されて一覧が出るのですが、 VBAは、特定のコードは補完されるのですが、基本手入力です。 変数なんか結構面倒で間違えるとエラーが掛かります。 変数一つでも文法が違うので、覚える事が山盛りでっす。(ノ_<。)うっうっうっ そんなこんなで、1週間半ほどVBAにのめり込んでいたので、 Unityはお休みしておりました。 折角、少し触れるようになったので、 次回からは、作った物を記事にしていこうと思っています。 Unityの記事を読みに来て…

続きを読む

【Unity】Rayで接触するオブジェクトを判断させる

よじ登りの処理が作れたのですが、 バグと言うか思った動作をしてくれない部分があって、 悩んでいる今日この頃なんですが… 何がおかいしかと言うと、 壁に接触した状態から登って行くと、うまくよじ登るようになったんですが、 壁に向かってジャンプして、壁に張り付く前に上端に届くと、 上手く登ってくれない状態なんです。 ( ノД`)シクシク… また、タイミングによっては、壁の上によじ登っても、 走り出さずに同じモーションを繰り返すなんて事も起こっています。 この辺りを解消しないと動きとしては問題になります。 まず、登り切った所でモーションを繰り返す原因を考えてみたのですが、 青い線がRayです。 足元のオブジェクトが、白が壁でWallレイヤー、茶色が床でFloorレイヤーとしています。 スクリプトでは、 ActionTest public LayerMask floorLayer; private bool bodyUnder; //体下Ray void Update() { SetLinecast(); //床の接触判定 if (bodyUnder) { FloorAction(); } else VerticalMotion(…

続きを読む