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

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

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

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

受付中

【VBA】一番初めの処理に戻って、同じ作業を繰り返すことはできないのでしょうか?

sh444
sh444

総合スコア0

VBA

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

3回答

0評価

1クリップ

554閲覧

投稿2021/08/25 08:38

編集2022/01/12 10:55

VBA初心者です。
普段から、コードはネットで調べて組み合わせて作っています。

今回、組み合わせたコードで処理を一番初めに戻って繰り返しさせたいです。
調べてみたのですが、VBAでは一番初めに戻るような処理はないのでしょうか?

今現在作ったコードでは
①データ読み取りをしたいExcelを開く、別ブックを開いて該当のセルに入力。セル自体に数式が入っているので各シートに反映されます。
②inputboxで各シートの該当セルに表示させたい文字を入力。
③3、4枚目のシートを選択。
④名前をつけて保存する。

という内容です。この1-4までの作成した処理を1番はじめまで戻って同じ処理を繰り返したいのですが、参考になる記事等が見つかりません。

なにかヒントをいただけないでしょうか。
よろしくお願いします。

Dim

Dim OpenFileName, fileName, Path, SetFile As String Dim wbMoto, wbSaki As Workbook Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をセット Application.DisplayAlerts = False RC = MsgBox("マスターデータ取込みますか?", vbYesNo + vbQuestion, "確認") If RC = vbYes Then OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'ダイアログボックスを表示して、マスターデータファイルを指定します。 If OpenFileName <> "False" Then SetFile = OpenFileName Else MsgBox "キャンセルされました" Exit Sub 'マスターデータの取り込みをキャンセル End If Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'ダイアログボックスで指定したマスターデータファイルを開きます。 Set wbSaki = Workbooks.Open(Path & SetFile) 'ワークブック間のシート「項目」をコピーします。 wbSaki.Worksheets("内訳書").Range("D:O").Copy wbMoto.Worksheets("見積入力").Range("U7").PasteSpecial xlPasteValues Application.CutCopyMode = False 'コピー切り取りを解除 wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる Else MsgBox "処理を中断します" End If Application.DisplayAlerts = True Dim ans As String ans = InputBox("見積書・請求書No", "", "") If ans <> "" Then wbMoto.Worksheets("見積(").Range("I3").Value = ans Worksheets("見積").Range("I3").Value = "あいう-" & ans End If Application.DisplayAlerts = True ans = InputBox("見積書発行日", "", "") If ans <> "" Then wbMoto.Worksheets("見積").Range("F11").Value = ans End If ans = InputBox("完工日", "", "") If ans <> "" Then wbMoto.Worksheets("請求").Range("F11").Value = ans End If ans = InputBox("請求書発行日", "", "") If ans <> "" Then wbMoto.Worksheets("請求").Range("F12").Value = ans End If Worksheets(Array(2, 3)).Select '3 番目と 4 番目のシートを選択 Dim xFile xFile = Application.GetSaveAsFilename( _ FileFilter:="Excelファイル, *.xlsm") If TypeName(xFile) <> "Boolean" Then ActiveWorkbook.SaveAs FileName:=xFile End If End Sub ' ' コード コード

ちなみに、ファイルを順番に開き、上書き保存して閉じるといったコードは見つけました。

Sub

Dim FolderName As String ’文字列を入れる変数として「FolderName」を使う Dim index As Integer ’数字を入れる変数として「index」を使う Dim FileName As String ’文字列を入れる変数として「FileName」を使う FolderName = Application.GetOpenFilename’ダイアログを用いて選択したファイルのパスをFolderNameとする① If FolderName = “False” Then’FolderNameが選択されていなければ作業を終了する Exit Sub End If ’今のフォルダ名には選択したファイル名含まれているので、ファイル名の部分を切り取る作業。 index = InStrRev(FolderName, “\”)’フォルダ名部分の文字数をカウントする FolderName = Left(FolderName, index)’ カウントした文字数までの部分を切り取ってフォルダ名とする FileName = Dir(FolderName & “*xls*”)’ フォルダの中に含まれるファイルを取り出す Do While FileName <> “”’ ファイルがなくなるまで繰り返す Workbooks.Open FolderName & FileName’ファイルを開く Cells(1,1) = 1’ 変更を行う Workbooks(Workbooks.Count).Save Workbooks(Workbooks.Count).Close FileName = Dir() ’ Loop End Sub コード

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jinoji
jinoji

2021/08/25 09:07

inputboxでの入力とかも含めて一から繰り返すということですか?
sh444
sh444

2021/08/25 09:50

そうです、Excelの取り込みから初めに戻るということです。 セル内での繰り返しやループは見つけましたが、vba内での繰り返しは無いのでしょうか\^\^;
jinoji
jinoji

2021/08/25 09:59

やりたいことは、たとえばあるフォルダ内に複数のファイルがあって、 それを順番に開いて①~④の処理を行っていく、という感じなのでしょうか。
sh444
sh444

2021/08/26 01:25

返信遅れてすみません。 わかりにくくてすみません、したいことはそうです!
jinoji
jinoji

2021/08/26 01:44

For Each f in fso\.GetFolder\(folderpath\)\.Files if fso\.GetExtensionName Like "xls\?" Then  ①Set wb=Workbooks\.Open\(f\)  ②  ③  ④ End If Next みたいなイメージです。
sh444
sh444

2021/08/26 02:46

ご教授いただきました、内容を質問本文にコード追加いたしましt。 End Ifも入れているのですが、なぜかNextに対応するForがありません。とコンパイルエラーが出ました。
jinoji
jinoji

2021/08/26 04:01 編集

ヒントになればと思って部分的に示しただけで、単純に追加するだけで動くようには書いていません。 言葉足らずだった点は私の配慮が足りませんでしたが、 かといってすべて丁寧に説明しようとするには時間が足りません。 一旦私のコメントは聞かなかったことにしてください。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

VBA

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