[[20210407134732]] 『データの転記についてご教授いただければと思いま』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの転記についてご教授いただければと思います。』(VBA初心者)

エクセルのVBAについて質問です。
データの転記についてご教授いただければと思います。
メインファイルのセルに記載しているファイル名から特定セルの数字や文字をメインファイルの特定のセルにデータを転記したいです。

メインファイルのセルを選択(複数選択)しファイルを開くところまで(ファイルは開かず出来ればなお助かります)は出来たのですが、そこからメインファイルへのデータの転記のやり方があれば教えていただけると幸いです、宜しくお願い致します。
なお、メインファイルの転記先のセルは、選択した列によって変わります。
作業の流れです。
1、メインファイルのセルを選択(ファイル名)
2、マクロを実行(データ転記ボタン)
3、メインファイルのセルに選択したファイル名の中からデータが転記

Sub 複数選択()
Dim f As String, fld As String, key As String
Dim buf As Range
'フォルダ
fld = "C:\OOOO\OOOO\OOOO\OOOO\"
For Each buf In Selection
'ファイルキーワード(先頭部分)
f = Dir(fld & "\" & buf.Value & "*.xlsx")
If f = "" Then
Else
Do While f <> ""
Workbooks.Open fld & "\" & f
f = Dir()
Loop
End If
Next buf

End Sub

< 使用 Excel:Excel2013、使用 OS:Windows8 >


どれだけのファイルを開いてどれだけのセルを転記をするのかによって書き方が変わると思います。
単純なものでよいのでしたらそれこそ
Workbooks("メインファイル").Worksheets(1).Range("A1") = Workbooks(f).Worksheets(1).Range("A1")
とかでもできると思いますし
(砂糖) 2021/04/07(水) 14:20

開いてデータを転記するファイルは多くても10件ほどです。

教えていただいたものは式のどこに記入すれば良いのでしょうか?
またデータ転記後ファイルを閉じるのはどうすれば良いでしょうか?
どうぞよろしくお願いします。
(VBA初心者) 2021/04/07(水) 14:29


上の記述の場合だとfを開いた後からfが書き換わる前の間に記入です
ワークブックを閉じるならワークブックを開いた後次のワークブックを開く前に
ActiveWorkbook.Close
で閉じられるんじゃないでしょうか
というか上の記述で本当にいいんですか?
(砂糖) 2021/04/07(水) 14:37

    Sub 複数選択()
        Dim f As String
        Dim fld As String
        'Dim key As String
        Dim buf As Range

        'フォルダ
        fld = "C:\OOOO\OOOO\OOOO\OOOO\"

        For Each buf In Selection
            'ファイルキーワード(先頭部分)
            f = Dir(fld & "\" & buf.Value & "*.xlsx")
            Do While f <> ""
                'データを収集
                With Workbooks.Open(fld & "\" & f)  'ファイルを開く
                    '開いたファイルからデータを収集
                    .Close SaveChange:=False        'セーブしないで閉じる
                End With

                'データを転記
                Select Case buf.Column              'bufの列により分岐
                    Case 1 To 10
                        'A〜J列の場合
                    Case 11 To 20
                        'K〜T列の場合
                    Case 21 To 30
                        'U〜AD列の場合
                    Case Else
                        '上記以外の場合
                End Select
                f = Dir()
            Loop
            End If
        Next buf
    End Sub
(参考) 2021/04/07(水) 14:43

ご連絡遅くなりすみません。
いただいたアドバイスで無事に出来ました。

                'データを転記
                Select Case buf.Column              'bufの列により分岐
                    Case 1 To 10
                        'A〜J列の場合
                    Case 11 To 20
                        'K〜T列の場合
                    Case 21 To 30
                        'U〜AD列の場合
                    Case Else
                        '上記以外の場合
                End Select

こちらの部分ですが、転記元のA1セルの値や文字をbuf列のB2セルに転記したい場合どういったコードになりますでしょうか?
教えていただけると幸いです。宜しくお願い致します。
(VBA初心者) 2021/04/07(水) 17:53


横からなので、無理にとは言いませんが、メインファイルの該当シートのレイアウト、【特定セル】の説明(シート、セル番地等)、【転記先セル】の説明(シート、セル番地等)を示してもらえませんか?

(もこな2 ) 2021/04/08(木) 08:23


もこな2様
コメントありがとうございます。

メインファイルの該当シートのレイアウト
→A列に転記元のファイル名が記入されております。(ファイルの一部名の場合もあり)

【特定セル】の説明(シート、セル番地等)
→メインファイルのA列の任意のセルを選択しマクロを実行します。
A25を選択する場合もあれば、A569を選択する場合もあります。
転記先のシートと転記元のシートは変動しません。
転記したいセル(複数あります)
転記元D8から転記先E(選択した列番号)
転記元F12から転記先F(選択した列番号)
など

【転記先セル】の説明(シート、セル番地等)
→シートはマクロを実行する際にセルを選択しファイルを開くシートが転記先のシートになります。
セルの番地は例としてA25を選択しファイルを開きデータを転記した場合は列は25で行はEやFになります。

説明がわかりにくく申し訳ありませんが宜しくお願い致します。

(VBA初心者) 2021/04/08(木) 09:13



ちょっとよくわからないので再確認。
>なお、メインファイルの転記先のセルは、選択した列によって変わります。
ですから、
 【メインファイルxlsm】の【1番目?】シート
 _______A________B________C________D________E_____
 1    ああ     かか     ささ     たた     なな
 2    いい     きき     しし     ちち   【にに】
 3  【うう】   くく     すす     つつ     ぬぬ
 4    ええ     けけ     せせ   【てて】   ねね
 5    おお     ここ     そそ     とと     のの

↑のようなときは、「にに.xlsx」 「うう.xlsx」 「てて.xlsx」から、それぞれ転記するけども、転記先の【列】が違うと解釈しました。
でも、追加された説明だと、

 _______A______
   1    ああ     
   2    いい
   .
   .
  25  【うう】
  26    ええ
   .
   .
 568    おお
 569  【かか】
 570    きき
   .
   .

↑のようなときに「うう.xlsx」「かか.xlsx」から転記ということになるように思いますが、この解釈で正しいですか?

■2
「■1」の理解が正しいとなると、"選択した列番号"というのがよくわからなくなるのですが、【いつ】選択するのですか?
また、【行】はどこになるのですか?

■3
>転記先のシートと転記元のシートは変動しません。
ちょっとよくわからないので↓のように、ブック、シート、セル番地等を含めて説明してもらえませんか?

 「うう.xlsx」の「1番目」のシートの「D3」セル→「メインファイルxlsm」の「集計用」という名前のシートの「25行目・D列」に転記

■4
>ファイルの一部名の場合もあり
↑例示がないとわかりません。
 どのようなときに、どんなファイル名のものをヒットさせればよいか提示してください。

(もこな2 ) 2021/04/08(木) 19:46


コメントありがとうございます。
★が当方回答です。

ちょっとよくわからないので再確認。
>なお、メインファイルの転記先のセルは、選択した列によって変わります。
ですから、

 【メインファイルxlsm】の【1番目?】シート
 _______A________B________C________D________E_____
 1    ああ     かか     ささ     たた     なな
 2    いい     きき     しし     ちち   【にに】
 3  【うう】   くく     すす     つつ     ぬぬ
 4    ええ     けけ     せせ   【てて】   ねね
 5    おお     ここ     そそ     とと     のの
↑のようなときは、「にに.xlsx」 「うう.xlsx」 「てて.xlsx」から、それぞれ転記するけども、転記先の【列】が違うと解釈しました。
でも、追加された説明だと、
 _______A______
   1    ああ     
   2    いい
   .
   .
  25  【うう】
  26    ええ
   .
   .
 568    おお
 569  【かか】
 570    きき
   .
   .
↑のようなときに「うう.xlsx」「かか.xlsx」から転記ということになるように思いますが、この解釈で正しいですか?
★→この解釈で正しいです。
選択する列は常に固定で、A列を選択します。(選択する列は固定で、行がか変わるという事でした、申し訳ありません。)

■2
「■1」の理解が正しいとなると、"選択した列番号"というのがよくわからなくなるのですが、【いつ】選択するのですか?
また、【行】はどこになるのですか?

★例:転記元D8から転記先E(最初に選択した行番号)に転記です。

■3
>転記先のシートと転記元のシートは変動しません。
ちょっとよくわからないので↓のように、ブック、シート、セル番地等を含めて説明してもらえませんか?

 「うう.xlsx」の「1番目」のシートの「D3」セル→「メインファイルxlsm」の「集計用」という名前のシートの「25行目・D列」に転記

★ 「うう.xlsx」の「1番目」のシートの「D3」セル→「メインファイルxlsm」の「集計用」という名前のシートの「25行目・D列」に転記で正しいです。

■4
>ファイルの一部名の場合もあり
↑例示がないとわかりません。
 どのようなときに、どんなファイル名のものをヒットさせればよいか提示してください。

★A列セルに記入してあるファイル名は下記などですが。
【うう】
【かか】
【ああ】
実際のファイルは【ああ】、【うう-AAA】、【かか-BBB】などとなっております。
【ああ】の場合はそのままヒットですが
セルに記入されているのは【うう】でも、実際のファイルが【うう-AAA】の場合もあるのでこれでもヒットし転記したいと考えております。
ファイル名の一部でもファイルをを開くことは出来たのでそれを使えればと考えております。

宜しくお願い致します。

(おいしい麦茶) 2021/04/09(金) 09:06


質問された方とニックネームが違いますがどちら様ですか?同じ方であるなら、このトピックでもその説明をされた方がよいとおもいます。
(私見ですが、別人を装ったところで良いことはないとおもうので、ニックネームをコロコロ変えるのはオススメしません)

■5

 ★例:転記元D8から転記先E(最初に選択した行番号)に転記です。
 「うう.xlsx」の「1番目」のシートの「D3」セル→「メインファイルxlsm」の「集計用」という名前のシートの「25行目・D列」

ちょっとわかりません。もう一度【行・列】について教えてください。

 (どの【列】が、どの【列】に対応してるのか)
 (元データ側はどの【行】のデータを拾えば良いのか)

■6
>ファイル名の一部でもファイルを開くことは出来たのでそれを使えればと考えております。
ではそれを提示してください。(出来ているなら説明は省きますので)

■7
>(ファイルは開かず出来ればなお助かります)
これは、手間なので対応しません。

(もこな2) 2021/04/09(金) 09:46


すいません、別の質問と区別する為名前を変えており直すのを忘れておりました、申し訳ありません。

■5

 ★例:転記元D8から転記先E(最初に選択した行番号)に転記です。
 「うう.xlsx」の「1番目」のシートの「D3」セル→「メインファイルxlsm」の「集計用」という名前のシートの「25行目・D列」
ちょっとわかりません。もう一度【行・列】について教えてください。

 (どの【列】が、どの【列】に対応してるのか)
 (元データ側はどの【行】のデータを拾えば良いのか)
★元データの拾うセルはD8セルとF12です。
拾うセルはメインファイルで選択した行にかかわらず固定した場所を拾いたいです。
「うう.xlsx」のD8とF12のセルには商品名や金額が記入されており、それをメインファイルに転記したいと考えております。

■6
>ファイル名の一部でもファイルを開くことは出来たのでそれを使えればと考えております。
ではそれを提示してください。(出来ているなら説明は省きますので)
★'ファイルキーワード(先頭部分)
f = Dir(fld & "\" & buf.Value & "*.xlsx")
If f = "" Then
Else
Do While f <> ""
Workbooks.Open fld & "\" & f
このコードを使用してファイル名の先頭部分のみでもファイルを開くことが出来ましたのでそのような説明をさせていただきました。

■7
>(ファイルは開かず出来ればなお助かります)
これは、手間なので対応しません。
★承知しました。

宜しくお願い致します。
(VBA初心者) 2021/04/09(金) 11:06


すいません、説明をまとめます。

?@メインファイルの【うう】を選択しマクロ実行
?A【うう.xlsx】ファイルのD8をメインファイルのD25に転記
?B【うう.xlsx】ファイルのF12をメインファイルのG25に転記
?C【ああ】【おお】を選択した場合は選択した列番号に応じてD列とG列に転記 
?D元データのD8とF12は常に同じ場所です。

【メインファイルxlsm】の【1番目】シート

  _______A________B________C________D________E_________F_________G_____
   1    ああ     
   2    いい
   .
   .
  25  【うう】          商品名A           25000
  26    ええ
   .
   .
 568    おお
 569    かか

 【元データ側 うう.xlsx】の【1番目】
  _______A________B________C________D________E________F_____
   1         
   2    
   3                     
   4
   5    
   6   
   7
   8               商品名A
   9 
  10
  11
  12                        25000

宜しくお願い致します。

(VBA初心者) 2021/04/09(金) 11:27


では、こんな感じじゃないですか?

    Sub 複数選択_改()
        Const フォルダパス As String = "C:\OOOO\OOOO\OOOO\OOOO\"
        Dim ブック名 As String
        Dim buf As Range
        Dim srcWB As Workbook

        With ThisWorkbook.Worksheets(1)
            For Each buf In Selection
                '▼ブック名を取得してから、当該ブックを開いて変数にセットする
                ブック名 = Dir(フォルダパス & buf.Value & "*.xlsx")
                srcWB = Workbooks.Open(フォルダパス & ブック名)

                '▼転記する
                .Cells(buf.Row, "D").Value = srcWB.Worksheets(1).Range("D8").Value
                .Cells(buf.Row, "G").Value = srcWB.Worksheets(1).Range("F12").Value

                '▼開いたブックを閉じる
                srcWB.Close False

            Next buf
        End With
    End Sub

(もこな2) 2021/04/09(金) 12:05


ご返信ありがとうございます。
試したところ下記部分でエラーが出てしまいます。

srcWB = Workbooks.Open(フォルダパス & ブック名)
オブジェクト変数または With ブロック変数が設定されていません。(エラー番号:91)

ご確認いただけると幸いです。

(VBA初心者) 2021/04/09(金) 12:28


こちらに同じ環境がないので、確認はご自身でお願いします。

それが難しいのであれば、↓が実際になんとなっているのか教えてください。(フォルダ名などがばれて困る場合は適当なものにかえてください)

 Const フォルダパス As String = "C:\OOOO\OOOO\OOOO\OOOO\"
 buf.Value ←がどんな値になっているか

(もこな2) 2021/04/09(金) 12:53


ご連絡ありがとうございます。

Const フォルダパス As String = "C:\Users\ユーザー\Dropbox\見積もりフォルダ\"
buf.Value は「-111」

となっております。
(VBA初心者) 2021/04/09(金) 13:10


うーん。なんででしょうね。↓を実行するとどうなりますか?
    Sub test()
        Const フォルダパス As String = "C:\Users\ユーザー\Dropbox\見積もりフォルダ\"
        Dim ブック名 As String

        ブック名 = Dir(フォルダパス & -111 & "*.xlsx")
        If ブック名 = "" Then
            MsgBox "指定フォルダに「-111」で始まるxlsxファイルが存在しません"
        Else
            Workbooks.Open フォルダパス & ブック名
            MsgBox ActiveWorkbook.Name & "を開きました"
        End If
    End Sub

(もこな2) 2021/04/09(金) 13:21


いただいたコードを実行したところ-1111から始まるファイルは無事に開きました。
ファイルの場所や元データ等を変えてもう少し試してみます。
(VBA初心者) 2021/04/09(金) 13:52

ちょっと↓を実行してみて、イミディエイトになんと出力されるか教えてもらえませんか?
(エラー番号:91ということなので、私が思ってるエラーとは根本的に違うかもしれませんが・・・)
    Sub テスト用()
        Const フォルダパス As String = "C:\Users\ユーザー\Dropbox\見積もりフォルダ\"
        Dim ブック名 As String
        Dim buf As Range
        With ThisWorkbook.Worksheets(1)
            For Each buf In Selection
                Debug.Print " bufのアドレス:" & buf.Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True)
                Debug.Print " bufの値   :" & buf.Value
                ブック名 = Dir(フォルダパス & buf.Value & "*.xlsx")
                Debug.Print " ファイル名    :" & ブック名 & vbLf
            Next buf
        End With
    End Sub

(もこな2) 2021/04/09(金) 17:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.