[[20230612160858]] 『複数ファイルのデータの貼り付けについて』(データ貼付) ページの最後に飛ぶ

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

 

『複数ファイルのデータの貼り付けについて』(データ貼付)

基になるExcelがありA列にキー番号があり(ファイル名:アイテム一覧)

次に同じ名前+日付のファイルが指定のフォルダに入っています(900程)
「例:在庫20230611」
その表にはキーが無いので、B列にA列+C列をCONCATENATEしたキーを作り
40列目のAO列を基になるExcelに貼付て行く
関数だとこんな感じです=VLOOKUP(A2,'[在庫20230611.xls]適正発注データ確認用'!$B:$AO,40,0)

また、反映させた列がいつの分か分かる用に反映させた列の1行目にファイル名を反映

こんな魔法みたいな事は可能でしょうか?
また、コードを教えて頂けると幸いです。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


基になるExcelに貼付て行く?
(?) 2023/06/12(月) 16:43:54

  関係する項目の具体例を書いて貰えませんか? (異同関係が分かりにくいです)

 「キー番号」              → ?
 「ファイル名:アイテム一覧」      → ?
 「同じ名前+日付のファイル」      →  在庫20230611.xls
  A列+C列をCONCATENATEした「キー」   → ? 
  反映させた列                     → どこ(列名。1列/複数列?)
  反映させた列の1行目に「ファイル名」 → ?

(半平太) 2023/06/12(月) 22:59:58


すみません。
 「キー番号」              → A列倉庫CD+C列商品CD
 「ファイル名:アイテム一覧」      → 
A列:基になるExcelファイル、倉庫CD+列商品CD
B列:商品名	C列:ケース入数	D列:袋入数

 「同じ名前+日付のファイル」      →  在庫20230611.xls
在庫20230601 在庫20230602 ・・・在庫20230613

  A列+C列をCONCATENATEした「キー」   → A列倉庫CD+C列商品CD 
  反映させた列                     → 在庫20230611.xlsの40列目のAO列
  反映させた列の1行目に「ファイル名」 → 在庫20230611.xlsのファイル名

すみません。
(データ貼付) 2023/06/13(火) 09:43:00


 >  反映させた列                     → 在庫20230611.xlsの40列目のAO列
 >  反映させた列の1行目に「ファイル名」 → 在庫20230611.xlsのファイル名

   それは、元データ(在庫20230611.xls)の列名ですよね?

  「基になるExcel」のどこの列に貼り付けるんですか?(列名。1列/複数列?)

(半平太) 2023/06/13(火) 10:43:31


半平太さんすみません。
反映させたい列は、AM列から1列ごとに反映させたいです。
AL列まではデータが入っています。
(データ貼付) 2023/06/14(水) 12:06:17


 取り敢えず、これでやってみてください。

 Sub Macro1()
     Dim colOUT As Long, flName As String

     colOUT = Cells(1, Columns.Count).End(xlToLeft).Column
     colOUT = Application.Max(colOUT, 38)    'AM列以降に出力
     flName = Format(Date, "在庫yyyymmdd")   '本日の在庫表ファイルを見に行く

     With Range("A2", Cells(Rows.Count, "A").End(xlUp)).Offset(, colOUT)
         .FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,[" & flName & ".xls]適正発注データ確認用!C2:C41,40,0),"""")"
         .Value = .Value
     End With

     Cells(1, colOUT + 1).Value = flName
 End Sub

(半平太) 2023/06/14(水) 13:58:13


半平太さん、連絡遅くなりすみません。
実行したところ
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,[" & flName & ".xls]適正発注データ確認用!C2:C41,40,0),"""")"
この場所でアプリケーション定義またはオブジュクト定義のエラーになります

因みに、指定のフォルダは、「在庫データ」という名称のフォルダにしました。
ファイル名は右で問題ありません「例:在庫20230611」(900ファイル程)

反映させるExcel名は、「商品一覧.xlsm」です

「商品一覧.xlsm」には、A列に倉庫CD商品CDでキーにしてます
データを反映させていきたい場所がAM列以降になります。

「例:在庫20230611」の方ですが、キーが無い状態でA列C列がキーになり
41列目のAO列が反映させたいデータになります。

遅くなり申し訳御座いませんがよろしくお願い致します。
(データ貼付) 2023/06/20(火) 10:45:17


 >実行したところ
 >.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,[" & flName & ".xls]適正発注データ確認用!C2:C41,40,0),"""")"
 >この場所でアプリケーション定義またはオブジュクト定義のエラーになります
 ちょっと分かりません。
 colOUT と flName はどんな値になっていますか?

 >因みに、指定のフォルダは、「在庫データ」という名称のフォルダにしました。
 と言われましても、フォルダ名だけでは、PCのどこにあるか分からないです。
 商品一覧.xlsmがあるフォルダと同位か下位の階層にあると推測して回答したのですが、外れました。m(__)m

 >ファイル名は右で問題ありません「例:在庫20230611」(900ファイル程)
 いつも20230611じゃないハズなので、処理当日だろうと思ったのですが、これも外れました。m(__)m
 なぜ「在庫20230611」の固定でいいんですか?(他の日のモノは絶無なんですか?)

(半平太) 2023/06/20(火) 13:36:17


色々とすみません。

colOUT と flName はどんな値になっていますか? すみません、どんな値とは?
特に明記して頂いた状態から変更はしていません。

フォルダは、デスクトップの「在庫データ」になります。

ファイル名を当日に変更したところ、AM1セルにファイル名が入りました。

ファイル名は「例:在庫20230611」はあくまで例で
実際には「在庫_yyyymmdd」になります。このようなファイルがフォルダに900程入っています。

(データ貼付) 2023/06/20(火) 16:07:21


過去に他の方などに教えて頂いたものを半平太さんに教えて頂いた物にくっ付けました。
しかし、張り付けた先の1行目に何も入らない為、次を実行しても値が張り付きません。
1行目に値を貼り付けるにはどうしたら良いでしょうか?

Sub 過去在庫貼付()

        Dim desktop As String, ds As Worksheet, dr As Long, file As String, wb As Workbook, ws As Worksheet

        desktop = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & "在庫データ" & "\"

    Set ds = ThisWorkbook.Sheets("Sheet2")
        dr = 1
        file = Dir(desktop & "適正・発注(確認)データ_*.xls")
    Do While file <> ""

    Set wb = Workbooks.Open(desktop & file)
    Set ws = wb.Sheets("適正発注データ確認用")

        ws.Range("A:A").Copy ds.Range("B:B")
        ws.Range("C:C").Copy ds.Range("C:C")
        ws.Range("AO:AO").Copy ds.Range("D:D")

        dr = dr + lastRow
        wb.Close False

    With Worksheets("Sheet2")
               .Range("A2:A" & .Cells(.Rows.Count, "B").End(xlUp).Row).FormulaR1C1 = "=CONCATENATE(RC[1],RC[2])"
               .Range("A2:A" & .Range("B" & .Cells.Rows.Count).End(xlUp).Row).Copy
               .Range("A2:A" & .Range("B" & .Cells.Rows.Count).End(xlUp).Row).PasteSpecial Paste:=xlPasteValues
    End With

        半平太さん
        ds.Cells.ClearContents

        file = Dir
    Loop
End Sub

 Sub 半平太さん()
     Dim colOUT As Long
     colOUT = Cells(1, Columns.Count).End(xlToLeft).Column
     colOUT = Application.Max(colOUT, 6)    'AM列以降に出力
     With Range("A1", Cells(Rows.Count, "A").End(xlUp)).Offset(, colOUT)
         .FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,Sheet2!C1:C4,4,0),"""")"
         .Value = .Value
     End With
     Cells(1, colOUT + 1).Value = flName
     End Sub

(データ貼付) 2023/06/20(火) 17:04:33


 >過去に他の方などに教えて頂いたものを半平太さんに教えて頂いた物にくっ付けました。

 過去のコードについてはさっぱり分かりません。 
 今回の質問に関しては、以下に変更してください。

 Sub Macro1()
     Dim colOUT As Long, flName As String, deskPath

     colOUT = Cells(1, Columns.Count).End(xlToLeft).Column
     colOUT = Application.Max(colOUT, 38)    'AM列以降に出力
     flName = Format(Date, "在庫_yyyymmdd") & ".xls"   '本日の在庫表ファイルを見に行く

     deskPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\在庫データ\"

     With Range("A2", Cells(Rows.Count, "A").End(xlUp)).Offset(, colOUT)
         .FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,'" & deskPath & "[" & flName & "]適正発注データ確認用'!C2:C41,40,0),"""")"
         .Value = .Value
     End With

     Cells(1, colOUT + 1).Value = flName
 End Sub

(半平太) 2023/06/20(火) 17:40:36


ありがとうございます。
なぜだか、ものすごく重くなりました…
とりあえず10分待ったのですが、できなかったのでまた明日以降に試してみます。
(データ貼付) 2023/06/20(火) 17:50:25

話が進んでいるようですが何点か。

■1
>この場所でアプリケーション定義またはオブジュクト定義のエラーになります
>反映させるExcel名は、「商品一覧.xlsm」です

反映させる側はともかくとして【参照される側】のブック名とシート名(とセル範囲)は↓で間違いないのでしょうか?

  [在庫20230611.xls]適正発注データ確認用!C2:C41
               ~~~~

さらにそのブックは間違いなく開いているのでしょうか?

■2
なんとなくですが↓のようなアプローチで再考したほうがよいような気がします。

 (1)対象のブックを開く
 (2)対象のデータを【抽出】する
 (3)出力先に出力する

(もこな2) 2023/06/20(火) 18:27:33


 >とりあえず10分待ったのですが、できなかったのでまた明日以降に試してみます。

 いや、諦めてください。
 他のコードとの関係はまったく考慮しておりません。

 私はここまでとします。m(__)m

(半平太) 2023/06/20(火) 19:25:34


半平太さんありがとうございました。

在庫の方に、別にキーを作成したらできました。
ただ、マクロを実行して途中で在庫の方にキーを投入して再度マクロを再開する感じになるので
これでは、手間が生じてしまうので…

colOUT = Application.Max(colOUT, 40) 'AM列以降に出力
個々の部分のみ頂きます!
ありがとうございました。
(データ貼付) 2023/06/21(水) 09:36:15


もこな2さん、アドバイスありがとうございました。
データを張付けた際に、在庫yyyymmddのyyyymmddの部分のファイル名を1行目にもって来る方法はありますでしょうか?
(データ貼付) 2023/06/21(水) 09:38:08

>データを張付けた際に、在庫yyyymmddのyyyymmddの部分のファイル名を1行目にもって来る方法はありますでしょうか?
質問の意味がわかりませんが[[20230620143850]]でブック名をA列に書き出す例を示したので読んでみてはどうでしょうか?

"在庫"という文字が邪魔なのだという話ならば、置換して削ったり「Format(Date, "yyyymmdd")」のように取得すればよい話であるように思います。

(もこな2) 2023/06/21(水) 13:23:48


もこな2さん
https://www.excel.studio-kazu.jp/kw/20230113144923.html
上記ので1列目にタイトル行を付けている式を紹介していますが
この様な感じで、1列目にではなく、データを張付けた際に張付けたセルの1行目にタイトル行を貼り付ける事はできないでしょうか?
(データ貼付) 2023/06/21(水) 14:39:51

えっと、ボールが返ってきませんが追加で。

■3

 >上記ので1列目にタイトル行を付けている式を紹介していますが
 >この様な感じで、1列目にではなく、データを張付けた際に張付けたセルの1行目にタイトル行を貼り付ける事はできないでしょうか?

追加の質問も理解できません。
いろんな疑問があるのかもしれませんが、1つずつ解決していくほうがお互い混乱しなくてよいと思います。

踏まえて、以下を提示してください。

 「在庫20230611.xls」の【対象シート】(名前or何番目のシートなのか)
             〃                     の行・列を踏まえたレイアウト
 「商品一覧.xlsm」の【対象シート】(名前or何番目のシートなのか)
             〃                     の行・列を踏まえたレイアウト

なお、既に提示のあった情報は↓のように整理してください

 「キー番号」              → レイアウトの中で具体例を提示
 「ファイル名:アイテム一覧」      → レイアウトの中で具体例を提示
  反映させた列                     → 在庫20230611.xlsの40列目のAO列  ★列の列というのが理解できません
                                                                  ~~~~    ~~
  反映させた列の1行目に「ファイル名」 → 在庫20230611.xlsのファイル名   ★ファイル名は「在庫20230611.xls」でしょう

 <提示例>
【商品一覧.xlsm】の【Data】シート
    _____________________A_____________________   ___B__   _____C____   ___D__ ....  __AO__
  1 基になるExcelファイル、倉庫CD+列商品CD   商品名   ケース入数   袋入数
  2
  3
  4
  5
  6
  7
  8
  9
 10

【在庫20230611.xls】の【適正発注データ確認用】シート(処理前)

    __A___   __B__   ___C__ ....  __AM__
  1 倉庫CD           商品CD       データ
  2
  3
  4
  5
  6
  7

【在庫20230611.xls】の【適正発注データ確認用】シート(処理後)

    __A___   __B__   ___C__ ....  __AM__
  1 倉庫CD           商品CD       データ
  2
  3
  4
  5
  6
  7

(もこな2) 2023/06/21(水) 18:00:47


コメント返信:

[ 一覧(最新更新順) ]


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