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

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

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

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

Q&A

2回答

158閲覧

【エクセルマクロ】エキスポート済みのシートモジュールへインポートする為には

rei2025

総合スコア0

VBA

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

0グッド

0クリップ

投稿2025/03/08 14:10

実現したいこと

保存してある、以下のコードをシートモジュールへ入れたい。コピーしたいです
やり方は、ハンド作業であれば

インポート⇒クラスモジュールとしてインポートされる⇒同モジュールをコピー
⇒シートモジュールへ貼付⇒完成です

上記、一連の作業を、VBAにて記述したいです
ご存じのかた、アドバイスやコードを教えて下さい

前提

以下のソースコードをシートモジュールへ、ハンド作業ではなく
VBAを使ってコピーしたい

該当のソースコード

エクセル マクロ
エクセル VBA

【入れたいシートモジュール】
Sheet1(Sheet1)

【データ】
Sheet1.cls

【ソースコード】

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = Me

'既存の条件付き書式をクリア
ws.Cells.FormatConditions.Delete

' アクティブセルの行をハイライト

With ws.Rows(Target.Row).FormatConditions.Add(Type:=xlExpression, Formula1:="=ROW()=" & Target.Row)

.Interior.Color = RGB(255, 255, 153) ' ハイライト色(黄色)

End With

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

外部にSheet1.clsファイルが存在しているってことですよね?

VBA

1Sub ImportCodeToSheetModule() 2 Dim VBProj As Object 3 Dim VBComp As Object 4 Dim CodeModule As Object 5 Dim FileNum As Integer 6 Dim FilePath As String 7 Dim Code As String 8 Dim Line As String 9 10 ' ファイルのパスを設定(適宜修正) 11 FilePath = ThisWorkbook.Path & "\Sheet1.cls" 12 13 Set VBProj = ThisWorkbook.VBProject 14 15 Set VBComp = VBProj.VBComponents("Sheet1") 16 Set CodeModule = VBComp.CodeModule 17 18 ' 既存のコードをクリア 19 CodeModule.DeleteLines 1, CodeModule.CountOfLines 20 21 FileNum = FreeFile 22 Open FilePath For Input As FileNum 23 24 Do Until EOF(FileNum) 25 Line Input #FileNum, Line 26 Code = Code & Line & vbCrLf 27 Loop 28 Close FileNum 29 30 CodeModule.AddFromString Code 31 32 MsgBox "コードのインポートが完了しました", vbInformation 33End Sub

投稿2025/03/09 00:34

Black_Velvet

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2025/03/09 03:07

参考になります。1点「FileNum = FreeFile」は何をしているのでしょうか?
Black_Velvet

2025/03/09 03:44

テキストファイル等を開くときOpenを使用しますが、その時に任意の『ファイル番号』を振ります。(open MyFile for input as #1など) その時に固定番号(#1など)でもいいのですが、複数開いたとき番号が被るとエラーになるので、慣習的にfreefileを使用して『使用されていないファイル番号』を取得します。 今回は1個しか開かないのであまり関係ないです。
hatena19

2025/03/09 07:14

ファイルを1行目から読み込んでいますが、 エクスポートしたファイルの先頭部分にコード以外の情報がありますので、その部分をとばして読み込む必要があると思います。
meg_

2025/03/09 08:51

@Black_Velvet 解説ありがとうございます。FreeFileという関数があるんですね。勉強になりました。
guest

0

インポート⇒クラスモジュールとしてインポートされる⇒同モジュールをコピー
⇒シートモジュールへ貼付⇒完成です

上記、一連の作業を、VBAにて記述したいです

この作業をVBA化すると下記になります。

vba

1Public Sub ImportSheetModule() 2 Dim impFile As String: impFile = ThisWorkbook.Path & "\Sheet1.cls" 'インポートファイルパス 3 Dim dstSheet As String: dstSheet = "Sheet1" 'インポート先シート名 4 5 Dim WB As Workbook: Set WB = ThisWorkbook 6 Dim cmps As Object: Set cmps = WB.VBProject.VBComponents 7 Dim srcCmp As Object: Set srcCmp = cmps.Import(impFile) ' モジュールファイルのインポート 8 Dim srcMod As Object: Set srcMod = srcCmp.CodeModule 'インポートしたモジュールのコード 9 Dim dstMod As Object: Set dstMod = cmps(WB.Sheets(dstSheet).CodeName).CodeModule 10 dstMod.DeleteLines 1, dstMod.countOfLines ' シートモジュールのコードを全削除 11 dstMod.AddFromString srcMod.Lines(1, srcMod.countOfLines) ' シートモジュールへ貼り付け 12 13 WB.VBProject.VBComponents.Remove srcCmp 'インポートしたモジュールを開放 14End Sub

インポートしたクラスモジュールを開放するコードを追加しておきましたので、不必要なら削除してください。

投稿2025/03/09 06:58

編集2025/03/10 00:52
hatena19

総合スコア34292

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問