一つのフォルダの中に
同じフォームのエクセルファイルが多数あり、
全エクセルファイル内のセルから値を抽出し、
別の新規エクセルファイルに次々と収集する方法はないでしょうか?
コピペだと大変な作業なのでマクロで出来ないかと考えてます。
抽出元ファイルで
申し込み番号とIDの位置はA2,G1と決まっているのですが
合計税込金額はB列ですが表示行は変動します。
またその金額はSUM関数で表示されています。
それらを抽出したの新規エクセルファイルには
マクロを実行した日付を自動で挿入されるようにしたいのですが
可能でしょうか?
完成イメージとして画像を添付しました。
どうかご教授頂けないでしょうか?
No.2ベストアンサー
- 回答日時:
(1)「抽出先のブック」を選択して「Alt+F11」で「Microsoft Visual Basic」を開く
(2)「挿入→標準モジュール」でモジュールを新規作成
(3)以下の「VBAコード」を貼付
(4)右上の「×」で(1)を終了
(5)エクセルメニューの「表示→マクロ」から「取得」を選んで実行
(6)対象のフォルダを選択するダイアログが表示されるのでフォルダを指定
※税込価格の行を取得するために検索するキーワードについて
画像ですと「合計 税込価格」のスペースが全角・半角判断しにくいため現在半角で作成しています。
もし間違っているようであればコード内の以下の部分を適切に修正願います。
word = "合計 税込価格" '検索するキーワード
■VBAコード
Option Explicit
Sub 取得()
'型宣言
Dim buf As String
Dim cnt As Long
Dim dpath As String
Dim tbook As Workbook
Dim lbook As Object
Dim hit As Object
Dim word As String
'準備
Set lbook = ThisWorkbook.ActiveSheet
cnt = 2 '開始行の設定
word = "合計 税込価格" '検索するキーワード
'抽出先のリストを削除
lbook.Range(cnt & ":" & Rows.Count).ClearContents
'フォルダ選択ダイアログ
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
dpath = .SelectedItems(1) & "\"
End If
End With
If dpath = "" Then Exit Sub
'ファイル一覧の取得
buf = Dir(dpath & "*.*")
'ファイルの数だけループ
Do While buf <> ""
Set tbook = Workbooks.Open(Filename:=dpath & buf, ReadOnly:=True) 'ブックを開く
With tbook.ActiveSheet
lbook.Range("A" & cnt).Value = .Range("A2").Value '申し込み番号取得
lbook.Range("B" & cnt).Value = .Range("G1").Value 'ID取得
Set hit = .Cells.Find(word) 'キーワードを検索
If hit Is Nothing Then
lbook.Range("C" & cnt).Value = "不明" 'キーワードが見つからなかった場合「不明」を表示
Else
lbook.Range("C" & cnt).Value = .Range("B" & hit.Row).Value '合計価格の取得
End If
lbook.Range("D" & cnt).Value = Date '日付を取得
End With
tbook.Close 'ブックを閉じる
buf = Dir()
cnt = cnt + 1 'カウントアップ
Loop
End Sub
ありがとうございます。
お教え頂いたとおり実行すれば思った通りの抽出が出来ました。
感謝致します。
このままで終わらせず
eden3616様に記載頂いたVBAコードがどのようにして機能しているのか
解読しながら自分でもVBAを勉強してみます。
No.1
- 回答日時:
>>コピペだと大変な作業なのでマクロで出来ないかと考えてます。
エクセルのマクロは、VBA(Visual Basic for Applications)を使っています。マクロって、自分の行った作業を再現するだけの機能のように思えますけど、れっきとしたプログラム言語であるVisual Basicの命令を生成しているんです。
だから、生成されたVBAのプログラムを自分で追加・加工すれば、相当複雑なことであっても、可能になります。
以下にストーリ仕掛けでVBAを学んでいくサイトがありますので、これを見て勉強すれば、いいかもしれません。
もちろんエクセルVBAの書籍を買ったりするのもいいと思います。
http://vbae.odyssey-com.co.jp/column/index.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
ExcelブックをGoogleスプレッド...
-
Excel csv保存 列数が異なる場...
-
PowerPoint 2002でファイル名を...
-
複数のexcelのファイルを一括で...
-
実行時エラー52
-
サブフォルダから部分一致のエ...
-
vbaでボタンをクリックして上書...
-
エクセル UserForm 呼び出しで...
-
パワーポイントの自動開始方法
-
Wordで差込印刷した後に別々の...
-
WORDファイルをPDFにマクロで
-
問題が発生したため、Microsoft...
-
エクセルvbaでdocuworksprinter...
-
エクセルで複数のコメントのサ...
-
【VBA】ExcelマクロでCSVファイ...
-
[エクセル]コピーするとオブジ...
-
エクセルVBAで一つ上の階層...
-
Windows10でコマンドプロンプト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
ExcelブックをGoogleスプレッド...
-
Wordで差込印刷した後に別々の...
-
エクセル UserForm 呼び出しで...
-
エクセルファイル名に更新日時...
-
サブフォルダから部分一致のエ...
-
Excel csv保存 列数が異なる場...
-
マクロ実行後、表示がおかしくなる
-
EXCEL 検索時の設定
-
PowerPoint 2002でファイル名を...
-
Xlms とはなんでしょうか?
-
Word2010で閉じるボタン押下後...
-
vbaでボタンをクリックして上書...
-
エクセルのマクロで行と列の削...
-
エクセルでcsvファイルを開いて...
-
For~Nextルーチンで最初の1回...
-
VBAでマクロを使って、マクロ無...
-
大量のCSVファイルをExcel形式...
-
処理速度にムラがあり過ぎる
おすすめ情報