エクセル2007(Excel2007)の質問です。

HTMLの中に「他のセルの文字列」を結合させて、一つのセルに文字列として表示される方法が知りたいです。

(※長いので「コメント」欄に続きを書いています。よろしくおねがいします。)

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/10/03 23:11:43
  • 終了:2014/10/04 12:21:36

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4488ベストアンサー獲得回数18572014/10/03 23:54:49

ポイント500pt

文字列を結合するには、

="文字列" & J4 & "文字列" & L4 & "文字列" ...

という感じに、

  • = で始める
  • 固定の文字は、ダブルクォートで括る

というふうにする必要があるのですが、式の長さが 255 文字まで、という制限があるので、質問にある HTML は、この長さを超えてしまうので、このやり方では上手くいきません。

そこで、substitute 関数を使って、特定の文字を置き換える、というふうにやります。

  1. テンプレの HTML の文字列を、仮に Z1 に置きます。
  2. 他のセルの値で置き換えたい箇所を、@@1、@@2 というふうにしておきます。
  3. substitute 関数で、@@1 を J4 に、@@2 を L4 に置き換える、というふうに書きます。

Z1 は、こんな感じ。

<center><font color=#003300 size=5><b>@@1</b></font><br><br><table width=600 cellpadding=2 cellspacing=2 bgcolor=#669900><tr><td bgcolor=#FFFFFF><table cellspacing=3 cellpadding=4 border=0 width=100%><tr><td bgcolor=#DEEFA5 colspan=2 align=left><b><font color=#000000 size=3>□説明</font></b></td></tr><tr><td width=5%></td><td width=95% align=left><font color=#000000 size=3><b>@@1</b><br><br>好物:@@2<br>寿命:@@3<br>英名:<b><font size="4" color="red">@@4</font></b><br><br></font></td></tr></table></td></tr></center>

@@数字は、分かりやすいように色を付けているだけです。

K4 は、こんな感じです。

=substitute(substitute(substitute(substitute($Z$1,"@@1",J4),"@@2",L4),"@@3",M4),"@@4",O4)

substitute(置き換えられる文字列、置き換えたい文字列、置き換える文字列) を、四回 入れ子にしてます。

また、そのとき(一つのセルK4に文字列を表示するとき)に、
●行の高さが広くなったりしないで、そのままの高さ
で表示されると理想的です。

これは、K 列を選択して、「折り返して全体を表示する」を、オフにします。

  • リボンの「ホーム」で、真ん中くらいにある「折り返して全体を表示する」をクリック
  • 右クリックのセルのプロパティで、「配置」タブの「折り返して全体を表示する」のチェックを外す

の、どちらかで、できます。

id:egaosaiko

a-kuma3さんへ

素早く、かつ素晴らしいご回答ありがとうございます。

そうなんです!
こういうことがしたかったんですよ!

しかも私でも色々応用ができそうです。
実際にK列は4行目以降(5行~)でも文字列結合したかったので、
フィルハンドルからドラッグすればいいだけなのがとても簡単で助かります。


【substitute】関数自体を知らなかったので、自分にはけして思いつかない文字列結合でした。ありがとうございます。

2014/10/04 01:07:05
  • id:egaosaiko
    例えば、以下のようにセルにデータがあるとします。
    (列が紛らわしいですが、HTMLを表示したいのはK列です。
    また、結合したいセルも、結合させた結果を表示したいのも同じ一つの行での話になります。)


    J4:猫
    L4:魚
    M4:15歳くらい
    O4:Cat
    K4(これはエラーになってしまうのですが、いろいろ試行錯誤してここまでしか出来なかったのでニュアンスとして伝われば幸いです。→):<center><font color=#003300 size=5><b>&J4&</b></font><br><br><table width=600 cellpadding=2 cellspacing=2 bgcolor=#669900><tr><td bgcolor=#FFFFFF><table cellspacing=3 cellpadding=4 border=0 width=100%><tr><td bgcolor=#DEEFA5 colspan=2 align=left><b><font color=#000000 size=3>□説明</font></b></td></tr><tr><td width=5%></td><td width=95% align=left><font color=#000000 size=3><b>&J4&</b><br><br>好物:&L4&<br>寿命:&M4&<br>英名:<b><font size="4" color="red">&O4&</font></b><br><br></font></td></tr></table></td></tr></center>

    ※HTMLは、下のようなサイトに貼り付けて見ていただけると助かります。
      ↓↓↓
    http://www4.plala.or.jp/htmltag/newpage9.html



    そして、K4のHTMLの中にJ4、L4、M4、O4の文字列をそれぞれ結合させることが出来たら以下のようにK4に表示されると理想的です。
    ↓↓↓
    K4:<center><font color=#003300 size=5><b>猫</b></font><br><br><table width=600 cellpadding=2 cellspacing=2 bgcolor=#669900><tr><td bgcolor=#FFFFFF><table cellspacing=3 cellpadding=4 border=0 width=100%><tr><td bgcolor=#DEEFA5 colspan=2 align=left><b><font color=#000000 size=3>□説明</font></b></td></tr><tr><td width=5%></td><td width=95% align=left><font color=#000000 size=3><b>猫</b><br><br>好物:魚<br>寿命:15歳くらい<br>英名:<b><font size="4" color="red">Cat</font></b><br><br></font></td></tr></table></td></tr></center>


    あくまで、
    K4にHTMLとしてではなく【文字列】としての結果を一つのセル(K4)に入力されるようにしたいのですが、
    これは可能でしょうか?

    また、そのとき(一つのセルK4に文字列を表示するとき)に、
    ●行の高さが広くなったりしないで、そのままの高さ
    で表示されると理想的です。


    方法を知ってる方がいましたら教えていただきたいです。

    VBAを使っても構いませんので、その際にはVBAコード自体をご教授ねがいます。



    ※また説明がややこしいと思いますので、
    何か分かりにくいところがありましたら、
    このページでコメントをお願いします。

  • id:Yoshiya
    Sub Sample()

    If Range("J4") <> "" And Range("L4") <> "" And Range("M4") <> "" And Range("O4") <> "" Then
    Range("K4") = "<center><font color=#003300 size=5><b>" & Range("J4") & _
    "</b></font><br><br><table width=600 cellpadding=2 cellspacing=2 bgcolor=#669900>" & _
    "<tr><td bgcolor=#FFFFFF><table cellspacing=3 cellpadding=4 border=0 width=100%>" & _
    "<tr><td bgcolor=#DEEFA5 colspan=2 align=left><b>" & _
    "<font color=#000000 size=3>□説明</font></b></td></tr><tr><td width=5%></td>" & _
    "<td width=95% align=left><font color=#000000 size=3><b>" & J4 & _
    "</b><br><br>好物:" & Range("L4") & "<br>寿命:" & Range("M4") & _
    "<br>英名:<b><font size=""4"" color=""red"">" & Range("O4") & _
    "</font></b><br><br></font></td></tr></table></td></tr></center>"
    End If
    End Sub
  • id:egaosaiko
    Yoshiya さんへ

    コメントをいただき、ありがとうございます。
    ご丁寧にマクロコードを書いて下さり、ありがたいです。


    さっそくコードを試させていただきました。
    私が書いた分かりにくい説明に対して、やりたいことを完璧に実現してくれていますね!
    通りすがりでコードだけ残していくなんて、なんかかっこいいです。

    私もこんな風に、コードを書けるようになりたいと思いました。
    ありがとうございました。
  • id:Yoshiya
    ちょっとだけ修正しました。

    4列目から連続してセルにデータが入っていると仮定して、ループ処理を追加しました。

    Sub Sample()

    Dim lp As Long
    Dim StartRowNo As Long
    Dim EndRowNo As Long

    StartRowNo = 3
    EndRowNo = Range("J4").End(xlDown).Row - 1

    For lp = StartRowNo To EndRowNo
    If Range("J1").Offset(lp) <> "" And Range("L1").Offset(lp) <> "" And Range("M1").Offset(lp) <> "" _
    And Range("O1").Offset(lp) <> "" Then
    Range("K1").Offset(lp) = "<center><font color=#003300 size=5><b>" & Range("J1").Offset(lp) & _
    "</b></font><br><br><table width=600 cellpadding=2 cellspacing=2 bgcolor=#669900>" & _
    "<tr><td bgcolor=#FFFFFF><table cellspacing=3 cellpadding=4 border=0 width=100%>" & _
    "<tr><td bgcolor=#DEEFA5 colspan=2 align=left><b>" & _
    "<font color=#000000 size=3>□説明</font></b></td></tr><tr><td width=5%></td>" & _
    "<td width=95% align=left><font color=#000000 size=3><b>" & J4 & _
    "</b><br><br>好物:" & Range("L1").Offset(lp) & "<br>寿命:" & Range("M1").Offset(lp) & _
    "<br>英名:<b><font size=""4"" color=""red"">" & Range("O1").Offset(lp) & _
    "</font></b><br><br></font></td></tr></table></td></tr></center>"
    End If
    Next lp
    End Sub
  • id:egaosaiko
    Yoshiyaさんへ

    さらに実用的なコードを教えていただきありがとうございます。


    説明文には4行目だけが処理対象のように書いたのですが、
    5行目からも文字列結合したいなと思っていましたので、非常にありがたいです。


    VBAマクロは地道にしか身についていかない分野だと思うので、
    コードを書ける人は尊敬してしまいます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません