[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『逆参照にて抽出可能?』(事務)
book1(sheet1)
A B C D 1 001 2 ●●工事 001-2-●●工事(=A1&"-"&B1&"-"&C1)
book1(sheet2)
A
1(住所)〇〇市〇〇町〇丁目
2(TEL) ***-***-****
3(受注先)凸凹コーポレーション
4(受注額)30,000
5(仕入先)瀬戸際工業
6(仕入額)15,000
7(利益) 15,000
マクロを組んで「sheet1のD1」のタイトル名にて名前を付けて保存を実行(ここまでは出来ました)
001-2-●●工事.xlsm
↑↑
book1のマクロ作業にてこのような工事別のファイルが何十個もあるとします。
【例】
001-2-●●工事.xlsm
002-5-▽▽工事.xlsm
003-3-★★工事.xlsm
004-1-□□工事.xlsm
005-2-▲▲工事.xlsm
・
・
・
book2
データ抽出ファイル
A B C D E
1 001-2-●●工事 〇〇市〇〇町〇丁目 ***-***-**** 凸凹コーポレーション
F G H I
1 30,000 瀬戸際工業 15,000 15,000
といったように1行ごとに1物件の情報を抽出(参照?)したいのです。
出来上がっていくファイルを後から見に行ってデータ化なんて可能でしょうか?
< 使用 Excel:Excel2013、使用 OS:Windows10 >
マクロを実行するブックを含む全てのブックが同一フォルダに保存されている。
ということで
Sub test() Dim myDir As String, fn As String, F As String, n As Long myDir = ThisWorkbook.Path & "\" fn = Dir(myDir & "*.xls") Do While fn <> "" If fn <> ThisWorkbook.Name Then n = n + 1 F = "'" & myDir & "[" & fn & "]" Cells(n, 1).Formula = "=" & F & "sheet1'!d1" Cells(n, 2).Resize(, 7).FormulaArray = "=transpose(" & F & "sheet2'!a1:a7)" End If fn = Dir Loop With Cells(1).CurrentRegion .Value = .Value End With End Sub
(seiya) 2019/06/19(水) 16:58
実行するとA1〜H1まで上手く反映されました。
ただA2〜H2まで全て「0」と表示されるのは何故なんでしょうか?
(事務まま) 2019/06/20(木) 10:18
参照先が空白の場合は0になります。 こちらに変更してください。
Sub testx() Dim myDir As String, fn As String, F As String, n As Long myDir = ThisWorkbook.Path & "\" fn = Dir(myDir & "*.xls") Do While fn <> "" If fn <> ThisWorkbook.Name Then n = n + 1 F = "'" & myDir & "[" & fn & "]" Cells(n, 1).Formula = "=if(" & F & "sheet1'!d1="""",""""," & F & "sheet1'!d1)" Cells(n, 2).Resize(, 7).FormulaArray = "=transpose(if(" & F & "sheet2'!a1:a7="""",""""," & F & "sheet2'!a1:a7))" End If fn = Dir Loop With Intersect(Cells(1).CurrentRegion.EntireColumn, ActiveSheet.UsedRange) .Value = .Value End With End Sub (seiya) 2019/06/20(木) 11:36
もっと情報量が多いデータをやってみました。
途中まで上手くいくのですが「値の更新」とファイルオープンが出て来ます。
全てキャンセルして終わらせてみると、無事データの抽出は終わっています。
そして一番下の段に参照の数だけ「#REF!」と表示されています。
下記の式を使っているのですが何か問題ありそうでしょうか?
Sub testx()
Dim myDir As String, fn As String, F As String, n As Long myDir = ThisWorkbook.Path & "\" fn = Dir(myDir & "*.xlsm") Do While fn <> "" If fn <> ThisWorkbook.Name Then n = n + 1 F = "'" & myDir & "[" & fn & "]" Cells(n, 1).Formula = "=if(" & F & "date'!eb6="""",""""," & F & "date'!eb6)" Cells(n, 2).Resize(, 267).FormulaArray = "=transpose(if(" & F & "date'!eg1:eg267="""",""""," & F & "date'!eg1:eg267))" End If fn = Dir Loop With Intersect(Cells(1).CurrentRegion.EntireColumn, ActiveSheet.UsedRange) .Value = .Value End With End Sub
(事務まま) 2019/06/20(木) 16:21
>「値の更新」とファイルオープンが出て来ます。 「シートの選択」ではないのですか? シート選択ならシート名が違っています。 (seiya) 2019/06/20(木) 16:46
dateなら「シート選択」のダイアログボックスは表示されることは無いはずです。
実際のシート名に余計なスペース等がありませんか? (seiya) 2019/06/20(木) 17:10
これで試してください。 セルに数式が残りますので、数式バーでシート名を確認してください。
Transposeで配列数式になっていますので、矢印キーでセルを選択すれば数式に影響ありません。
Sub testx() Dim myDir As String, fn As String, F As String, n As Long myDir = ThisWorkbook.Path & "\" fn = Dir(myDir & "*.xlsm") Do While fn <> "" If fn <> ThisWorkbook.Name Then n = n + 1 F = "'" & myDir & "[" & fn & "]" Cells(n, 1).Formula = "=if(" & F & "date'!eb6="""",""""," & F & "date'!eb6)" Cells(n, 2).Resize(, 267).FormulaArray = "=transpose(if(" & F & "date'!eg1:eg267="""",""""," & F & "date'!eg1:eg267))" End If fn = Dir Loop End Sub (seiya) 2019/06/20(木) 17:23
抽出される側に問題があるのかしら。。。?
また明日頑張ります。
お付き合いいただき本当に感謝致します<(_ _)>
(事務まま) 2019/06/20(木) 17:40
下記コードはファイルを開いて各シートの名前を確認します。
Dateシートが無ければ最後にメッセージを表示します。
Sub testxx() Dim myDir As String, fn As String, n As Long, ws As Worksheet, flg As Boolean, msg As String myDir = ThisWorkbook.Path & "\" fn = Dir(myDir & "*.xls") Do While fn <> "" If fn <> ThisWorkbook.Name Then n = n + 1: flg = False With GetObject(myDir & fn) For Each ws In .Worksheets If UCase$(Trim$(ws.Name)) = "DATE" Then ws.Range("eg6").Copy ThisWorkbook.Sheets(1).Cells(n, 1) ws.Range("eg1:eg267").Copy ThisWorkbook.Sheets(1).Cells(n, 2).PasteSpecial Transpose:=True flg = True: Exit For End If Next Application.CutCopyMode = False If Not flg Then msg = msg & vbLf & fn flg = False .Close False End With End If fn = Dir Loop If Len(msg) Then MsgBox "下記のファイルに ""Date"" シートが見当たりません" & msg, vbCritical End Sub
(seiya) 2019/06/20(木) 18:03
早速やってみました!
「シートが見当たりません」のエラーメッセージは一切出ませんでした!
また無事に抽出できました!
ただ最後にエラーメッセージが出ます。
実行時エラー'432'
オートメーションの操作中にファイル名またはクラス名をみつけられませんでした。
デバックをクリックすると黄色マーカーのコードは以下の通りでした
With GetObject(myDir & fn)
(事務まま) 2019/06/21(金) 11:25
デバッグモードになった時点での fn はどのようになっていますか? カーソルを fn の上に移動(クリックではない)するとポップアップが表示されます。 (seiya) 2019/06/21(金) 11:31
fn="〜$◎masterdate.xlms
(現在開いているファイル名「◎masterdate.xlms」
(事務まま) 2019/06/21(金) 13:41
Dir関数でそれが出てきますか...
> If fn <> ThisWorkbook.Name Then を If (fn <> ThisWorkbook.Name) * (Not fn Like "~$*") Then
に変更してみてください。 (seiya) 2019/06/21(金) 14:05
seiyaさん何者ですか!? 笑
プログラマーですか?
本当にすごいです!ありがとうございました!
(事務まま) 2019/06/21(金) 14:22
原因がわかってホッとしました。
最初に提示したコードを同じく変更すればそちらも機能するはずです。 どちらでも、好きな方を使用してください。 (seiya) 2019/06/21(金) 14:27
ごめんなさい、ちょっと質問です。
金額の項目があるのですが(抽出後のデータ)5個の抽出が成功しました。
IR
1 9540000
2 480000
3 1.1E+07
4 1490000
5 1000000
何故、IRの3だけこの様な表記になってしまうのでしょうか。
セルの中味は10909091とキチンとした数字です。
(事務まま) 2019/06/21(金) 16:09
セルの幅を広げるか、セルの書式を0に変更するかしてください。 最初のコードはブックを開かないので速いはずです。 (seiya) 2019/06/21(金) 16:15
また分からないことがあったら教えて下さい。
この度は本当に本当にありがとうございました!
(事務まま) 2019/06/21(金) 16:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.