Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2016)
innerHTMLの20行目の<title>タグから文字列抽出
投稿日時: 19/03/08 16:09:48
投稿者: gorby

VBスクリプト初心者です。
 
innerHTMLの20行目の<title>タグに必ず下記のようなテキストがありあす。

<title>AS5563 Sine Sesta,T - bgp.kk.net</title>

 
この行から Sine Sesta,Tの部分だけを抽出して変数resultに格納したいが、下記のような書き方になりますか?
下記オレンジ色のVBスクリプトがわかりません。ご存知の方教えてください。
 
innerHTMLの20行目を一次元配列にして変数bufに格納する。
 
  num = UBound(buf)
'numにbufの最大index数を代入する
  
buf(1)からbuf(num-2)までの一次元配列をそのまま変数resultに入れる。
 
 

回答
投稿日時: 19/03/08 17:46:04
投稿者: WinArrow
投稿者のウェブサイトに移動

この板は、ExcelVBAの板です。
 
VBScriptっと似ているけれど、まったく別物です。
 
↓のWEBページを参考に
 
https://tonari-it.com/vbs-get-title/

回答
投稿日時: 19/03/09 10:43:01
投稿者: simple

> 下記オレンジ色のVBスクリプトがわかりません。ご存知の方教えてください。
> innerHTMLの20行目を一次元配列にして変数bufに格納する。

「VBスクリプト」という言い方は、
・単にVBAのコードの意味なのか、
・VBS(VBScript)のことを言っているのか
不明ですが、前者ではないかと思います。
VBSはVBAと異なる言語で、VBAに比べて相対的にデバッグがやりにくいこともあり、
あえてVBSにする必要はないでしょう。
情報の取得しやすさからも普通にVBAを使うことを推奨します。
# どうしてもVBSでということなら、その理由を後学のために教えてください。
 
さて、
innerHTMLの20行目の<title>タグ
という言い方が不明です。
<title>タグは<title>タグであって、
何行目という言い方はしません。
 
# HTMLファイルの20行目にタイトルタグが書かれているということなのかな。
# Documentオブジェクトを操作するには、ソースの何行目ということではなく
# Document Object Model(DOM)として扱うのが普通です。
 
> <title>AS5563 Sine Sesta,T - bgp.kk.net</title>
> この行から Sine Sesta,Tの部分だけを抽出して変数resultに格納したい

ということなら、既に指摘がありますが、単に
objIE.Document.Title のような書き方で、
タイトルタグの文字列
AS5563 Sine Sesta,T - bgp.kk.net
が取得できます。
 
>innerHTMLの20行目を一次元配列にして変数bufに格納する。
そのような必要性はまったくありません。

    s = objIE.Document.title
    result = Split(s, "-")(0)
などとすれば、
AS5563 Sine Sesta,T
だけが得られます。
さらに最後のスペースを除くならTrim関数を使います。
 
参考にして下さい。

回答
投稿日時: 19/03/09 18:51:25
投稿者: simple

質問の冒頭が innerHTMLで始まっていますが、
innerHTMLという言葉の意味を別の意味で使っていないですか?
 
innerHTMLはある要素のinnerHTMLプロパティを示す言葉なので、
何の を明示せずに単にinnerHTMLということはありません。
 
あるページのHTMLテキストという意味でつかっているのでしょうか。
 
HTMLファイルがあって、それをテキストとして読み込んで、
<title>と</title>で挟まれた文字列を取り出そうとしているのでしょうか。
できているところまで書いてもらうと、そのあたりが明確になりますね。

投稿日時: 19/03/10 06:07:20
投稿者: gorby

simple さんの引用:
> 下記オレンジ色のVBスクリプトがわかりません。ご存知の方教えてください。
> innerHTMLの20行目を一次元配列にして変数bufに格納する。

「VBスクリプト」という言い方は、
・単にVBAのコードの意味なのか、
・VBS(VBScript)のことを言っているのか
不明ですが、前者ではないかと思います。
VBSはVBAと異なる言語で、VBAに比べて相対的にデバッグがやりにくいこともあり、
あえてVBSにする必要はないでしょう。
情報の取得しやすさからも普通にVBAを使うことを推奨します。
# どうしてもVBSでということなら、その理由を後学のために教えてください。
 
>職場でRPAツールのWinActorを使っていることから、VBScriptでコーディングが必要なのです。
 
さて、
innerHTMLの20行目の<title>タグ
という言い方が不明です。
<title>タグは<title>タグであって、
何行目という言い方はしません。
 
# HTMLファイルの20行目にタイトルタグが書かれているということなのかな。
 
>そういうことです。初心者のため、HTMLファイル20行目にジャンプできる関数があるかと思いました。
 
# Documentオブジェクトを操作するには、ソースの何行目ということではなく
# Document Object Model(DOM)として扱うのが普通です。
 
> <title>AS5563 Sine Sesta,T - bgp.kk.net</title>
> この行から Sine Sesta,Tの部分だけを抽出して変数resultに格納したい

ということなら、既に指摘がありますが、単に
objIE.Document.Title のような書き方で、
タイトルタグの文字列
AS5563 Sine Sesta,T - bgp.kk.net
が取得できます。
 
>innerHTMLの20行目を一次元配列にして変数bufに格納する。
そのような必要性はまったくありません。
    s = objIE.Document.title
    result = Split(s, "-")(0)
などとすれば、
AS5563 Sine Sesta,T
だけが得られます。
さらに最後のスペースを除くならTrim関数を使います。
 
参考にして下さい。

投稿日時: 19/03/10 06:13:32
投稿者: gorby

simple さんの引用:
> 下記オレンジ色のVBスクリプトがわかりません。ご存知の方教えてください。
> innerHTMLの20行目を一次元配列にして変数bufに格納する。

「VBスクリプト」という言い方は、
・単にVBAのコードの意味なのか、
・VBS(VBScript)のことを言っているのか
不明ですが、前者ではないかと思います。
VBSはVBAと異なる言語で、VBAに比べて相対的にデバッグがやりにくいこともあり、
あえてVBSにする必要はないでしょう。
情報の取得しやすさからも普通にVBAを使うことを推奨します。
# どうしてもVBSでということなら、その理由を後学のために教えてください。
 
さて、
innerHTMLの20行目の<title>タグ
という言い方が不明です。
<title>タグは<title>タグであって、
何行目という言い方はしません。
 
# HTMLファイルの20行目にタイトルタグが書かれているということなのかな。
# Documentオブジェクトを操作するには、ソースの何行目ということではなく
# Document Object Model(DOM)として扱うのが普通です。
 
> <title>AS5563 Sine Sesta,T - bgp.kk.net</title>
> この行から Sine Sesta,Tの部分だけを抽出して変数resultに格納したい

ということなら、既に指摘がありますが、単に
objIE.Document.Title のような書き方で、
タイトルタグの文字列
AS5563 Sine Sesta,T - bgp.kk.net
が取得できます。
 
>innerHTMLの20行目を一次元配列にして変数bufに格納する。
そのような必要性はまったくありません。
    s = objIE.Document.title
    result = Split(s, "-")(0)
などとすれば、
AS5563 Sine Sesta,T
だけが得られます。
さらに最後のスペースを除くならTrim関数を使います。
 
>すみません、 AS5563は不要なのですが、 Sine Sesta,T だけを抽出するためにはやはり一次元配列が必要ではないでしょうか? 他に手段はありますか? ASで始まる単語は長さが変わる場合があるので先頭から何文字抽出という関数は使えません。
 
 
参考にして下さい。

回答
投稿日時: 19/03/10 09:30:02
投稿者: simple

>AS5563は不要なのですが、

Sub test()
    Dim s As String
    Dim s1 As String
    Dim p As Long
    Dim result as String

    ' -- title tagの取得は引用サイトから可能と仮定して省略 --
    
    s = "AS5563 Sine Sesta,T - bgp.kk.net"  '前提
    s1 = Split(s, "-")(0)
    p = InStr(s1, " ")
    result = Mid(s1, p + 1)
End Sub
というような方法で抽出可能です。
 
こういう場合、抽出のルールを明記するべきです。
・"-"の前の文字列で
・最初の1wordを省く
ということですか?
それともASで始まる単語はすべて省くということ?
それらを正確に書いてください。
 
いずれにしても、あとはご自分で応用してください。
私はこれまでとします。
 
------------------------------------------
なお、あなたの発言の仕方についてひとこと。
 
全文引用は避けてください。必要がありません。
本当に必要なところだけ引用するものです。
今回のような引用の仕方は、見たことがない。
他人の引用文中に自分の発言を差し込むとは。
引用とあなたの発言が区分けがつきません。
しかも自分の発言の頭に>をつけているから
余計分かりにくい。
 
そんなに手抜きしたいですか?
大した回数の発言でもないじゃないですか。
もう少し手を掛けませんか?

投稿日時: 19/03/10 11:00:46
投稿者: gorby

お世話になりました