質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

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

解決済

VBAのクラスモジュールへ配列格納&取り出し

SASAKI
SASA600

総合スコア4

VBA

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

2回答

0グッド

0クリップ

279閲覧

投稿2022/12/02 00:48

ここにより詳細な情報を記載してください。
VBAでクラスモジュール(Class1)を作成し
その中に配列を格納して、それを標準モジュールで取り出し、
新規シート1行目に1列目から順に入れていきたいのですがどのようなコードにすればよいでしょうか?

格納したい配列は以下になります
msh(0) = "作業工程"
msh(1) = "作業者"
msh(2) = "箇所数"
msh(3) = "管理番号"
msh(4) = "通しNo"
msh(5) = "仕様"
msh(6) = "口径"
msh(7) = "形状"
msh(8) = "管端1"
msh(9) = "管端2"
msh(10) = "作業時間"
msh(11) = "比率"
msh(12) = "前作業"
msh(13) = "設備稼働時間"
msh(14) = "後作業"
msh(15) = "インターバル"
msh(16) = "比率"
msh(17) = "総作業時間"
msh(18) = "開始時間"
msh(19) = "終了時間"

目指す形は以下のようになります。
クラスモジュールで使いまわす予定です。
イメージ説明

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

meg_

2022/12/02 02:02

> VBAでクラスモジュール(Class1)を作成し Class1のコードを掲載いただけないでしょうか?(コピペできると回答者が回答しやすくなります)
hatena19

2022/12/02 02:07 編集

配列の中身は固定値でしょうか。それとも、あとからユーザーが編集、追加、削除できるものでしょうか。 固定値なら、クラスにするメリットはないと思いますが、将来、データを格納するなど拡張する予定でしょうか。

回答2

4

固定値の配列ならクラスモジュールにするメリットはないように思いますが、今後拡張して、データも格納できるようにする予定だとして、とりありず、下記のような感じでどうでしょう。

vba/Class1

1Option Explicit 2Private amsh As Variant 3 4Public Property Get msh() As Variant 5 msh = amsh 6End Property 7 8Private Sub Class_Initialize() 9 amsh = Split("作業工程 作業者 箇所数 管理番号 通しNo 仕様 口径 形 管端1 管端2 作業時間 比率 前作業 設備稼働時間 後作業 インターバル 比率 総作業時間 開始時間 終了時間") 10End Sub 11 12Public Sub SetHeader(Target As Range) 13 Target.Resize(1, UBound(amsh)).Value = amsh 14End Sub

せっかくのクラスなので、ヘッダータイトル出力のメソッドも追加してみました。

標準モジュールでは例えば下記のような感じでタイトルを出力できます。

vba/Module1

1Public Sub ヘッダータイトル挿入() 2 With New Class1 3 .SetHeader Range("A1") 4 End With 5End Sub

With を使うとEnd Withでインスタンスを破棄してくれます。

投稿2022/12/02 03:42

hatena19

総合スコア32005

spoofy_dragon, SASA600😄を押しています
spoofy_dragon, pig_vba👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

ベストアンサー

正直この程度であればわざわざクラスにする必要性はないとは思いますが…

class1

1Option Explicit 2 3Private msh_ As Variant 4 5Private Sub Class_Initialize() 6 msh_ = Array( "作業工程", "作業者", "箇所数", "管理番号","通しNo", "仕様", "口径", "形状","管端1","管端2", "作業時間","比率", "前作業", "設備稼働時間", "後作業", "インターバル", "比率", "総作業時間","開始時間", "終了時間") 7 8End Sub 9Property Get msh() As Variant 10 msh = msh_ 11 12End Property 13

Module1

1Option Explicit 2 3Sub 列タイトル挿入() 4 5 Dim s As Variant 6 Dim col As Long 7 Dim ws As Worksheet: Set ws = ActiveSheet 8 9 Dim cls As Class1 10 Set cls = New Class1 クラス変数のインスタンス化 11 12 s = cls.msh() 13 14 For col = LBound(s) To UBound(s) 15 ws.Cells(1, col + 1).Value = s(col) 16 17 Next col 18 19 'クラス変数は最後にインスタンスの破棄が必要 20 Set cls = Nothing 21 22End Sub 23

投稿2022/12/02 02:04

pig_vba

総合スコア648

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

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