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

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

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

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

Q&A

解決済

1回答

3607閲覧

VBAで400エラーが出てしまいます

Gamagaeru

総合スコア11

VBA

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

0グッド

0クリップ

投稿2021/04/13 06:53

以下のコードを実行すると400エラーが出てしまいます。
どのようにしたら、正常に値が取得できるでしょうか。
宜しくお願いします。

Sub 単体テスト仕様書マクロ() Dim wFile As String Dim wFilePath As String Dim i As Long 'Excelファイルが存在していたらファイル名を返す wFile = Dir(ActiveWorkbook.Path & "*.xlsx") '先頭行を指定 i = 2 'カレントディレクトリに存在するExcelファイルを全て読み込む Do While wFile <> "" '開くExcelファイルのフルパスを取得 wFilePath = ActiveWorkbook.Path & "\" & wFile '機能(プログラム)名・テスト件数・完了数・不具合件数を取得し配列に格納する(区切り文字:|) strData = Split(File_Load(wFilePath), "|") '機能(プログラム)名 Cells(11, 3) = strData(0) 'テスト件数 Cells(15, 3) = strData(1) '完了数 Cells(16, 3) = strData(2) '不具合件数 Cells(18, 3) = strData(3) '次のExcelファイルを取得 wFile = Dir() '行数をカウント i = i + 1 Loop End Sub 'Excelファイルを開いてデータを取得 '戻り値:名前|住所 ( | で区切る) Function File_Load(ByVal wFilePath As String) As String Dim CurBookName As Variant Dim ColNo As Long Dim RowNo As Long Dim strValue As String Dim FoundCell As Range Dim i As Long 'ファイルを開く Workbooks.Open wFilePath '開いたExcelのファイル名を取得 CurBookName = Application.ActiveWorkbook.Name '検索する項目を配列に格納 wItem = Array("機能(プログラム)名", "テスト件数", "完了数", "不具合件数") '検索する For i = LBound(wItem) To UBound(wItem) Set FoundCell = Cells.Find(What:=wItem(i)) If FoundCell Is Nothing Then '検索出来なかった場合 If i = 0 Then strValue = "" Else strValue = strValue & "|" End If Else '検索したセルに移動 FoundCell.Select ColNo = ActiveCell.Column '列番号を取得 RowNo = ActiveCell.Row '行番号を取得 '機能(プログラム)名を取得 If i = 0 Then '最初の項目 Cells(15, 3).Value Cells(16, 3).Value Cells(18, 3).Value Else '2番目以降の項目は|で区切る strValue = strValue & "|" & Cells(RowNo, ColNo + 1).Value End If End If Next i '結果を返す File_Load = strValue '開いたExcelファイルを閉じる Application.DisplayAlerts = False '確認メッセージの非表示 Workbooks(CurBookName).Close Application.DisplayAlerts = True '確認メッセージの表示 MsgBox "完了" End Function

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

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

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

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

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

guest

回答1

0

ベストアンサー

VBA

1Function File_Load(ByVal wFilePath As String) As String 2 3 Dim wb As Workbook 4 Dim wItem As Variant 5 Dim i As Long 6 Dim FoundCell As Object 7 8 Set wb = Workbooks.Open(wFilePath) 9 10 wItem = Array("機能(プログラム)名", "テスト件数", "完了数", "不具合件数") 11 12 For i = LBound(wItem) To UBound(wItem) 13 14 Set FoundCell = wb.Worksheets(1).Cells.Find(What:=wItem(i)) 15 16 If FoundCell Is Nothing Then 17 wItem(i) = "" 18 Else 19 wItem(i) = FoundCell.Offset(, 1).Value 20 End If 21 22 Next i 23 24 wb.Close SaveChanges:=False 25 26 File_Load = Join(wItem, "|") 27 28 MsgBox "完了" 29 30End Function

投稿2021/04/13 12:07

jinoji

総合スコア4585

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

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

Gamagaeru

2021/04/14 01:56

ありがとうございます。 400エラーはなくなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問