URLからタイトルを抽出するマクロについて教えて下さい。
忍者ブログの記事タイトルをURLから抽出しようとしたのですが
文字化けしてしまい全く分かりません。
他のサイトやブログだと普通に抽出出来るのですが・・・
文字コード?か何かだと思うのですが、原因が分かりません。
ちなみに以下のマクロは、ネット上で検索して見つけたものを
そのままコピーして使用しています。

-------------------------------
Public Sub ReadTitle()
Dim url As Range
Dim Http, buf As String

Set Http = CreateObject("MSXML2.XMLHTTP")
Set url = Range("A3")
Do While (url.Value <> "")
Http.Open "GET", url.Value, False
Http.Send
buf = StrConv(Http.ResponseBody, vbUnicode)
'msgbox buf
url.Offset(0, 1).Value = getTitle(buf)
Set url = url.Offset(1, 0)
Loop
Set Http = Nothing
End Sub

Private Function getTitle(buf As String) As String
Dim pos1 As Long, pos2 As Long

pos1 = InStr(1, buf, "<title>")
If pos1 = 0 Then
pos1 = InStr(1, buf, "<TITLE>")
If pos1 = 0 Then
getTitle = ""
Exit Function
Else
pos2 = InStr(pos1 + 7, buf, "</TITLE>")
End If
Else
pos2 = InStr(pos1 + 7, buf, "</title>")
End If
getTitle = Mid(buf, pos1 + 7, pos2 - pos1 - 7)
End Function
------------------------------

宜しくお願い致します。

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

A 回答 (3件)

utf-8みたいなので


>buf = StrConv(Http.ResponseBody, vbUnicode)

With CreateObject("ADODB.Stream")
.Open
.Type = 2 'adTypeText
.Charset = "unicode"
.Writetext Http.ResponseBody
.Position = 0
.Charset = "utf-8"
buf = .ReadText()
.Close
End With
にしてみては?
    • good
    • 0
この回答へのお礼

一発解決出来ました。
ありがとうございました!

お礼日時:2010/01/24 18:41

参照設定をして、以下のコードを実行すると


指定した。URLで、IEが起動して、
URLのタイトルがエクセルのイミディエイトウィンドに出ます。

Dim ie As New InternetExplorer
Dim dc As HTMLDocument


ie.Navigate "http://oshiete1.goo.ne.jp/qa5617517.html"

ie.Visible = True

Do While ((ie.Busy = True) Or (ie.ReadyState <> READYSTATE_COMPLETE))

DoEvents

Loop


Set dc = ie.Document

Debug.Print dc.Title

Set ie = Nothing

******
実行結果

エクセルでURLからタイトルのみを抽出する方法 - 教えて!goo

********
文字コードは、検証していませんが。
ieで表示して、たぶん文字コードが
文字化けしていなければ
大丈夫なような気もしますが。
未検証です。
    • good
    • 0
この回答へのお礼

皆様のおかげで解決することが出来ました。
お時間を割いて頂きありがとうございました。

お礼日時:2010/01/24 18:42

こんにちは。



>忍者ブログの記事タイトルをURLから抽出しようとしたのですが

こんな感じでいかがですか?
>buf = StrConv(Http.ResponseBody, vbUnicode)
ここがへんかもしれません。

以下は、必要でしたら、サブルーチン・プロシージャに分けてください。
'-------------------------------------------
Public Sub ReadTitleR()
Dim stRng As Range
Dim buf As String, ar As Variant
Dim i As Long
With CreateObject("MSXML2.XMLHTTP")
  Set stRng = Range("A3")
  For i = 1 To Cells(Rows.Count, stRng.Column).End(xlUp).Row
    If StrConv(stRng.Cells(i, 1).Value, vbLowerCase) Like "http://??*" Then
      .Open "GET", stRng.Cells(i, 1).Value, False
      On Error Resume Next
      .Send
      On Error GoTo 0
      buf = .ResponseText
      If .Status >= 200 And .Status < 300 And buf <> "" Then
        ar = Split(buf, "title>")
        stRng.Cells(i, 2).Value = Mid(ar(1), 1, Len(ar(1)) - 2)
      End If
    End If
  Next i
End With
End Sub
'-------------------------------------------
    • good
    • 0
この回答へのお礼

皆様のおかげで解決することが出来ました。
お時間を割いて頂きありがとうございました。

お礼日時:2010/01/24 18:42

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

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

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

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

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

Q意味が分かりにくい「英語タイトル」の曲

今回は申し訳ありませんが、英語タイトルの曲限定です。日本の曲でも英語タイトルならOKです。

さて、英語圏の人(or 日本人でも専門家の人)には分かるのでしょうが、我々一般人にはよく意味が分からない。そのような英語タイトルの曲でお好きなものがありましたら教えてください。

<例>

「You'd be so nice to come home to」(ヘレン・メリル)

https://www.youtube.com/watch?v=YM0PhsP7ulk
大橋巨泉さんが訳に悩んだらしいです。「教えて!goo」の英語カテゴリーでもタイトルの訳し方の質問が数回ありました。


「Is You Is Or Is You Ain't」(ルイス・ジョーダン)
https://www.youtube.com/watch?v=qROFl0sbrjo
タイトルに動詞が4個入っています。どういう文構造なのでしょうか?

※ おひとり <3曲>まででお願いします。
※ クラシック曲は除いてください。

Aベストアンサー

こんばんは!

お礼、ありがとうございます!

実は、このアルバム(「太陽と戦慄」)を出した、第3期クリムゾンは、前のメンバーを首にして、新しいメンバーで作ったアルバムでした。フリップは、長年、ジャズのインプロビゼーションをロックで再現する事を目指してましたが、以前のメンバーでは無理と判断して、メンバーを刷新したのです。この第3期のメンバーで、「太陽と戦慄」「暗黒の世界」「レッド」と3枚のアルバムを出して解散します。

◎King Crimson(キング・クリムゾン):「Starless and Bible Black(暗黒の世界)」
https://www.youtube.com/watch?v=np6JgAL2Ayc
原題を直訳すると「星のない夜と黒い聖書」となりますね…。

この第3期のLIVEの迫力は人気があり、いろいろとCD化されていますね…。

また、プログレといっても、大まかに3種類くらいに分けることが出来ます。

1.クラシック的な構造美とアプローチ。
2.ジャズ的なアプローチで、カンタベリー派と言われることが多いです。
3.ドイツの電子音楽。後のテクノ、トランス、アンビエントに展開。

プログレは、脱ロックンロールで、ロックを表現する形態のことで、それで最初はアート・ロックとかサイケディリック・ロックと言われてましたが、最終的にプログレッシブ・ロックに落ち着きました。

余談でした…。(^o^)丿

こんばんは!

お礼、ありがとうございます!

実は、このアルバム(「太陽と戦慄」)を出した、第3期クリムゾンは、前のメンバーを首にして、新しいメンバーで作ったアルバムでした。フリップは、長年、ジャズのインプロビゼーションをロックで再現する事を目指してましたが、以前のメンバーでは無理と判断して、メンバーを刷新したのです。この第3期のメンバーで、「太陽と戦慄」「暗黒の世界」「レッド」と3枚のアルバムを出して解散します。

◎King Crimson(キング・クリムゾン):「Starless and Bible Blac...続きを読む

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Q子供用に英語の単語の本を作りました。タイトルは?

子供用に英語の単語(リンゴなど)と、簡単なフレーズを載せた本を手作りしました。

本のタイトルは、

English book

English words book

English together

何か英語は苦手なので、全然思い浮かびません。上記3つ考えたのですが、このタイトルは、おかしくないですか??

他にいい、表紙タイトルがあれば、教えて下さい。

Aベストアンサー

English togetherはとてもセンスがいいなと思いました。

型っ苦しいEnglish book などより、全然素敵だと思います^^

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

Q漫画のタイトルの英語版を調べるサイト知りませんか

日本の漫画のタイトルの英語版を調べられるサイトを探しています。海外の知人に日本の漫画を買ってくれるよう頼まれているんですが、日本のタイトルと英語のタイトルが一致しているのかどうかわからず苦慮しています。一冊ならそのタイトルを言えばいいのでしょうが、たくさん頼まれているので。どなたか、そういうのが一覧になっているサイトをご存じないでしょうか。よろしくお願いします。

Aベストアンサー

確実に分かるとは限りませんが、ウィキペディアを使ってはどうでしょうか。

例えばNARUTOの日本語版記事
http://ja.wikipedia.org/wiki/NARUTO_-%E3%83%8A%E3%83%AB%E3%83%88-
の左側に「他の言語」があって、その中のEnglishへ進むと英語版へのリンクがあるのでそれで英語でもNARUTOということが分かります。

他の作品でも同じようにすればいいでしょう。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

Qかっこいい英語のタイトル

写真アルバムにつけるタイトルを考えています。
英語で何かタイトルをつけたいのですが、英語が苦手でわかりません。
ずっと柔道をしていて、今年高校を卒業する弟にプレゼントしたいのですが、
「高校時代」「高校時代の柔道」という感じの意味をもつ英語はどんなものがありますか?

デザイン的には『柔』の一文字を一番上に、その下にサブタイトルっぽく英語で印刷したいと思っています。

       柔

~○○○○○○○○○○~

↑↑↑
こんな感じです。

Aベストアンサー

Strength of youth、なんでどうでしょう?若き強さ、男らしく。。。
memoreis of .....(弟さんの名前)(メモワース、思い出、という意味ですが、本などに書かれている場合はメモリーじゃなくメモワースという書き方ができます。)芸者の映画をもじって。。
ちょっと長いけどMy threeーyear dedication for jyudo(柔道にささげた三年間)などは??
どうでしょう??

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

Q通常メールのタイトルが英語になってしまうことはありますか?

以前からタイトルが英語のメールが届くのですが、見ないで削除しています。

友人からのメールを待っているのですが、そのようなメールのタイトルが英語になってしまうことはありますか?

もしかしたら区別が付かず、削除してしまっているのかな?と思い、質問致しました。

宜しくお願いします。

Aベストアンサー

海外のお友達ならともかく、日本人の友人で
英語のタイトルをつける人も少ないでしょう。
但し件名を書かない人は、たまにいます。
あと返信で「Re:」となっている人も。

自動で判別させるにはスパム対策用ソフトを
併用されるといいでしょう。
例えばこういうやつです。
http://www.vector.co.jp/soft/win95/net/se225316.html

ベクターのサイトには他にもありますので、
好みのものがあれば、そちらをどうぞ。

Q調べてもわからないのでこの文の意味を教えてください。 Dim a as system.Reflect

調べてもわからないのでこの文の意味を教えてください。

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)


VB.NETを使用しています。

Aベストアンサー

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()
自分自身 (実行プログラム) を参照

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)
実行プログラムがあるフォルダーのパスを取得


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング