質問編集履歴

3 変更

K.T_build

K.T_build score 26

2017/08/17 15:14  投稿

vbaでのクラス継承時の定数について
vbaでの継承について、質問をさせて頂きます。
javaのようにスーパークラスにメンバ変数を設定し、それのアクセスをしたいのですが毎回インターフェースを設定する必要があるのでしょうか?
###理想
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
Private Sub Class_Initialize()
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
###現実?
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
'Public WS As Worksheet
'Public wsName As String
'Public startCol As Integer
'Public startRow As Integer
'Public colLen As Integer
'' プロパティのインターフェイスを用意する。
Public Property Get WS() As Worksheet
End Property
Public Property Get wsName() As String
End Property
Public Property Get startCol() As Integer
End Property
Public Property Get startRow() As Integer
End Property
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
'プロパティ
'【質問点】何故サブクラスで宣言するのでしょうか?
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
'メンバー設定
Public Property Get absClass_WS() As Worksheet
   Set absClass_WS = WS
End Property
Private Property Get absClass_wsName() As String
   'absClass_wsName = wsName
   absClass_wsName = "営業所別_月間"
End Property
Private Property Get absClass_startCol() As Integer
   absClass_startCol = startCol
End Property
Private Property Get absClass_startRow() As Integer
   absClass_startRow = startRow
End Property
Private Sub Class_Initialize()
   '【質問点】定数を設定する場合はInitializeでするのが一般的でしょうか?
   '        それともgetterでするのがよいのでしょうか?
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
http://teratail.com/questions/88452[前回の質問の続きです。]
---
【質問点まとめ】
0. メンバ変数の宣言は何故サブクラスで行うのでしょうか?
0. メンバ変数を宣言するのに、毎回インターフェース(setter, getter)を設定する必要があるのでしょうか?
また、よろしければ皆さんならばこうしているという例文などをいただけると非常に助かります。
オブジェクト指向も学習中で突飛な質問かもしれませんがよろしくお願い致します。
---
###【(追記)やりたいこと】
###クラス
###スーパークラス
0. 単月系シート処理用
0. 年間系シート処理用
###クラス
###サブクラス
0. 事業所一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所別営業一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別得意先一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別外注一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所一覧_年間シート処理(年間系シート処理用を継承)
0. 事業所別営業一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別得意先一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別外注一覧_年間シート処理(年間系シート処理用を継承)
  • VBA

    2715 questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    2231 questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

2 レイアウト修正

K.T_build

K.T_build score 26

2017/08/17 15:10  投稿

vbaでのクラス継承時の定数について
vbaでの継承について、質問をさせて頂きます。
javaのようにスーパークラスにメンバ変数を設定し、それのアクセスをしたいのですが毎回インターフェースを設定する必要があるのでしょうか?
###理想
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
Private Sub Class_Initialize()
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
###現実?
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
'Public WS As Worksheet
'Public wsName As String
'Public startCol As Integer
'Public startRow As Integer
'Public colLen As Integer
'' プロパティのインターフェイスを用意する。
Public Property Get WS() As Worksheet
End Property
Public Property Get wsName() As String
End Property
Public Property Get startCol() As Integer
End Property
Public Property Get startRow() As Integer
End Property
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
'プロパティ
'【質問点】何故サブクラスで宣言するのでしょうか?
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
'メンバー設定
Public Property Get absClass_WS() As Worksheet
   Set absClass_WS = WS
End Property
Private Property Get absClass_wsName() As String
   'absClass_wsName = wsName
   absClass_wsName = "営業所別_月間"
End Property
Private Property Get absClass_startCol() As Integer
   absClass_startCol = startCol
End Property
Private Property Get absClass_startRow() As Integer
   absClass_startRow = startRow
End Property
Private Sub Class_Initialize()
   '【質問点】定数を設定する場合はInitializeでするのが一般的でしょうか?
   '        それともgetterでするのがよいのでしょうか?
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
http://teratail.com/questions/88452[前回の質問の続きです。]
---
【質問点まとめ】
0. メンバ変数の宣言は何故サブクラスで行うのでしょうか?
0. メンバ変数を宣言するのに、毎回インターフェース(setter, getter)を設定する必要があるのでしょうか?
また、よろしければ皆さんならばこうしているという例文などをいただけると非常に助かります。
オブジェクト指向も学習中で突飛な質問かもしれませんがよろしくお願い致します。
---
【(追記)やりたいこと】
###【(追記)やりたいこと】
###親クラス
0. 単月系シート処理用
0. 年間系シート処理用
###子クラス
0. 事業所一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所別営業一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別得意先一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別外注一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所一覧_年間シート処理(年間系シート処理用を継承)
0. 事業所別営業一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別得意先一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別外注一覧_年間シート処理(年間系シート処理用を継承)
  • VBA

    2715 questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    2231 questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

1 実装したいことを記入

K.T_build

K.T_build score 26

2017/08/17 15:02  投稿

vbaでのクラス継承時の定数について
vbaでの継承について、質問をさせて頂きます。
javaのようにスーパークラスにメンバ変数を設定し、それのアクセスをしたいのですが毎回インターフェースを設定する必要があるのでしょうか?
###理想
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
Private Sub Class_Initialize()
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
###現実?
```vba
'スーパークラス:absClass.cls
Option Explicit
'プロパティ
'Public WS As Worksheet
'Public wsName As String
'Public startCol As Integer
'Public startRow As Integer
'Public colLen As Integer
'' プロパティのインターフェイスを用意する。
Public Property Get WS() As Worksheet
End Property
Public Property Get wsName() As String
End Property
Public Property Get startCol() As Integer
End Property
Public Property Get startRow() As Integer
End Property
Public Sub calc()
End Sub
```
```vba
'サブクラス:centerToMonth.cls
Option Explicit
Implements absClass
'プロパティ
'【質問点】何故サブクラスで宣言するのでしょうか?
Private WS As Worksheet
Private wsName As String
Private startCol As Integer
Private startRow As Integer
'メンバー設定
Public Property Get absClass_WS() As Worksheet
   Set absClass_WS = WS
End Property
Private Property Get absClass_wsName() As String
   'absClass_wsName = wsName
   absClass_wsName = "営業所別_月間"
End Property
Private Property Get absClass_startCol() As Integer
   absClass_startCol = startCol
End Property
Private Property Get absClass_startRow() As Integer
   absClass_startRow = startRow
End Property
Private Sub Class_Initialize()
   '【質問点】定数を設定する場合はInitializeでするのが一般的でしょうか?
   '        それともgetterでするのがよいのでしょうか?
   '初期値宣言
   wsName = "営業所別_月間"
   startCol = 3
   startRow = 6
   Set WS = ActiveWorkbook.Worksheets(wsName)
End Sub
Private Sub absClass_calc()
   '計算処理
End Sub
Private sub hoge()
End Sub
```
http://teratail.com/questions/88452[前回の質問の続きです。]
---
【質問点まとめ】
0. メンバ変数の宣言は何故サブクラスで行うのでしょうか?
0. メンバ変数を宣言するのに、毎回インターフェース(setter, getter)を設定する必要があるのでしょうか?
また、よろしければ皆さんならばこうしているという例文などをいただけると非常に助かります。
オブジェクト指向も学習中で突飛な質問かもしれませんがよろしくお願い致します。
オブジェクト指向も学習中で突飛な質問かもしれませんがよろしくお願い致します。
---
【(追記)やりたいこと】
###親クラス
0. 単月系シート処理用
0. 年間系シート処理用
###子クラス
0. 事業所一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所別営業一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別得意先一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別外注一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所一覧_年間シート処理(年間系シート処理用を継承)
0. 事業所別営業一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別得意先一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別外注一覧_年間シート処理(年間系シート処理用を継承)
  • VBA

    2715 questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    2231 questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る