Vol.828 3.Sep.2021

充電式カッター Excelのチップス〜文字列の連結 VisualBasic〜オブジェクト指向プログラミング

C 充電式カッター

by fjk

 古いカーぺットを一般ゴミとして処分したいので、指定されたサイズにするため、テレビで紹介されていた充電式カッター「T-RC36V」(3,278円)を購入した。
 最大5mm厚までの、段ボールや皮、布などハサミやカッターナイフでは切りにくい物も、回転する8角形の刃でスムーズに切れる。回転刃のあるヘッド部は45度単位で回転できるので使いやすい角度にセットできる。充電端子はminiUSBなので、どこでも充電できそう(5V1AのUSBアダプタ付属)。充電時間は最大2.5時間(Li電池で継ぎ足し充電可)。
DCMのT-RC36V カーペットを裁断中


E Excelのチップス 〜文字列の連結

by fjk

 Excelで住所録を、県名、市名、住所を別々のセルに登録し、宛名を印刷するときに、これらの文字列を連結し一つの文字列にしたいことがある。
 文字列の連結にはCONCAT、CONCATENATE、TEXTJIONがある。(緑字は例)

【文字列の連結】

CONCAT(文字列1,文字列2,・・・)
文字列には数値や数式、セル範囲が指定できる。
=CONCAT(A3:C3)
CONCATENATE(文字列1,文字列2,・・・)
CONCATとほぼ同じだが、セル範囲は指定できない。
=CONCATENATE(A3,B3,C3)
=A3&B3&C3 ・・・・・&演算子を使う場合

【区切り記号で複数の文字列を連結する】

TEXJOIN(区切り文字列,空の文字列を無視,文字列1,文字列2,・・・)
文字列の間に区切り記号を挿入し文字列を連結。
=TEXTJOIN(",",TRUE,D4,E4,F4)
 (セルが「富山県」「富山市」「新総曲輪」の場合−>「富山県,富山市,新総曲輪」)
=TEXTJOIN({"*","+","/"},TRUE,E4:E7) ・・・区切りに配列変数を使った場合
 (E4-E7セルが「A」「B」「C」「D]」の場合−>「A*B+C/D」

【余分な空白文字を削除する】

TRIM(文字列)
半角・全角の空白文字を削除。途中にある複数の空白文字は1つを残して削除。
=TRIM(B2) ・・・(空白の全消去は次のSUBSTITUTE関数を使う)
SUBSTITUTE(文字列,検索文字列,置換文字列,置換対象)
文字列中の検索文字列を置換文字列に置き換える。同じ置換文字列が複数有ればその何番目を置換するか指定する。置換対象を省略すると全ての置換文字列が対象。文字列は大文字と小文字、半角と全角は区別される。
=SUBSTITUTE(D6,"市","町")

【数値に表示形式を適用した文字列を返す】

TEXT(値、表示形式)
値の代わりに文字列を指定すると文字列が返される。ただし表示形式に@があるとその位置に文字列が埋め込まれる。
=TEXT(123.456,"###.##")
=TEXT(NOW(),"m月 d日")
=TEXT("富山","@市") ・・・@に文字列(値)が入る


V VisualBasic2019(2)  〜オブジェクト指向プログラミング

by fjk

 久しぶりに利用するVisualBasicの復習を兼ねて、オブジェクト指向プログラミングについて主な用語をまとめておく。

●オブジェクト指向プログラミング
オブジェクト指向プログラミングとは、対象物である「もの」(データ)と対象物を操作する「関数」(メソッド)の集まりを組み合わせた「オブジェクト」と呼ばれるユニットの相互作用として、システムの振る舞いをとらえる考え方。オブジェクト指向によるソフトウェア開発は、異なるプログラムを組み合わせたり、後で部分的に再利用したりするのが容易になるという特徴がある。
オブジェクト指向プログラミングには、カプセル化、抽象化、継承、ポリモーフィズムという4つの基本概念が存在。
 
●クラス
クラスは「データ構造を作る設計図」で、インスタンス化によりインスタンス(オブジェクト)を実体として作成。クラスに含まれる主な要素は、フィールド、メソッド、コンストラクター、プロパティ、イベント、インデクサー、インターフェース、デリゲート、クラス、構造体、列挙体でこれらをメンバーと呼ぶ。
'【クラスの定義】
Public Class クラス名
    ・・・
End Class
●カプセル化
オブジェクト内のデータへのアクセスを外部から遮蔽し、データを操作するメソッドと結びつけ、特定の変数や関数に変更をできなくする。
 
●抽象化
機能の詳細は知らなくても機能を使うことができる。カプセル化の拡張形のようなもので、オブジェクトのインターフェイスをシンプルにし、コードに対する変更の影響を限定するのに役立つ。
 
●継 承
同じようなオブジェクトの機能を拡張する場合、既存のクラスのオブジェクトをそのまま受け継ぐことができるので、不要なコードを減らすことができる。
 
●ポリモーフィズム
「多くの形式または形状」という意味を持つこの手法を使うと、処理方法や処理の部位を変えることによって機能をさまざまに定義することが可能になる。ポリモーフィズムを実現する仕組みとして、オーバーライドとオーバーロードがある。
 
●メソッドの実行
オブジェクトに対して、メソッドを実行するには、
 オブジェクト名.メソッド名()
【メソッドの実行例】
    ・・・
  MessageBox.Show(・・)
●インスタンス化
インスタンスはNEWキーワードを付けて宣言すると、実体のあるオブジェクトがメモリ上に確保される。
'【変数宣言とインスタン化】’
 Din 変数名As クラス名
 変数名 = New クラス名()
●構造体
構造体(値型)はほぼクラス(参照型)と同じで、インスタンス化はできるが、継承、ポリモーフィズムはできない。
 
●コンストラクタ
コンストラクタ(初期化メソッド)はクラス名と同じ名前を持つ(New)メソッドで、インスタンスが作成されるときに一度だけ実行される。
'【コンストラクタ】
Public Sub New(パラメータ)
    ・・・
End Sub
●スーパクラスとサブクラス
継承の元になるスーパークラス(基本クラス)の機能を継承したクラスをサブクラス(派生クラス)と呼ぶ。
例は基本クラスClass1を継承する派生クラスclass2をInheritsキーワードを使って宣言する。
'【サブクラス作成例】
Public Class Class2
    Inherits Class1
    ・・・
End Class
●列挙体
列挙体は既に決まっている値の集まりで、Enumキーワードを使って記述する。列挙体はクラスの内外部で宣言できるが、メソッド内では宣言できない。アクセス修飾子を省略するとPublicとなる。
'【列挙体】
アクセス識別子 Enum 列挙体名 As データ型
    識別子名 = 数値
    ・・・
End Enums
●SubおよびFunctionプロシージャ
Subプロシージャは戻り値が無い場合に使用し、戻り値が必要な場合はFunctionプロシージャを使う。
参照渡しのキーワードであるByRefを使うとSubでも戻り値を返せる(値渡しはByVal)。
Private Function 関数名(引数のリスト) As 戻り値のデータ型
  ・・・
    Return 戻り値
End Function
 Return文があるとそこで関数が終了する
  Function名 = 戻り値
 を使うとどこでも戻り値を指定できる。
 その後、途中で終了するにはExit Functionを使う
●プロパティ
プロパティはメソッドの一種で、フィールドの値の参照や設定を行う。プロパティの参照や設定するには「Getプロシージャ」または「Setプロシージャ」を利用する。
・フィールドに配列を使用すると、「インデックス付きプロパティ」となる。
・「自動実装プロパティ」はコンパイラが自動で準備してくれるフィールド。自動実装プロパティはプロパティ名の先頭にアンダーバー”_”が付いた名前(パッキングフィールド)となる。アクセス識別子は常にPrivateとなる。
'【プロパティ】
Public Property プロパティ名As データ型
    Get
	プロパティ取得時に実行する処理
	Return フィールド名
    End Get

    Set(ByVal パラメータ名 As データ名)
	プロパティ設定時に実行するす処理
	フィールド名 = パラメータ名
    End Set
End Property
●イベントハンドラー
「ボタンをクリックした時」など「ある出来事」に対応して呼ばれるSubプロシージャで、戻り値無しの特別なメソッド。
Handles句をメソッドに付けることで、click1イベントなどに関連付けることができる。
'【イベントハンドラー(ボタンの例)】

Private Sub Button_Click(Sender As Object, e As EventArgs )Handles Button1_Click1,・・
    ・・・
End Sub
・イベントのトリガーとなったコントロールを取得する
 複数のボタンがHandlerに指定されている場合、イベントの引数のsenderにトリガーとなったコントロールの情報がセットされている。
Private Sub Button_Click(ByVal sender As Object, 
		ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
    'クリックされたボタンを取得
    Dim button = Ctype(sender, Button)	'Object型のままでは扱いづらいので、文字型に変換

    '・・<全ボタン共通の処理など>

    '各ボタン固有の処理↓
    Select Case button.ID
        Case Button1.ID
            '・・<Button1クリック時の処理>
        Case Button2.ID
            '・・<Button2クリック時の処理>
        Case Button3.ID
            '・・<Button3クリック時の処理>
    End Select

    '・・<全ボタン共通の処理など>
End Sub


充電式カッター Excelのチップス〜文字列の連結 VisualBasic〜オブジェクト指向プログラミング