• ベストアンサー

マクロを使ってこんな事って出来ますか?

エクセルでこんな事できるでしょうか? Aのセルにカテゴリ名 Bのセルにタイトル CのセルにURL を入力しておき マクロを使って <b>カテゴリ1</b> <ol> <li><a href="http://123.com/>テスト1</a> <li><a href="http://aaa.com/">テスト2</a> </ol> <b>カテゴリ2</b> <ol> <li><a href="http://456.com/">テスト3</a> <li><a href="http://bbb.com/>テスト4</a> </ol> このようにしたいですが出来るでしょうか? 自分なりにエクセルのセルにタグを入力してマクロの記録を使ってやってみたのですが、どうしても思うようにいきません。 マクロに詳しい方、どうか教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。 既ご回答と同じ内容なのですが、カテゴリ分けの処理をしています。  1. マクロを実行する前に、カテゴリでデータを並べ替えておく  2. マクロを実行すると、2行目から100行目のデータをメモ帳に    Html 出力します。 なるべく分かり易いようにシンプルに書きましたので、適当に修正 してみて下さい。  # 以前類似の質問を見かけた気がしますが、探せませんでした... Sub CreateHtml()      If Not TypeOf Selection Is Range Then Exit Sub      Dim i   As Long   Dim sPrev As String     Open "C:\test.tmp" For Output As #1      ' // Output html   sPrev = ""   For i = 2 To 100     If Not IsEmpty(Cells(i, "A")) Then       ' //       If sPrev <> Cells(i, "A").Value Then         Print #1, "<!-- Category -->"         Print #1, "<strong>" & Cells(i, "A").Value & "</strong>"         Print #1, "<ol>"         sPrev = Cells(i, "A").Value       End If       ' //       Print #1, " <li>";       Print #1, "<a href='" & Cells(i, "C").Value & "'>";       Print #1, Cells(i, "B").Value;       Print #1, "</a>"       ' //       If sPrev <> Cells(i + 1, "A").Value Then         Print #1, "</ol>"       End If     End If   Next   Close #1   Shell "notepad.exe C:\test.tmp", vbNormalFocus      End Sub

siraku
質問者

お礼

ご回答ありがとうございました。 大体解決できましたが、あと1つだけ教えてください。 上記で行った場合のURLですが  <li><a href='http://2.html'>キャベツ</a> こんな感じになります。 それを  <li><a href="http://2.html">キャベツ</a> このようにしたいです。 つまり 'を"にかえたいです。 簡単に出来るかと思ったのですが、思わぬことろでつまずきました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

No1です。変換した結果をセルに入力したいという理由が不明ですが・・・ No1の補足の例がシートの1行目から入っていて、A列、B列、C列がそれぞれカテゴリ、タイトル、URLとした場合の例を作りました。 (ロジックはNo4さんのをそのままお借りしています。)とりあえずD11のセルに結果が入りますが Sub CreateList()   Dim i As Long   Dim sPrev, sMes, cr As String   cr = Chr(10)   sMes = ""   sPrev = ""   For i = 1 To 100     If Not IsEmpty(Cells(i, 1)) Then       If sPrev <> Cells(i, 1).Value Then         sMes = sMes & "<b>" & Cells(i, "A").Value & "</b>" & cr & " <ol>" & cr         sPrev = Cells(i, 1)       End If       sMes = sMes & "  <li><a href=""" & Cells(i, 3).Value & """>"       sMes = sMes & Cells(i, 2) & "</a></li>" & cr       If sPrev <> Cells(i + 1, 1).Value Then         sMes = sMes & " </ol>" & cr       End If     End If   Next i   Cells(11, 4).Value = sMes End Sub ただし、セル入力には文字数の制限があったはずですので、データが多いと入りきらなくなります。 結局はNo4の方法でファイルに直接書き出すのが良いと思われます。 「’」はそのままでhtml上は問題はないはずですが、どうしても直したければ上の例のようにすれば直ります。

siraku
質問者

お礼

ご回答ありがとうございます。 大変参考になりました。

すると、全ての回答が全文表示されます。
  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.3

No.2です。 記述ミスがありましたので補足です。 下から4行目、行末にダブルクォーテーションが抜けてました。 最下行に Print #1, "</ol>" を追加してください。

すると、全ての回答が全文表示されます。
  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.2

こんなサンプルで如何でしょうか   Range("A2").Select   Cat = Selection.Value   Print #1, "<b>" & Cat & "<b>"   Print #1, "<ol>"   With Selection   Do Until .Value = ""     If Cat <> .Value Then       Print #1, "</ol>"       Print #1, "<b>" & .Value & "</b>"       Print #1, "<ol>"       Cat = .Value     End If     Print #1, "<li><a href=""" & .Cells(1,3) & """>" & .Cells(1,2) & "</a>     .Cells(1,2).Select   Loop   End With

すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

出力先が不明ですが、エクセルにデータがあって。それをhtmlファイルにリスト形式で出力するものと仮定しました。 シートの1~3行にA~Cのデータがあり、1~N列分のデータセットがあるとします。 対象とするデータシートがtempSheetで、出力先をFileと仮定すれば、以下のような感じでしょうか。  For i = 1 To N   Print #File, "<b>"; tempSheet.Cells(1, i).Value; "</b><ol>"  Print #File, "<li><a href='"; tempSheet.Cells(3, i).Value; "'>";  Print #File, tempSheet.Cells(2, i).Value; "</a>"  Print #File, "</ol>"  Next i データがABCの3項目なので、カテゴリA、タイトルB(リンクC)の1項目のリストにしています。 上の例では2項目になっていましたが、データがABCDEとあるということなのかな?

siraku
質問者

補足

ご回答ありがとうございます。 説明不足で申し訳ありませんでした。 例えば Aカテゴリ | Bタイトル| CページのURL ----------------------------------------- 野菜   | 大根   | http://1.html ----------------------------------------- 野菜   | キャベツ | http://2.html ----------------------------------------- 肉    | 牛    | http://3.html ----------------------------------------- 肉    | 鳥    | http://4.html ----------------------------------------- 肉    | 豚    | http://5.html ----------------------------------------- 魚    | マグロ  | http://6.html ----------------------------------------- 魚    | ひらめ  | http://7.html ------ ----------------------------------- 魚    | 鯛    | http://8.html ----------------------------------------- このようなデータがあったとします。 これをどこでもいいのですが1つのセルの中に <b>野菜</b> <ol> <li><a href="http://1.html">大根</a></li> <li><a href="http://2.html">キャベツ</a></li> </ol> <b>肉</b> <ol> <li><a href="http://3.html">牛</a></li> <li><a href="http://4.html">鳥 </a></li> <li><a href="http://5.html">豚</a></li> </ol> <b>魚</b> <ol> <li><a href="http://6.html">マグロ </a></li> <li><a href="http://7.html">ひらめ </a></li> <li><a href="http://8.html">鯛</a></li> </ol> このようにデータを入れたいです。 セルは別にA4でもA5でも構いません。 簡単な物だったら =A1&B1&C1 こんな感じでやっていたのですが、上記のように複雑になると分かりません。 マクロを使って出来るのであれば教えてください。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A