[[20160810135727]] 『alt=』(im) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『alt=』(im)

ひとつのセルに

あいalt="うえ"お

と入っている時「うえ」を削除したいのですが良い数式はありますでしょうか。セルには他の文字や"など記号もたくさん入っております。また、ひとつのセルにalt=""がいくつも入っている場合もあります。

※置換はセルの文字が多すぎで一括で処理が出来ませんでした。

< 使用 Excel:Excel2003、使用 OS:Windows8 >


置換できないほどの多い文字数なら、エクセルより、ほかのソフトウェアでやったほうはいいじゃないですか?
(x) 2016/08/10(水) 14:40

 検索 : alt="*"
 置換 : alt=""

 ではダメなの?
 
(GobGob) 2016/08/10(水) 14:40

こんにちは

数式では難しいかと思うので、ユーザー定義関数で。

Alt+F11キーでVBE画面を出して、メニューの挿入で標準モジュールを用意して、
右側のエディタ画面に下記コードをコピペ、

Function test(r As Range) As Variant

    Dim v As Variant
    Dim i As Long
    Dim j As Long
    Dim k As Long
    If r.Value <> "" Then
        v = Split(r.Value, "alt=""")
        j = UBound(v)
        For i = 0 To j
            k = InStr(1, v(i), """")
            If k > 0 Then
                v(i) = Mid(v(i), k, Len(v(i)))
            End If
        Next
    End If
    test = Join(v, "alt=""")
End Function

で、セルA1に「あいalt="うえ"お」のように入力されていたら、セルB1等に

=test(A1)

としてみて下さい。

(ウッシ) 2016/08/10(水) 14:52


皆様、早々にご回答いただき有難うございます!

xさま 他のソフトウェアもいくつか試してみましたがダメでした。。

GobGobさま そちらで置換のボタンを押すと、ひとつのセルの内容が多すぎでエラーになってしまいました。。

ウッシさま やはりVBAしか無いのですね。VBAは基礎程度の知識しかなく試していなかったのですが、教えていただいたもので試してみます!
(im) 2016/08/10(水) 15:24


emeditorで試したところ、数十万文字の置換は一瞬で完了です。
置換の結果をまたエクセルにコピペすればいいです。
(x) 2016/08/10(水) 17:23

xさま

有難うございます!

早速試してみたのですが、セルの頭に

「<!--画像一枚 表示 --><div class="spaceU15"><img src="http…」

と入っていて、マクロを使うとなぜか

「"spaceU15"><img src="http」

からの表示となってしまいます。
色々調べたのですが原因がわからず、ご教授いただけますでしょうか。

ちなみに1つのセルの文字数は4000〜7000文字程度でした。
(im) 2016/08/10(水) 20:31


横から済みません。
>GobGobさま そちらで置換のボタンを押すと、ひとつのセルの内容が多すぎでエラーになってしまいました。。
何というエラーですか?
正確なメッセージを教えてください。
私は、その置換が有効な気がするのですが。

(γ) 2016/08/10(水) 21:21


こんにちは

あいalt="うえ"お

ひょっとして、セルの中にはダブルコーテーションではなくて、

あいalt=&quot;うえ&quot;お

と入っているのでは?

としたら、

Function test(r As Range) As Variant

    Dim v As Variant
    Dim i As Long
    Dim j As Long
    Dim k As Long
    If r.Value <> "" Then
        v = Split(r.Value, "alt=&quot;")
        j = UBound(v)
        For i = 0 To j
            k = InStr(1, v(i), "&quot;")
            If k > 0 Then
                v(i) = Mid(v(i), k, Len(v(i)))
            End If
        Next
    End If
    test = Join(v, "alt=&quot;")
End Functionに差し替えて下さい。

上記コードの、「&quot;」の部分は半角に直して下さい。

(ウッシ) 2016/08/12(金) 09:28


γさま ご返信が遅くなり申し訳ございません。また、エラー内容の記載がなく失礼いたしました。置換のボタンを押すと「数式が長すぎます。」というエラーが出ます。置換で対応できるのが一番簡単なのですが…調べたところ、一つのセルの文字数が911を超えると、エクセルはこのエラーメッセージを返すようです。

ウッシさま セルの中はダブルコーテーションになっております。

下記にひとつのセルの一部分のみ抜き出しました。参考になれば良いのですが…

 <td valign="top" width="200" >    <div><a rel="lightbox" href="画像URL" 

title="掛け時計"><img src="画像URL" style="border-style:none;" alt="掛け時計 壁掛け ウォールクロック"/></a></div>

<div class="spaceU5" align="center"><font col【以下略(約4,000〜7000文字)】
(im) 2016/08/12(金) 10:23


こんにちは

Function test(r As Range) As Variant

    Dim v As Variant
    Dim i As Long
    Dim j As Long
    Dim k As Long
    If r.Value <> "" Then
        v = Split(r.Value, "=""")
        j = UBound(v)
        For i = 0 To j - 1
            If Right(v(i), 3) = "alt" Then
                k = InStr(1, v(i + 1), """")
                If k > 0 Then
                    v(i + 1) = Mid(v(i + 1), k, Len(v(i)))
                End If
            End If
        Next
    End If
    test = Join(v, "=""")
End Function

これに差し替えてきると、どうですか?

(ウッシ) 2016/08/12(金) 10:42


imさん コメントありがとうございました。
Excel2003 のバグのようですね。
https://support.microsoft.com/ja-jp/kb/418283
私の手元にある2010では普通に置換ができるので、不思議に思っていましたが、
バグならしかたないですね。
 
皆さんから提案を試してみてください。
 
# 正規表現のReplaceを使っても、同じ結果になるのでしょうかね。
# ある程度、最近のバージョンに切り替えていくことも必要かもしれませんね。
(γ) 2016/08/12(金) 20:43

こんにちは。
手元に2003が無いので(むろん、昔はお世話になっていましたが)、
トライできずにいます。
 
ところで、HTMLソースをExcelのシートで編集しているようですが、
最終目的は何ですか?
どこかのサイトのHTMLを持ってきて、
なんらかの編集を施して、その結果をHTMLにするということなら、
セルに書き込まずに操作することもできそうです。
ここの障害がクリアーできたとして(出来るとは思いますが)、
そのあとどうなるのでしょう。
 
altの文字列をどうしても削除する必要があるのですか?
全体のタスクとの関係がよくわかりません。

(γ) 2016/08/13(土) 11:21


毎度ご返信が遅くなり申し訳ございません。。

ウッシさま いただいたマクロで問題なく削除が出来ました!本当に有難うございます!

γさま そうですね、さすがに2013は古いですよね。。切り替えも検討してみます! 私はWebショップを運営しているのですが、導入しているシステムでは、ページの一括更新にはcsvファイルをアップロードする必要があり、Excelでの編集を進めておりました。(最終的にcsvファイルとして保存、アップロードをします)
altの文字列削除の理由ですが、現在商品とは直接関係の無い文章が入っているページがあり、そちらが今後ペナルティとなることが決まったため、取り急ぎ削除を進めていた次第です。削除後はalt=""の中に商品名のみを反映する予定です。

皆様にご回答いただき本当に助かりました!有難うございます!
(im) 2016/08/19(金) 14:20


何度も申し訳ございません。
いただいたマクロで半分以上のページは問題なく変換が出来ましたが
いくつかのページでエラーが発生いたしました。

【元データ】
<!--画像一枚 表示 --> <div class="spaceU15"><img src="http://画像.jpg" style="border-style:none;" alt="★★★" /></div> <!--画像一枚 終了 --><BR><BR><h1><font size="-1">商品名    <font color="#cc0000">商品説明文

【変換後】
<!--画像一枚 表示 --> <div class="spaceU15"><img src="http://画像.jpg" style="border-style:none;" alt="" /></div> <!--画像一枚 終了 ="-1">商品名  <font color="#cc0000">商品説明文

と、上記のようにalt"★★★"の★★★は上手く消えたのですが
<!--画像一枚 終了 --><BR><BR><h1><font size="-1">商品名 が
<!--画像一枚 終了 ="-1">商品名 というように変わってしまいました。

何度も何度も本当に申し訳ございませんが
上記はどのようにすれば解決できますでしょうか。。

また、エラーが出る度にお伺いするのも申し訳ないので
エクセル以外で上記のような処理が一括で可能なものを
ご存知の方がいらっしゃればご教示いただけますと幸いです。
(im) 2016/08/23(火) 21:23


こんばんは

間違いが有りました。

Function test(r As Range) As Variant

    Dim v As Variant
    Dim i As Long
    Dim j As Long
    Dim k As Long
    If r.Value <> "" Then
        v = Split(r.Value, "=""")
        j = UBound(v)
        For i = 0 To j - 1
            If Right(v(i), 3) = "alt" Then
                k = InStr(1, v(i + 1), """")
                If k > 0 Then
                    v(i + 1) = Mid(v(i + 1), k, Len(v(i + 1)))
                End If
            End If
        Next
    End If
    test = Join(v, "=""")
End Function

に差し替えて下さい。

(ウッシ) 2016/08/24(水) 00:49


ウッシさま 早々に返答いただき本当に有難うございます。無事処理が完了致しました!

そして上記でも少し触れておりましたが、削除したalt=""の""の間に
特定の文字(B列に入力されている文字)を挿入したいと考えております。
マクロでの作業になる場合、またアドバイスをいただけますと幸いです。。
(im) 2016/08/24(水) 18:34


こんばんは

Function test(r As Range, t As Range) As Variant

    Dim v As Variant
    Dim i As Long
    Dim j As Long
    Dim k As Long
    If r.Value <> "" Then
        v = Split(r.Value, "=""")
        j = UBound(v)
        For i = 0 To j - 1
            If Right(v(i), 3) = "alt" Then
                k = InStr(1, v(i + 1), """")
                If k > 0 Then
                    v(i + 1) = t & Mid(v(i + 1), k, Len(v(i + 1)))
                End If
            End If
        Next
    End If
    test = Join(v, "=""")
End Function

セルA1に変換元文字列、B1に特定の文字とすると、セルC1に

=test(A1,B1)

で。

(ウッシ) 2016/08/24(水) 23:07


ウッシさま

いつも早々にお返事をいただき有難うございます!
無事、追加も完了致しました!万が一エラーが出た場合は
またご相談させていただくかもしれませんが…
この度は本当に本当に助かりました!!!
私もこれからマクロの勉強を始めてみようと思います。
本当に有難うございました!
(im) 2016/08/25(木) 16:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.