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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

マクロ

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

Q&A

解決済

1回答

3395閲覧

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

citrus1102

総合スコア6

VBA

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

マクロ

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

0グッド

0クリップ

投稿2018/05/05 11:33

[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を呼びだすのではと考えていますが、違うのでしょうか。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サンプルプログラム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行目以降にすべて出力したい。
というように。

上記の仕様とすると、

vba

1Sub Do_While_Loop_Sample() 2 Dim wsFrom As WorkSheet 3 Dim wsTo As WorkSheet 4 Dim i As Long 5 6 Set wsFrom = WorkSheets("元データ") 7 Set wsTO = ActiveSheet 8 i = 1 9 10 Do While Cells(i, 1) <> "" 11 wsTO.Cells(i, 1) = ReplaceHTMLTag(wsFrom.Cells(i, 1) ) 12 i = i + 1 13 Loop 14End Sub

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

投稿2018/05/05 11:43

編集2018/05/05 12:32
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

citrus1102

2018/05/05 12:06 編集

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

2018/05/05 13:41

hatena19さん ご指摘ならびにご回答ありがとうございます。 また抽象的な質問にもかかわらず、意図を汲み取っていただきありがとうございました。 まさにhatena19さんの想定してくださった通りの仕様を想定しておりました。 無事に意図した動作を確認できました。 この度は迅速なご回答ならびにご指摘ありがとうございました。 今後はより具体的な質問を心掛けます。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問