質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • VBA

    1901questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1627questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    238questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

※至急※[VBA]functionの呼び出しの繰り返し(HTMLタグの除去)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 397

citrus1102

score 2

 [VBA]functionの呼び出しの繰り返し(HTMLタグの除去)

お世話になってます。Excel VBA全くの初心者です。よろしくお願いいたします。

Excelで文中のHTMLタグの除去を行い別sheetに転記を行いたく、方法を調べました。
下記サイトを参考に「<」から「>」までを空白に置き換えるサンプルプログラムを発見し、他シートから1セルずつ指定して転記する動作確認は成功しました。

[URL]http://www.excel.studio-kazu.jp/kw/20100502205005.html

[サンプルプログラム1]

Function ReplaceHTMLTag(ByVal txt As String) As String
 With CreateObject("vbscript.regexp")
     .Pattern = "<[^>]*>"
     .Global = True
     ReplaceHTMLTag = .Replace(txt, "")
 End With
 End Function


これを別Sheetの特定の列に値が入っている限り繰り返し行いたいと考え、さらに以下のサンプルプログラムを見つけました。

[URL]http://excelution.net/loop-processing-template-of-excel-vba/

[サンプルプログラム2]

Sub Do_While_Loop_Sample()
    Dim i As Long 
    i = 1                      
    Do While Cells(i, 1) <> "" 
        Cells(i, 1) = Cells(i, 1) + 1 
        i = i + 1 
    Loop 
End Sub

しかし、これまで全くVBAを扱ったことがないため、VBAの構成等基礎的なことを含め調べながら上記のプログラムを組み合わせようとしましたが、うまくいきません。

戻り値ありのため、Callではなく下記のDimを用いる必要があると考えているのですが、いろいろなサイトを見ているとメッセージボックスの例ばかりで、Sheet上に値を入れるようなものを見つけられませんでした。

[サンプルプログラム3]

Sub macro1()
    Dim str As String
    str = func1()
    MsgBox str, vbInformation
End Sub

Function func1() As String
    func1 = "Hello VBA!"
End Function


サンプルプログラム2の「Cells(i, 1) = Cells(i, 1) + 1 」の部分でHTMLタグの除去を行うFunctionを呼びだすのではと考えていますが、違うのでしょうか。

本来自分で調べて学んでいくものだとは思いますが、急きょ必要となったためこちらを利用します。

情報不足や認識違い等多々あるかと思いますが、ご指摘いただけると幸いです。
以上、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

サンプルプログラム2の「Cells(i, 1) = Cells(i, 1) + 1 」の部分でHTMLタグの除去を行うFunctionを呼びだすのではと考えていますが、違うのでしょうか。

それで、あってますよ。
Cells(i, 1) = Cells(i, 1) + 1
の部分を、
Cells(i, 1) = ReplaceHTMLTag(Cells(i, 1))
とすればOKです。

参考リンク
Functionプロシージャ - プロシージャ - Excel VBA入門

追記

これを別sheetのセルに対して行い、タグを除去した文章を引っ張ってきたいと考えております。

これでは、やりたいことが不明瞭です。
まずはやりたいことを、明確にだれにでも誤解なく伝わるように文章化することをしましょう。

例えば、
シート名「元データ」のA列の1行目からセルが空白になるまで、セルのデータからHTMLタグを除去したものを、現在のアクティブなシートのA列の1行目以降にすべて出力したい。
というように。

上記の仕様とすると、

Sub Do_While_Loop_Sample()
    Dim wsFrom As WorkSheet
    Dim wsTo As WorkSheet
    Dim i As Long 

    Set wsFrom = WorkSheets("元データ")
    Set wsTO = ActiveSheet
    i = 1 

    Do While Cells(i, 1) <> "" 
        wsTO.Cells(i, 1) = ReplaceHTMLTag(wsFrom.Cells(i, 1) )
        i = i + 1 
    Loop 
End Sub

元データ、出力先のシートをWorkSheet変数に格納しておいて、
それをCellsの前につけて、どのシートのセルなのかを指定します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/05 21:04 編集

    hatena19さん

    早速のご回答ありがとうございます。リンクもありがとうございます。
    戻り値の指定ができていなかったようです。実行できました。

    これを別sheetのセルに対して行い、タグを除去した文章を引っ張ってきたいと考えております。
    Function単体の場合、セルに「=ReplaceHTMLTag(Sheet1!A1)」と指定するだけでよかったのですが、今回のように繰り返しFunctionの呼び出しを行う場合にはどうするのでしょうか。
    調べたところ、RangeとWorksheetsとを加えるのでは、と認識しているのですが、、、

    キャンセル

  • 2018/05/05 22:41

    hatena19さん

    ご指摘ならびにご回答ありがとうございます。
    また抽象的な質問にもかかわらず、意図を汲み取っていただきありがとうございました。
    まさにhatena19さんの想定してくださった通りの仕様を想定しておりました。
    無事に意図した動作を確認できました。

    この度は迅速なご回答ならびにご指摘ありがとうございました。
    今後はより具体的な質問を心掛けます。本当にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    1901questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1627questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    238questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。