[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数ファイルのデータの貼り付けについて』(データ貼付)
基になるExcelがありA列にキー番号があり(ファイル名:アイテム一覧)
次に同じ名前+日付のファイルが指定のフォルダに入っています(900程)
「例:在庫20230611」
その表にはキーが無いので、B列にA列+C列をCONCATENATEしたキーを作り
40列目のAO列を基になるExcelに貼付て行く
関数だとこんな感じです=VLOOKUP(A2,'[在庫20230611.xls]適正発注データ確認用'!$B:$AO,40,0)
また、反映させた列がいつの分か分かる用に反映させた列の1行目にファイル名を反映
こんな魔法みたいな事は可能でしょうか?
また、コードを教えて頂けると幸いです。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
関係する項目の具体例を書いて貰えませんか? (異同関係が分かりにくいです)
「キー番号」 → ? 「ファイル名:アイテム一覧」 → ? 「同じ名前+日付のファイル」 → 在庫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
取り敢えず、これでやってみてください。
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
因みに、指定のフォルダは、「在庫データ」という名称のフォルダにしました。
ファイル名は右で問題ありません「例:在庫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
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
■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
"在庫"という文字が邪魔なのだという話ならば、置換して削ったり「Format(Date, "yyyymmdd")」のように取得すればよい話であるように思います。
(もこな2) 2023/06/21(水) 13:23:48
■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.