全然分からず、大変困っています。宜しくお願い致します。
【質問】
あるフォルダーに複数のhtmlファイルがあります。その各ファイルの中に商品番号と卸価格の情報が含まれています。商品は、各ファイルごとに数10件程度ありますが、数は決まっていません。
このファイル群に含まれる全ての卸価格を、エクセルに抽出するマクロを教えていただけないでしょうか。
全商品番号は、「卸価格情報」というシートのA列に2行目(A2)から既に入力されています。その情報を元に、該当する卸価格を抽出し、B列の該当行にそれぞれ入力するマクロが希望です。
(もし不要であれば、A列に既に入っている商品番号をご利用頂かなくても問題ございません。結果としてA列に商品番号、B列に卸価格が得られれば、方法は問いません。)
【ソース】※全文は、文字数オーバーとなる為、該当部分の一部を抜き出しました。また、ソースは「株式会社名」を「あいうえお株式会社」、「リンクアドレス」を「aaaa.jp」、「商品名」をそれぞれ「商品A」「商品B」に変更した以外はオリジナルのままです。また、一例ですが、<a href="/shop/357136/4971710383515">商品A</a></h3>の「4971710383515」部分が商品番号です。
また、その商品の「卸価格」は、そこから下方向に一番近い<strong class="fontstyle1">卸価格203円/点(税抜)</strong>に記載されており、そこから「203」というように数値部分のみを抽出したいです。
<table id="listingTableA" summary="テーブルA">
<tr class="item firstRow">
<td class="classFirstCol">
<div class="iteminner">
<div class="itemImage">
<a href="/shop/357136/4971710383515"><img src="http://img04.aaaa.jp/ex37/20150331/6/sml_6418346 … width="140" height="140" alt="商品A" border="0" class="imageborder"></a>
</div><!-- /itemImage -->
<div class="itemBanner">
<img src="/image/icon/beginner2.gif" alt="ビギナー購入可" class="mr">
<img src="/image/stamp/stamp07.gif" alt="スタンプ【販売後注文可】">
<img src="/image/icon/ninki2_3.gif" alt="人気★★★">
<img src="/image/icon/chumoku2_3.gif" alt="注目★★★">
<img src="/image/icon/repeat2_3.gif" alt="リピート★★★">
</div><!-- /itemBanner -->
<div class="contEnd"><hr></div>
<h3 class="itemListContents" data-soldOutFlug="N" data-exId="6418346"><!--(商品)-->
<a href="/shop/357136/4971710383515">商品A</a></h3>
<div class="itemInfo">
<!---->
<!---->
<!---->
<!---->
<!---->
<div>
<script type="text/javascript">
//<![CDATA[
if (isHasNickName) {
document.write('オープンプライス');
}
//]]>
</script>
</div>
<div class="itemPrice">
<!---->
<!---->
<!---->
<strong class="fontstyle1">卸価格203円/点(税抜)</strong>
<!---->
<!---->
</div><!--/.itemPrice-->
<script type="text/javascript">
//<![CDATA[
if (isHasNickName) {
document.write('<div class="iconBox"><div class="payIcons"><img src="/image/icon/pay_atobarai.gif" alt="後払い可" class="mr"><img src="/image/icon/pay_creditcard.gif" alt="クレジットカード可" class="mr"></div><\/div><!-- /.iconBox -->');
}
if (isHasNickName) {
document.write('<h4>あいうえお 株式会社 </h4>');
}
if (isHasNickName) {
document.write('<div class="supLink"><a href="/corpinfo/357136">⇒会社情報</a><a href="/shop/357136">⇒商品一覧</a><a href="/shop/357136/B">⇒ブランド一覧</a></div><div class="brandName"><img src="/image/icon/brand.gif" alt="ブランド"> <a href="/shop/357136/B/P">あいうえお 株式会社</a></div>');
}
//]]>
</script>
<div class="bookmarkBtnWrap">
<a href="javascript:void(0);" data-products=";357136_30301_4971710383515" data-option="6418346" data-count="1" class="itemBookmarkBtn" id="bkmkBtn1">ブックマーク<span>に追加</span></a>
<div id="bkmkPopup_1" class="bkmkPopupC"></div>
</div>
</div><!-- /itemInfo -->
</div><!-- /iteminner -->
</td>
<td class="col">
<div class="iteminner">
<div class="itemImage">
<div class="soldout"><a href="/shop/357136/4902424437867">完売御礼</a></div>
<a href="/shop/357136/4902424437867"><img src="http://img04.aaaa.jp/ex36/20150410/6/sml_6819716 … width="140" height="140" alt="商品B" border="0" class="imageborder"></a>
</div><!-- /itemImage -->
<div class="itemBanner">
<img src="/image/icon/beginner2.gif" alt="ビギナー購入可" class="mr">
<img src="/image/icon/ninki2_2.gif" alt="人気★★">
</div><!-- /itemBanner -->
<div class="contEnd"><hr></div>
<h3 class="itemListContents" data-soldOutFlug="Y" data-exId="6819716"><!--(商品)-->
<a href="/shop/357136/4902424437867">商品B</a></h3>
<div class="itemInfo">
<!---->
<!---->
<!---->
<!---->
<!---->
<div>
<script type="text/javascript">
//<![CDATA[
if (isHasNickName) {
document.write('オープンプライス');
}
//]]>
</script>
</div>
<div class="itemPrice">
<!---->
<!---->
<!---->
<strong class="fontstyle1">卸価格1,021円/点(税抜)</strong>
<!---->
<!---->
</div><!--/.itemPrice-->
No.3
- 回答日時:
次の二つのページを参考にして、勉強のために作ってみました。
「エクセルからテキストを開き、コピー&ペーストするマクロ(VBA)を... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa/question …
「【VBA】テキストファイルの一部をエクセルに抽出するマクロ - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa/question …
次の通りです。
・各商品が<!--(商品)-->と<!--/.itemPrice-->で囲まれていることが前提。
・商品名のリンクが「/shop/357136/」など商品番号の前に"/"が3個あることが前提。
・卸価格が「卸価格」と「</strong>」で囲まれていることが前提です。
既にリストアップされた商品番号を利用せず、抽出した各商品のブロックから、「商品番号」と「卸価格」を抽出しました。
私はプログラミングの素人ですから、プロが改造すれば、もっときれいなプログラムになるかもしれません。
Sub sample()
Dim folder As String
Dim r As Long
Dim n As Long
Dim m As Long
Dim item As Variant
Dim price As Variant
Dim file As Variant
Dim str As Variant
Dim str0 As String
lastRow = Range("A" & Rows.Count).End(xlUp).Row 'A列最終行
item = Range("A1:A10000")
price = Range("B1:B10000")
file = Range("ZZ1:ZZ1000")
folder = ThisWorkbook.Path '全てがあるフォルダ
r = 0
For n = 1 To 1000
file(n, 1) = n & ".html" 'ファイル名は、通し番号+".html"
If Dir(folder & "\" & file(n, 1)) <> "" Then 'ファイルがあったら
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile (folder & "\" & file(n, 1))
str0 = .ReadText
.Close
str = Split(str0, "<!--(商品)-->")
For m = 1 To UBound(str)
str(m) = Split(str(m), "<!--/.itemPrice-->")(0)
item(r + m, 1) = Split(Split(str(m), "/")(3), """")(0)
price(r + m, 1) = Split(Split(str(m), "卸価格")(1), "</strong>")(0)
Range("A" & r + m).Value = item(r + m, 1)
Range("B" & r + m).Value = price(r + m, 1)
Next
r = r + UBound(str)
End With
End If
Next
End Sub
No.2
- 回答日時:
回答は消さないのですよね。
的外れな回答だから恥ずかしくて消したくなりましたが…。
さっきの回答の二番目の「問いにあるソースの上に、次のソースを記述し」は「問いにあるソースの下に、次のソースを記述し」です。
ファイルが大量にあったら、この方法は面倒ですね。
どなたかが、VBAか何かを使った方法を教えてくれると思うので、
私の回答は、簡単にできそうだと期待する材料程度にしてください。
どうもありがとうございます。こういう方法もあるのですね。勉強になります。
ご指摘のとおり、ファイル数は大量(数千程度)にございますので、全てのファイルを一括で処理出来る方法の方がありがたい為、大変恐縮ではございますが、引き続き、回答を募集させてください。
No.1
- 回答日時:
エクセルのマクロは分かりませんが、
最初からエクセルを使うのではなく、
テキストから抽出するプログラムを使って抽出してから、エクセルに移しても良いのかもしれません。
ちなみに、HTMLソースから抜き出すというと、私の場合はJavascriptを使うことを連想しちゃうので、試してみました。
問いにあるソースの上に、次のソースを記述し、
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
function change(){
var str = "";
var str0 = "";
var item = document.getElementsByTagName("h3");
var Price = document.getElementsByTagName("strong");
for (var i = 0; i < item.length; i++){
str0=item[i].innerHTML.split('/')[3]+","+Price[i].innerHTML;
str0=str0.replace('">', ',');
str0=str0.replace('<,卸価格', ',');
str=str+"<br />"+str0
}
document.write(str);
}
</script>
<title>J抽出</title>
</head>
<body>
問いにあるソースの上に、次のソースを記述し、
<form>
<input type="button" value="抽出" onClick="change()">
</form>
</body>
</html>
ブラウザで表示した後に「抽出」ボタンを押したら、次のような出力になりました。
4971710383515,商品A,203円/点(税抜)
4902424437867,商品B,1,021円/点(税抜)
これをテキストに保存できるようにして、,区切りのCSVファイルとして読み込めば、
その後の処理が楽かもしれません。
ただ、これが使えるのは、HTMLソースのフォーマットが統一されている時だけです。
ソースによって微妙に異なるのなら、違った出力になるかもしれません。
マクロも記述いただきまして、ありがとうございます。
私が知識が無い為に、マクロでお願いしておりましたが、どうも、いしい様に最初にご提案いただきましたjavaによる方法が今回の質問に合っているように思います。
そこで、「冒頭の2行目の欠落部分」(www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …)と、以下の書式で抽出する場合は、どう記述すれば良いかを教えていただけないでしょうか。
お手数をお掛け致しますが、宜しくお願い致します。
4971710383515 商品A 203
※上記は半角スペースで記述しましたが、欲しいのは、タブ区切りです
この辺の記述を多分変更するのだろうな、と思うのですが、さっぱりわかりません。どんな本を読めばこの辺がわかるようになりますか。
str0=item[i].innerHTML.split('/')[3]+","+Price[i].innerHTML;
str0=str0.replace('">', ',');
str0=str0.replace('<,卸価格', ',');
str=str+"<br />"+str0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルの数を求めたい
-
ある表にフィルターをかけて出...
-
Lookup関数
-
Excelを無料で使うには? パソ...
-
IFとIFS関数
-
エクセルの数式バーのフォント...
-
EXCELの散布図で日付が1900年に...
-
Excelの表示についての質問
-
再質問です。マクロの修正箇所...
-
データチェックを行うエクセル...
-
Excelピボットテーブルの1行目
-
エクセル日付 文字列の関数がエ...
-
西暦や和暦の表示をyyyymmdd表...
-
エクセルで「ページレイアウト...
-
【ExcelVBA】名前を付けて保存→...
-
Excelに詳しい方! B列が「日...
-
Excelで50個のセルに同じ文字を...
-
Excelについて
-
Excel関数について教えてくださ...
-
Excelで表を作ったところに文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XPath指定方法について(phpで)
-
エクセル マクロ 複数のhtml...
-
DreamweaverCS4で、テキスト...
-
ヤフオク エクセル VBA 通常...
-
HP作成のレイアウトで、ルーズ...
-
中央にそろえる。Dreamweaver8
-
VBAでGoogle検索の上位にあるUR...
-
(再質問)エクセルのマクロボ...
-
collection型を引数にしたファ...
-
プログラミング
-
新しいパソコンのネット設定な...
-
汎用機のJCLの入門書ありま...
-
iText セル内での自動改行について
-
mとnを入力 mからnまでを加算し...
-
アコーディオンメニューにする...
-
コンソール画面のクリアの方法
-
if else文のフローチャート
-
PCとモバイルで同一URLのWebサ...
-
【jQuery】MixltUPの複数フィル...
-
Progateの入力画面で使えるショ...
おすすめ情報