はじめての親子ハイキングに挑戦!! >>

お世話になります。マクロは全然分からないのですが、どうやらマクロで可能なようですので、質問させてください。
宜しくお願い致します。

【質問】複数のhtmlファイルが保存してあります。その各htmlファイルから、適切な部分を抜き出してエクセルに貼り付けたいのですが、どうすれば良いでしょうか。

例)dbr02.html、4107989208.html、45_3d.html という3つのファイルがあったとします。(実際は数千ファイルあります)
それぞれのファイルから、商品番号、商品名、キャッチコピー、商品説明文、商品画像を抜き出して、エクセルに貼り付けるには、マクロでどのように記述すれば良いでしょうか。
-------------------------------------------------------------------------------------------------
※各セルに挿入したいデータは下記の通りです。

【A1~E1】1行目は取り込みデータではなく、文字列です。
セルA1:商品番号、B1:商品名、C1:キャッチコピー、D1:商品説明文、E1:商品画像
【A2~E2】
dbr02.htmlから抜き出した「商品番号」「商品名」「キャッチコピー」「商品説明文」「商品画像」をそれぞれ、A2、B2、C2、D2、E2へ取り込む
【A3~E3】
4107989208.htmlから抜き出した「商品番号」「商品名」「キャッチコピー」「商品説明文」「商品画像」をそれぞれ、A3、B3、C3、D3、E3へ取り込む
【A4~E4】
45_3d.html から抜き出した「商品番号」「商品名」「キャッチコピー」「商品説明文」「商品画像」をそれぞれ、A4、B4、C4、D4、E4へ取り込む

以下、同様に、保存してある全てのファイルを取り込む。取り込む順番はランダムで大丈夫です。
-------------------------------------------------------------------------------------------------
【その他仕様】
htmlファイル保管場所:C:\Users\moto\Desktop\data
商品番号:半角英数字、アンダーバー、半角ハイフンが使用されている場合があります。
ソースについて:それぞれ、下記のくくりで、記載されています。(*が抽出したい部分です。また、該当する箇所は各ファイルに1ヵ所しかありません。)

<th>商品管理番号</th><td>******</td></tr><tr><th>ブランド名</th>
<!--商品名-->******<!--/商品名-->
<!--キャッチコピー-->******<!--/キャッチコピー-->
<!--商品コメント-->******<!--/商品コメント-->
<!-- 商品詳細画像 --><div style=" height:1px; width:1px; overflow:hidden;"><img src="******" alt="" class="imageborder" name="photoName1" id="photoName1" onClick="overSizeLink('photoName1')"><br></div><!-- /商品詳細画像 -->

質問者からの補足コメント

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1の回答者です。



この先のお話は、Excelカテゴリに移します。
Excelカテゴリには、最近、同じような回答を私自身がしてきた経緯があります。
ただし、こちらで出ていた質問内容は、そのまま活かさせていただきます。
よろしくお願いします。
    • good
    • 0
この回答へのお礼

ご対応いただきまして、ありがとうございます。
宜しくお願い致します。

お礼日時:2015/04/04 19:00

こんにちは。



直接の回答ではないことを、予めお詫びいたします。

Excelカテゴリにも、同様の質問を載せましたでしょうか?
一応、こちらの方が前ですから、こちらに返事を付けておきます。HTMLの中身のコードの一部を出して、それだけで必要項目を取り出せという質問は、かなり無理がありますね。HTMLファイルの中身は、テキストファイルだから、テキストで取れるというのは確かですが、マクロでは、必ずしも、テキストのソースコードを探るとは限りません。ファイルの構造を調べて、なるべくピンポイントで検索するのが一般的で、ソースコードの全文検索なんていうのは、最悪の手段だということです。

どんなファイル構造になっているのか、それで組み立てていきますから、質問項目だけで、1,000以上のファイルから取り出せるとは思えません。仮に、一部を出すにしても、「<th>商品管理番号」の前に class があるはずです。

そのダミーのHTMLファイルをどこかに出していただけるか、どこそこのサイトのHTMLファイルだというぐらいに示してくださらないと、回答者側としては、とても返事は付けられないように思います。
    • good
    • 1
この回答へのお礼

ご回答頂きまして、ありがとうございます。
2か所に似たような質問をしまして、申し訳ございません。質問のカテゴリーを間違えたかと思い、修正しようとしたのですが、分かりませんでした。また、質問内容にそもそも無理があり、ご回答頂けないのかもしれないと思い、もう少し出来そうな内容で改めて質問させていただいた次第です。

この質問ですが、知識がほとんどない中で、こうすれば出来そうだと思い、質問させていただきましたが、最悪の手段なのですね。HTMLファイルを載せたかったのですが、載せたらだめなのかも?と思い、載せれませんでした。質問が削除対象にならないか、不安でしたので。良く考えましたら、右クリックでダウンロード可能な公開されているデータですから、問題ないですね。補足に載せてみます。

お礼日時:2015/04/04 12:40

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。
正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。
タグごと抽出する方法でも構わないので教えてください。

例えば
<a href="www.yahoo.com△">○○○</a>   ・・・<1>
※△は(www.yahoo.com)+(半角数字1文字)
※○○○は1文字以上の全角文字

このようなパターンの文字列(<1>を丸ごと)を抜き出すには
どのような正規表現を書けばよいでしょうか?
単に<a href ではじまって </a>  で終わる文字列であれば
<a href.*</a>
で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので
ぜひ実現させたいと思っています。宜しくお願いします。

Aベストアンサー

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Length - 1
    Cells(i + 1, 1) = .Links(i).outerHTML
    Cells(i + 1, 2) = .Links(i).outerText
   Next
  End With
 End With
 objIE.Quit
 Set objIE = Nothing
End Sub

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Lengt...続きを読む

QHTMLのソースをエクセルに貼り付ける方法

HTMLのソースを、そのまま(メモ帳表示データのまま)Excelに貼り付ける方法はありますか。

メモ帳でソースの表示をして、全て選択→コピー→Excelに型式を選択して貼り付け→テキスト
で貼り付けてみましたが、変なフォーマットで表示されます。
セルの書式を文字列にしても同じです。

目的はExcelの文字列操作で特定の文字だけ拾い出して加工しようと考えています。
OS:Win95、Excel2000です。

Aベストアンサー

再び登場です。
ソースを表示させたメモ帳をとりあえず一度名前を付けて保存して下さい。
そしてExcelのデータメニューから外部データの取り込み、テキストファイルのインポートをクリック。
後は必要に応じて取り込み方を選びます。
これでどうでしょうか?

Q前の質問のソースです

補足説明に記載したかったのですが、文字数制限の為、こちらに記載致しました。全文ではございませんが、やり方が判れば、こちらで多少加工は出来そうですので、これがソースの全文と仮定してご回答頂ければ幸いです。

"

<h2 class=""dlpo-1-1"">商品紹介</h2><!-- ←DLPO -->
<div id=""catchComment"">
<div class=""inner"">
<h3><!--キャッチコピー-->履くダイエットの大定番!<!--/キャッチコピー--></h3>
<p>
<!--商品コメント-->商品詳細:<br>履くダイエットの大定番!<br>段階式着圧設計でほっそり美脚をサポート。<br>お肌の透け感がある25デニールのゾッキパンスト。<br>つま先補強タイプ。<br>商品サイズ:105×135×30(mm)<br>ケース入数:240<!--/商品コメント--></p>
</div>
</div>

<tr class=""firstRow"">
<th>商品管理番号</th>
<td>4545633002374</td>
</tr>
<tr>
<th>ブランド名</th>
<td>あいうえお株式会社
</td>
<!-- <td>あいうえお株式会社()</td> -->
</tr>
<tr>
<th>サイズ・容量</th>
<td>1足</td>
</tr>
<tr>
<th>規格</th>
<td>原産国:日本</td>
</tr>
<tr>
<th>注意事項</th>
<td>商品パッケージ画像やアテンションシール、キャッチコピー・文言は予告なく変わることがあります。<br> <img src=""../../../image.space.rakuten.co.jp/d/strg/ctrl/6/9f5a7f69a4120a16a709e75ac20dd03af1d6776c.04.1.6.2.jpg""></td>
</tr>
<tr>
<th>出荷条件</th>
<td>1~5営業日程度での出荷予定(最短翌日出荷。在庫不足の場合、メーカー様より仕入後の納品となります。)</td>
</tr>

<tr>
<th>注文について</th>
<td>
取引申請が必要です
</td>
</tr>
<tr>
<th>良品返品</th>
<td>


不可
</td>
</tr>
<tr>
<th> 支払条件<br>
販売条件<br>
返品条件</th>
<td><a href=""#torihikijyouken"">こちらをご覧ください</a><br>
出展企業毎に異なりますので、必ずご確認ください</td>
</tr>
<tr>
<th>登録/更新</th>
<td>2015/04/02</td>
</tr>
</table>
</div>
</div>
</div> <!-- /itemInfo -->
</td>
</tr>
</table> <!-- id=""layoutTable2"" -->
<div class=""contEnd"">
<hr>
</div>
</div> <!-- /itemInfo1 -->

<div class=""dlpo-6-5_2""></div><!-- ←DLPO -->

<!---->
<div id=""itemInfo2"" class=""line2"">
<!---->
<div id=""cartTable"">
<p class=""align_right"">かきくけこは内税ですが他の卸提示価格との比較のために、外税の参考額として表示しております。</p>
<div class=""inner"">
<div class=""inner1"">
<div class=""inner2"">
<table border=""0"" cellspacing=""0"" summary=""トレイン カロリー237着圧PS BKの商品明細情報"">
<tr id=""headRow"">
<th class=""col1"">注文欄<br>
番号</th>
<th class=""col2"">商品管理<br>
番号</th>
<th class=""col3"">内訳</th>
<th class=""col4"">
メーカ希望小売価格
</th>
<th class=""col5"">
卸価格<!----></th>
<th class=""col6"">セット毎数量
</th>
<th class=""col7"">ご注文セット数</th>
</tr>

<tr class=""odd"">
<td class=""setId""> 1
<input type=""hidden"" name=""set_id_1"" value=""1""></td>
<td>4545633002374</td>
<td>カロリー237着圧PSBK</td>
<td>
800円/点(税込)
</td>
<td>

</td>
<td>
<div align=""right"">
<!---->
1点
</div>
</td>
<td>
<input type=""hidden"" name=""set_num_1"" value=""1"">
<!---->
<!---->
卸価格閲覧・ご注文には<br>
会員登録(ログイン)が必要です<br>
<div class=""reg_login_btn""> <a href=""https://www.aaaaaa.jp/regist/index.html_registTriggerItemId=6436467""><span>仕入れ会員登録</span></a> </div>
<div class=""reg_login_btn""> <a href=""../../dap/sv/Login_.html""><span>ログイン</span></a> </div>
</td>
</tr>

<tr class=""even"">
<td class=""setId""> 2
<input type=""hidden"" name=""set_id_2"" value=""2""></td>
<td>4545633002374</td>
<td>カロリー237着圧PSBK ×240点セット</td>
<td>
800円/点(税込)
</td>
<td>

<!---->

<!---->
</div> <!-- class=""inner2"" -->
</div> <!-- class=""inner1"" -->
</div> <!-- class=""inner"" -->
</div> <!-- id=""cartTable"" -->

<div id=""orgPhoto"">
<img src=""../../../img04.aaaaaa.jp/ex36/sign_image/6/357136/S357136.jpeg"" alt=""あいうえお株式会社"">
<br>
<input type=""hidden"" name=""imageCopyOk"" id=""imageCopyOk"" value=""0"">

<!-- 商品詳細画像 -->
<div style="" height:1px; width:1px; overflow:hidden;"">
<img src=""../../../img03.aaaaaa.jp/ex34/20141120/7/6436467_0.jpg"" alt="""" class=""imageborder"" name=""photoName1"" id=""photoName1"" onClick=""overSizeLink('photoName1')""><br> </div>
<!-- /商品詳細画像 -->

補足説明に記載したかったのですが、文字数制限の為、こちらに記載致しました。全文ではございませんが、やり方が判れば、こちらで多少加工は出来そうですので、これがソースの全文と仮定してご回答頂ければ幸いです。

"

<h2 class=""dlpo-1-1"">商品紹介</h2><!-- ←DLPO -->
<div id=""catchComment"">
<div class=""inner"">
<h3><!--キャッチコピー-->履くダイエットの大定番!<!--/キャッチコピー--></h3>
<p>
<!--商品コメント-->商品詳細:<br>履くダイエットの大定番!<br>段階式着圧設計でほっ...続きを読む

Aベストアンサー

こんにちは。

>欲しいのは、「ディブ オリーブ&アルガンクレンジングオイル」だけです。

分かりましたが、二種類用意しました。たぶん、最初のもので大丈夫なはずですが、商品名という部分を検索するのでしたら、その次のものになります。
Set itm_nm = .getElementById("itemName")
から
Set ca_com = .getElementById("catchComment")の手前の行まで。

'//

  Set itm_nm = .getElementById("itemName")
  If Not itm_nm Is Nothing Then の後は、
   ar(2) = Split(itm_nm.innerText, vbCrLf)(0)
 End If
'---------------------
  Set itm_nm = .getElementById("itemName")
  If Not itm_nm Is Nothing Then
   i = InStr(1, itm_nm.innerHTML, "商品名-->", 1)
   If i > 0 Then
    j = InStr(i + 1, itm_nm.innerHTML, "<!--", 1)
    ar(2) = Trim(Mid(itm_nm.innerHTML, i + 6, j - i - 6)) 'アイテムネーム'
   Else
    ar(2) = Split(itm_nm.innerText, vbCrLf)(0)
   End If
  End If
'//


画像の方も、私のコードで取れているはずですが、HTMLコードの中で、photoPreviewという所の下に、リストされています。

以下は、
photoPreview
から
Cells(cnt, 6).Value = Dir(FName)の手前の行まで
の中で、2行を入れ、1行を書き換えます。

なお、URLアドレス間を空白にすると、URLは、1行しか見えませんのが、中に隠れています。書き換え、または挿入部分は、「* 」(3箇所)がついています。
'//
Set ph_prv = .getElementById("photoPreview")
    If Not ph_prv Is Nothing Then
     Set img_ea = ph_prv.getElementsByTagName("td")
     Dim lst As Long '*型の宣言の中に組み入れても良い
     If img_ea.Length > 0 Then
     If img_ea.Length > 1 Then lst = 1 '**
      For i = 0 To lst
       do_img = img_ea(i).innerHTML
       j = InStr(1, do_img, "http://")
       k = InStr(1, do_img, ".jpg")
       If j * k > 0 Then
        imges = imges & " " & Mid(do_img, j, k + 4 - j)
        '半角スペース
       End If
      Next i
      If Len(imges) > 5 Then
       ar(5) = Trim(imges) 'イメージデータ・アドレス '***空白を入れる場合
      End If
     End If
    End If
//


2015/04/09 11:45と、補足日時:2015/04/09 12:41に、書いていただいたので、少し、説明させていただきます。

>getElementById("photoPreview")をgetElementById("photoName1")にするのかも?

このファイルは、どこにあったものでしょうか。ネット上ではありませんか?ネット上なら、おっしゃっている指摘は正しいです。

<div style=" height:1px; width:1px; overflow:hidden;">
<img src="http://img01.qqqq.jp/ex11/20150409/1/5339021_0.j … alt="" class="imageborder" name="photoName1"

しかし、HDDに入れると、おそらく、そこからは取り出せないはずです。物理的なアドレスに変わってしまうようです。

<!-- 商品詳細画像 -->
<div style=" height:1px; width:1px; overflow:hidden;">
<img src="xxxxx_files/5339021_0.jpg" alt="" class="imageborder" name="photoName1" id="photoName1"

(xxxxxは、ファイルの保存名。)
もし、そこが残っているなら、以下のコードで良いはずです。

  Set ph_prv = .getElementById("photoName1")
  If Not ph_prv Is Nothing Then
   images = Replace(ph_prv.href, "about:", "", , , 1)
  End If
  Set ph_prv = .getElementById("photoName2")
  If Not ph_prv Is Nothing Then
   images = images & " " & Replace(ph_prv.href, "about:", "", , , 1)
  End If

とすれば、ソースのコードは取り出せます。ところが、そううまく行かないようです。全体のURLそのままを、HDDに保存できれば取れますが、ふつうは再現できないはずです。それで、私は、そこは選びませんでした。

こんにちは。

>欲しいのは、「ディブ オリーブ&アルガンクレンジングオイル」だけです。

分かりましたが、二種類用意しました。たぶん、最初のもので大丈夫なはずですが、商品名という部分を検索するのでしたら、その次のものになります。
Set itm_nm = .getElementById("itemName")
から
Set ca_com = .getElementById("catchComment")の手前の行まで。

'//

  Set itm_nm = .getElementById("itemName")
  If Not itm_nm Is Nothing Then の後は、
   ar(2) = Split(itm_nm.innerText,...続きを読む

QVBAからhttpを呼びソースを取得

ブラウザでURLを指定すると、htmlがサーバーから返され表示されます。
それをVBAからURLを指定し、htmlのソースを文字列で受け取りたいと思います。

普通にshellで渡すとブラウザが起動されてしまうし・・・。

方法があれば教えてください。

Aベストアンサー

HTMLテキストを取るには
Sub test01()
Set obj = CreateObject("InternetExplorer.Application.1") 'IEを新規オブジェクトとして宣言
obj.Visible = True
targetURL = "http://okweb.jp/kotaeru.php3?qid=1044759"

obj.Navigate (targetURL) '指定アドレスに飛ばす
'時間待ち(objが動作中であれば)
Do While obj.busy
Loop

'表示
obj.Visible = True
For n = 0 To obj.Document.All.Length - 1
If UCase(Trim(obj.Document.All(n).tagname)) = "HTML" Then
s = obj.Document.All(n).outerhtml 'HTMLのテキスト
Cells(n + 1, 1) = s 'エクセルONLY用
End If
Next
End Sub
2,3のWEBに載ってたものの寄せ集めですが。
なかなか載って無いものですね。
sが文字列です。エクセルなどでは、長さ制約あり。
WSHやBASP21やWEBBROWSERなど使う方法があるようですが、不勉強で全体を見渡せていないので取りあえず。

HTMLテキストを取るには
Sub test01()
Set obj = CreateObject("InternetExplorer.Application.1") 'IEを新規オブジェクトとして宣言
obj.Visible = True
targetURL = "http://okweb.jp/kotaeru.php3?qid=1044759"

obj.Navigate (targetURL) '指定アドレスに飛ばす
'時間待ち(objが動作中であれば)
Do While obj.busy
Loop

'表示
obj.Visible = True
For n = 0 To obj.Document.All.Length - 1
If UCase(Trim(obj.Document.All(n).tagname)) = "HTML" Then
s = obj.Docum...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセルのセルの中で改行して入力したものを分割したいんです。

エクセルの入力編集について質問です。

セルに改行(Alt&Enter)をして下記のように入力を行ったのですが、

 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 |  |内容2 |
 L__⊥____」

データ処理に不便なために同一セル内にある「内容1」と「内容2」を下記のように別々のセルにしたいと思います。

 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 ―――――――――
 |  |内容2 |
 L__⊥____」

もしくは、
 Γ ̄ ̄Τ ̄ ̄ ̄ ̄¬
 |番号|内容1 |
 ―――――――――
 |番号|内容2 |
 L__⊥____」

手作業にてコピーアンドペーストと行の挿入を繰り返しを行うのは、非常に時間がかかるかと思います。

そこで、なにか一括で処理できる方法はありませんでしょうか?お願いします。
また、一括ではなくても入力が簡単になる方法はありませんか?

最後になりますが、Excel 2003を利用しています。

Aベストアンサー

    A      B
1  番号A  内容A
         内容B
2  番号B  内容C
         内容D
3  番号C  内容E
         内容F

のように並んでいる場合ですが、

1.A1:B3を選択してコピーし、Wordに形式選択(HTMLかリッチテキスト)で貼り付け。
2.Wordに貼り付けた全体を選択してコピーし、Excelの別シートに貼り付け。
3.番号の列が結合された状態なので、それらのセルをまとめて選択して結合解除。

ではいかがでしょうか。

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

QExcelでhtml形式のテキストを表示したい

htmlソースをそのままExcelに貼り付けると、構文を解析して
ブラウザで表示したようになってしまいます。(表示はかなりズレますが)
これを只のテキストとして表示させたいのですが、上手くいきません。
どなたか良い方法をご存知の方、ご教授願います。

Aベストアンサー

次の方法は如何でしょうか。
(1)対象のソースをTEXTファイルとして保存
(2)新規エクセルファイルを開く
(3)データ→外部データの取り込み→テキストファイルのインポート→対象ファイルを選択→インポート
(4)次へ→次へ→列データの形式で文字列を選択→OK


人気Q&Aランキング