Not-おっとりさん

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

Not-おっとりさん

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

最近の記事

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

さて表題は、リファクタリング依頼時にあった事実です。 わたしは内製プログラマなので、これが当たり前の方法であるとか、そういうこだわりはないのだけど、さすがにこれはぶっ飛んでるなぁ (誉め言葉)と思うものは結構悩むことがあります。 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) ブックに変更がない場合、この引数は無視されます。 ブックに変更があり、開いている他のウィンドウに表示されている場合、この引数は無視されます。 ブックに変更があり

      • IsNumericの動作を理解する

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

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

          普段はコレクション変数はそんなに使わないので、備忘として。 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

          整数値がプラスかマイナスかの判定

          さてお題ですが、一瞬悩んだけど0と比較して判定している…けど 独学なのでメジャーな方法や一般的な手法があるのかな? Public Sub TEST()Const Numeric As Long = -20 If Numeric = 0 Then Debug.Print "0です" ElseIf Numeric > 0 Then Debug.Print "符号は+です" ElseIf Numeric < 0 Then Debug.Print "符号は-です" End I

          整数値がプラスかマイナスかの判定

          ランダムで入ってくる整数と小数を仕分ける

          表題ですがみなさんはどう処理してるのだろうか? 自分は10分程考えた結果以下になった Public Sub test()Const Numeric_A As Currency = 132.55Const Numeric_B As Currency = 251 If Numeric_B <> Fix(Numeric_B) Then MsgBox "整数値ではありません" Else MsgBox "整数値ですね" End IfEnd Sub まぁ情報を処理する上で、データ

          ランダムで入ってくる整数と小数を仕分ける

          Excelのコピーペーストの罠

          表題ですが自分が Excel を使う時に嫌な罠があります VBAで1回は苦労するであろう、問題 以下サンプル (動かないよ?見本だから) Public Sub サンプル()Dim SH1 As Worksheet, SH2 As Worksheet, LC As LongConst B列 As Long = 2 For LC = 1 To 50 Step 1 Worksheets("テンプレ").Copy Set SH2 = ActiveSheet SH1.AutoF

          Excelのコピーペーストの罠

          Local を考慮したSaveって何?

          さて表題、考慮しないとどうなるか?から説明します 主にCSVやテキストなど、Local 情報がないデータをVBAで 雑に保存すると発生しがちな現象である わかりやすく言えば "yyyy/mm/dd" が "mm/dd/yyyy"として保存されるなどで、発生頻度が少なく 対策は簡単だけど初心者やWin-Actr などには 迷惑な結果が起きる 、理由が分からないと \(^o^)/オワタになりがち Public Sub test1()Dim MePath As StringMe

          Local を考慮したSaveって何?

          NumberFormat と NumberFormatLocal

          これは特別に意識しなくても良いみたいですね オブジェクトの表示形式を表すバリアント型 (Variant) の値を取得または設定します。 指定されたオブジェクトの表示形式をコード実行時の言語の文字列で表すバリアント型 (Variant) の値を取得、または設定します。 リファレンス見てもそう違いはないかな? Sub TEST()With ActiveSheet.Cells(1, 1)Stop.NumberFormat = "General"Stop.NumberForma

          NumberFormat と NumberFormatLocal

          FormulaLocalかValue どっちが正解?

          さてお題、初期の頃、違いが判らず悩んだけど。 全部正解です。一応注意点はあるよ? Sub TEST() With ActiveSheet.Cells(1, 1) Stop .FormulaR1C1 = "桜" Stop .FormulaLocal = "さくら" Stop .Value = "サクラ" Stop .Value2 = "Sakura" End WithEnd Sub 極端な事言うならば Local が付くのを使うのが一番安全ではあります Win Ac

          FormulaLocalかValue どっちが正解?