Not-おっとりさん

1971年生まれ-男-某保険代理店で内製プログラマーを他担当Excel_Access …

Not-おっとりさん

1971年生まれ-男-某保険代理店で内製プログラマーを他担当Excel_Access のVba及び関数・SQLWin-Actorのシナリオを0から作成・改良Vbs が補助ちなみに独学者でもあります色々な経験を経て、蓄積した地味な事を記憶したいためブログを立ち上げる

最近の記事

FSO.BuildPath

"FileSystemObject" VBAで参照するものでお勧めなのが上記です。 リファレンスには 『コンピューターのファイル システムへのアクセスを提供します。』 最初なんだ?と思うけど、ファイルやフォルダに関する機能を使用できる と考えてください。 ここでは事前参照ではなく、遅延参照でお話を進めていきます。 メソッド BuildPath 既存のパスに名前を追加します。 ?と思った人はある意味は、瞬間的に使える・使えないが直感的に分かる人かもしれない Public

    • ExcelのフォームコントロールとアクティブXコントロールの違い

      さて表題、凝ったVBAを作成すると必要な事です。 フォームコントロール マクロ: マクロを登録して実行することができ、引数を渡すことは不可 ActiveX コントロール マクロ: VBAを使用してマクロを呼び出すことができ、引数を渡すことも可 見た目は大きく変わらないが、VBAを使うなら圧倒的にActiveX コントロールである 1.引数を設定すれば、マクロ実行に表示されない 2.イベントが豊富にある 3.プロパティが豊富にあり柔軟に変更可能 1はともかく(モジュー

      • VBAでの構造体(ユーザー定義型)

        1.異なるデータ型の変数をひとまとめに出来る 2.配列化も可能 3.引数として渡す場合 リードオンリーにすることが簡単 Public Type pInfo name As String age As Integer job As StringEnd Type Option Explicit の直下が一般的だけど、プロシージャ内も可能 Private か  Publicの使用でスコープの変更も可 APIを使えば一気に初期化出来るらしい というのは、初期化する場面が無いので方

        • 消せない フォルダ を削除

          先に断っておきます、Win11は削除出来ることが多いので問題にならない 主にWin10以前の話です。 1. 前提としてOSや他のシステムが対象をロックしていないこと 2. フォルダ名 & ”半角スペース” で生成されている 3. 中のフォルダやファイルは削除済み  Private Declare PtrSafe Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName

          とあるコーディング規定 アレコレ

          早速だけど、以下を見て欲しい。 Public Function SetSheet() As Boolean 'ByRef ObjName As StringDim SH As Worksheet On Error Resume Next Set SH = ThisWorkbook.Worksheets("無いワークシート") SetSheet = TrueNothin:SetSheet = FalseEnd Function コードそのものは、シンプルかつ利便性が高いけど

          とあるコーディング規定 アレコレ

          わたしは、列挙体がキライ (-_-メ)

          いきなりだけど、列挙体は好きでは無い…、いや扱うコードはコレだらけなんだけどね。 業者のプログラムは、定数と列挙体の集合体といっても過言ではない、複数人でコーディングをする上では必須なのは認める。 1.縦に長い 2.整数値だけ 3.アルファベットで極端に略称化されている 基本概念ね Public Enum: 列挙体がプロジェクト全体から参照可能(デフォルトのスコープ) Private Enum: 列挙体が宣言されているモジュール内でのみ参照可能 Private Enum

          わたしは、列挙体がキライ (-_-メ)

          独特なソースを残すべきか

          さて表題は、リファクタリング依頼時にあった事実です。 わたしは内製プログラマなので、これが当たり前の方法であるとか、そういうこだわりはないのだけど、さすがにこれはぶっ飛んでるなぁ (誉め言葉)と思うものは結構悩むことがあります。 Public Sub test()ActiveSheet.Cells(1) = "ここです!"StopActiveSheet.Cells(2) = "ここです!"StopActiveSheet.Cells(3) = "ここです!"End Sub

          独特なソースを残すべきか

          Workbook.Close メソッドのプチ解説

          Workbook.Close メソッド (Excel) 式。閉じる (SaveChanges、 FileName、 RouteWorkbook) 注意点はパラメータの "SaveChanges" ですね 名前 必須 / オプション データ型 説明 Savechanges 省略可能 バリアント型 (Variant) ブックに変更がない場合、この引数は無視されます。 ブックに変更があり、開いている他のウィンドウに表示されている場合、この引数は無視されます。 ブックに変更があり

          Workbook.Close メソッドのプチ解説

          IsNumericの動作を理解する

          さて表題、IsNumeric とは 評価対象が数値として扱えるかを判定する関数だけど変な勘違いをして扱うと、思わぬ動作を呼び込むはめになるので注意が必要な事は知っていますか Public Sub test()Dim ロング As Long, バリアント As Variant Debug.Print ロング Debug.Print IsNumeric(ロング)Stop Debug.Print バリアント Debug.Print IsEmpty(バリアント) Debug.Pr

          IsNumericの動作を理解する

          コレクション変数のトラブル?

          普段はコレクション変数はそんなに使わないので、備忘として。 Private Sub コレクション変数テスト() Dim LoopCount As Long, Word As Collection Const MaxCount As Long = 300  Set Word = New Collection  For LoopCount = 1 To MaxCount Step 1   Word.Add LoopCount  Next LoopCount Stop End

          コレクション変数のトラブル?

          コレクション変数の宣言の仕方

          ずいぶん前から良くわからないなぁと思う事が表記の事です Public Sub コレクション関数() Dim Word1 As New Collection Dim Word2 As Collection Set Word2 = New CollectionEnd Sub 自分は set Word2 =New Collection が普通だな~と思って使っていたけど、ネットのコード眺めるとたまに Dim Word1 As New Collection な人がいて ぼっち

          コレクション変数の宣言の仕方

          静的配列を動的配列にコピーする

          何のことだ? as Variant で = すればいいのでは?と思ったあなたは、できればこの苦労はしない方が良い。 あぁわかる、苦労するよねと思ったあなた、結構な使い手ですね。 Private Sub StaticToDynamic()Dim StaticArray(1 To 3) As Long, DynamicArray() As Long, LC As Long StaticArray(1) = 5 StaticArray(2) = 7 StaticArray(3)

          静的配列を動的配列にコピーする

          As Variant で文字列を送る

          コレ以外とやらないことなので、トラブルと厳しい…、外部ライブラリに文字列を送るときに、As String じゃなくて As Variant を要求される事がある  Public Sub test()Dim Word As Variant Word = "文字列1" Stop Word = Array("文字列2") StopEnd Sub 実は As Variant 形式で単純に文字列送ってもエラーで頭抱えたのであるが、 結果は配列にして文字列を送るとOKという事があった

          As Variant で文字列を送る

          iif関数について

          さて表題は、固定概念があると良くないよという実例を一つ Public Sub TEST()Dim AddCount As Collection, CountAdd As LongSet AddCount = New Collection For CountAdd = 1 To 10  AddCount.Add IIf(CountAdd Mod 2 = 0, "偶数値", "奇数値") Next CountAddEnd Sub IIF関数のサンプルって "=" を繋げたもの

          Select Case で Like を使う

          あまりこの使い方はしないけど備忘のため記録 Private Sub TEST2()'ShortCircuitEvaluationConst Value3 As String = "あさくら"Select Case True Case Value3 Like "あさ*ら" MsgBox Value3 Case Else EndEnd SelectEnd Sub True で Select Case を通しているので、分岐の役割として違和感を感じるけど…、単純に like

          Select Case で Like を使う

          Select Case の怖さ

          さて表題 Select Case という分岐は実に扱いやすく、非プログラマーからしても視覚的に理解しやすいので、運用後に分岐条件が増えるなら(可能性)この形式も悪くないと思っています。 Private Sub TEST1()'ShortCircuitEvaluationConst Value3 As Long = 7 Select Case Value3  Case Is < 9, Is < 4   Debug.Print "9より小さい 4より小さい"  Case Is