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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

解決済

フォルダ内のファイルを全て開きセルの値を紐づけて取得し一覧へ転記したい

haru4
haru4

総合スコア11

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

2回答

0評価

0クリップ

388閲覧

投稿2022/01/10 07:25

前提・実現したいこと

お世話になります。
行き詰っているので教えてください。

実現したいこと:
“marge“フォルダ内の全てのファイル【検索ファイル.xlsm】のC2の値と一致する値を
当該マクロつきファイル【一覧.xlsm】のF列から探し同一行のM列へ
【検索ファイル.xlsm】のS9の値(日付)を転記したいです。

C2の値は3文字以上の数値で
123・456・789 のようになっているケースと
123 のように“・”を含まないケースがあります。
“・”で分割された値をSplitで検索値に指定したいと考えています。

下記コード
‘Noと紐づくItem(日付)を取得
の部分については
こちらのサイトの

VBA:配列 Keyに紐づくItemの格納がうまくいかない
https://teratail.com/questions/348547

の投稿を引用させて頂きました。

コードを載せることも恥ずかしいのですが...
有識者の方のお力をお借り出来ると幸いです。

よろしくお願いいたします。

発生している問題・エラーメッセージ

‘Noと紐づくItem(日付)を取得
With ws exists(No) Then
でエラーになります。

該当のソースコード

Sub

‘margeフォルダパス指定 Const Path=”C:\AAA\BBB\CCC\marge\ Dim cnt As Long Dim I As Long Dim buf As String Dim xls As New Excel.Application Dim wb As Workbook Dim ws As Worksheet Dim ws2 As Worksheet Dim num As String Dim No() As String Dim msg As String Application.ScreenUpdating=False ‘確認メッセージ msg=”事前準備①・②は済みましたか?” If msgBox(msg,vbYesNo)=vbNo Then Exit Sub ‘margeフォルダ内のファイルを全て開き、日付を取得 buf=Dir(Path) cnt=6 Do While buf <>”” Set wb=xls.Workbooks.Open( Path & buf ) Set ws=wb.Worksheets(“sheet4”) num=ws.Cells(2,3) ‘dcの作成 Dim dc As Object Set dc=CreateObject(“Scripting.Dictionary”) ‘検索ファイルのC2の値を”・“で区切り、変数Noへ格納 No=Split(num,”・”) For i=0 To UBound(No) ‘Noと紐づくItem(日付)を取得 Dim arr With ws exists(No) Then dc.Add No,Array(Array(.Cells(15,6))) Else arr=dc(No) ReDim Preserve arr(UBound(arr)+1) Arr(UBound(arr))=Array(,Cells(15,6)) End If ‘日付を一覧のM列へ転記 Set ws2=ThisWorkbook.Sheets(“作業シート“) Ws2.Cells(dc(No),”M”)=.Cells(15,6).Value End With Next i Wb.Close Savechanges:=False buf= Dir () cnt = cnt + 1 Loop Set xls= Nothing Application.ScreenUpdating = True End Sub コード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。