• 締切済み

エクセルのマクロで再度質問

エクセルのマクロの件 再度質問です。 昨日、以下の質問をした者です。 =========================================================================== エクセルにはセルA~Mまでデータが入っています。(件数的にはかなりの量です) そこでマクロを使ってセルN内に以下のようなHTMLを入れたいです。 <div align="center"><b>【Dのセル】</b></div> <div align="center"><a rel="nofollow" href="【Hのセル】"><img src="【Iのセル】" border="0" alt="【Cのセル】"></a></div> <div align="center"><a rel="nofollow" href="【Hのセル】">【Cのセル】</a></div> 【Eのセル】 【Fのセル】 <!--【Aのセル】【Bのセル】--> =========================================================================== そこで、サンプルとして以下のマクロを教えてもらいました。 質問ですが、これを繰り返すにはどうすればいいでしょうか? (N2以降、N3N4・・・も同じように表示するには) Sub test()  Dim st As String, s As String, stmp As String  Dim sht As Worksheet, rw As Long, col As Long  st = "<div align='center'><b>$4</b></div>@<div align='center'><a rel='nofollow' href='$8'><img src='$9' border='0' alt='$3'></a></div>@<div align='center'><a rel='nofollow' href='$8'>$3</a></div>@$5@$6@<!--$1$2-->"  st = Replace(Replace(st, "@", Chr(10), 1, -1, 1), "'", Chr(34), 1, -1, 1)  Set sht = ActiveSheet '//現在のシートを設定 '------- 1行分の処理 ----  rw = 2 '//処理対象の行番号(2行目に設定)  s = st '//雛型の文字をコピー  For col = 1 To 9 '//A~I列までをループ(col=列番号)   stmp = "$" & Format(col, "#")    '//各セルの内容で置換え   s = Replace(s, stmp, sht.Cells(rw, col).Text, 1, -1, 1)  Next col  sht.Cells(rw, 14).Value = s '//結果をN列に入れる End Sub

  • siraku
  • お礼率54% (276/508)

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.1です。 以前の質問を参照したいのであれば、 http://okwave.jp/qa4469670.html とする方がわかりやすいと思います。 (質問・回答の内容がわかりますので)

siraku
質問者

補足

n-junさん こんにちは、仰るとおりでした。 また、この質問は解決できていませんのでSub test()~End Sub内を全て教えていただけると助かります。 よろしくお願いします。

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

sirakuさん、こんにちは QNo.4469670の最初の回答でもお答えしてありますように、行についてループするだけです。 (もともとの回答が、ループしやすいように作成したつもりです。) たまたま、列(col)のループがその内側にありますので、それを参考にして ください。 あと、追加で気が付いたのですが・・・ 万一、セルの指定文のなかに「$+数字」があると置換えの際に、そちらも置き換えてしまう可能性が残っていますので、最初に、雛型の文章の$をキー入力できない文字(例えばChr(27)=ESCなど)に変換しておいて、あとの置換えはそれを対象に行うほうが確実でしたね。 (stmp = Chr(27) & Format(col, "#")などとして、再置換え) 要領は、もとの回答のままですので、適宜アレンジしてください。 また、QNo.4469670でもふれましたように、マクロ化しても軽くならない可能性もあります。 ついでながら、先の質問をクローズしてから次の質問をすることと規約にありますよ。

siraku
質問者

お礼

fujillinさん ご回答ありがとうございます。 今、いろいろと試したのですが構文エラーになってしまいました。 すいませんが、Sub test()~End Sub内を全て教えていただけないでしょうか? お手数お掛けしますが、よろしくお願いします。 それと前回の質問は締め切りしておきました。 (そんな規約があったとは知りませんでした)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>rw = 2 '//処理対象の行番号(2行目に設定) 変数rwを固定ではなくループさせればいいのでは?

siraku
質問者

お礼

ご回答ありがとうございます。 すいませんが、どのように書けばいいのか分からないのでもう少し詳しく教えていただけないでしょうか?

関連するQ&A

  • エクセル マクロ ループで?

    度々すいません。マクロはほぼ初心者ですがよろしくお願いします。 前回の質問で、ある程度教えていただいたのですがループさせる方法がよくわかりません。 http://okwave.jp/qa4469670.html サンプルでコードは Sub test()  Dim st As String, s As String, stmp As String  Dim sht As Worksheet, rw As Long, col As Long  st = "<div align='center'><b>$4</b></div>@<div align='center'><a rel='nofollow' href='$8'><img src='$9' border='0' alt='$3'></a></div>@<div align='center'><a rel='nofollow' href='$8'>$3</a></div>@$5@$6@<!--$1$2-->"  st = Replace(Replace(st, "@", Chr(10), 1, -1, 1), "'", Chr(34), 1, -1, 1)  Set sht = ActiveSheet '//現在のシートを設定 '------- 1行分の処理 ----  rw = 2 '//処理対象の行番号(2行目に設定)  s = st '//雛型の文字をコピー  For col = 1 To 9 '//A~I列までをループ(col=列番号)   stmp = "$" & Format(col, "#")    '//各セルの内容で置換え   s = Replace(s, stmp, sht.Cells(rw, col).Text, 1, -1, 1)  Next col  sht.Cells(rw, 14).Value = s '//結果をN列に入れる End Sub です。 マクロを実行するとセルN2に出力されます。これをN2以降、N3N4・・・も表示されるようにしたいです。 rw = 2 '//処理対象の行番号(2行目に設定)を固定させないでループすればいいようなのですが、どのようにすればいいのでしょうか? Sub test()~End Sub内全てを教えていただけないでしょうか? よろしくお願いします。

  • エクセルのマクロの事で質問です。

    エクセルのマクロの事で質問します。 エクセルにはセルA~Mまでデータが入っています。(件数的にはかなりの量です) そこでマクロを使ってセルN内に以下のようなHTMLを入れたいです。 <div align="center"><b>【Dのセル】</b></div> <div align="center"><a rel="nofollow" href="【Hのセル】"><img src="【Iのセル】" border="0" alt="【Cのセル】"></a></div> <div align="center"><a rel="nofollow" href="【Hのセル】">【Cのセル】</a></div> 【Eのセル】 【Fのセル】 <!--【Aのセル】【Bのセル】--> 以前いろいろと教えてもらったのですが、まだ自分では解決できそうにありません。 どなたか、ご指導のほどよろしくお願いします。

  • マクロでhtml出力?

    先日、マクロの件で質問した者です。 http://oshiete1.goo.ne.jp/qa4473686.html 良回答のlulさんのコードを参考にしています。 質問1 下記のコードではV列にhtmlが表示されるようになっています。 (エクセルにはAからTまでデータが入っています) 今回はセルV列にhtmlを表示するのではなくエクセルシートが置いてあるフォルダに各htmlを出力したいのですがどこをどのように変更すればいいのでしょうか? (ちなみに、C列にあるものをファイル名とします) 質問2 また、フォルダ名を指定してそのフォルダに出力する場合も教えてください。 よろしくお願いします。 Sub htmlを作成() Const LFeed As String = vbCrLf Dim st As String Dim sht As Worksheet, i As Long, obj Set sht = ActiveSheet '//現在のシートを設定 Dim MaxRow As Long MaxRow = Range("A65536").End(xlUp).Row For i = 1 To MaxRow If Cells(i, 1) <> "" Then Set Grammar = Nothing 'HTML1行ずつ記載 st = "" st = st & "<html lang='ja'>" & LFeed st = st & "<head>" & LFeed st = st & "</head>" & LFeed st = st & "<body>" & LFeed 途中省略 st = st & "</body>" & LFeed st = st & "</html>" & LFeed st = Replace(st, "'", Chr(34), 1, -1, 1) sht.Cells(i, 22).Value = Mid(st, 1, Len(st) - 1) '//結果を V列に入れる(他の場合はそのように変更する) End If Next i End Sub

  • HTMLの質問です。画像を並べて名称を表記します。

    ホームページビルダーで作成しました。 今回の例では画像を横4枚、縦2段に並べて画像下にテキストを表記します。 各画像にはリンクを貼っています。 ところが画像下のテキストの右端だけがダブって表記されます。 具体的にはタイトル4とタイトル8というテキストです。 問題点が分かる方はご教授願います。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>ホームページのタイトル</title> <link rel="stylesheet" type="text/css" href="hpb9tm04_8.css" id="hpb9tm04_8" a:link {       text-decoration:underline;       color:#0000FF;       }       a:visited {       text-decoration:underline;       color:#9900CC;       }       a:active {       text-decoration:underline;       color:#00FF00;       }       a:hover {       text-decoration:underline;       color:#00FF00;       position:relative;top:3px;left:3px;       }</style> </head> <body style="color: #000000; background-color: #ffffff" background="壁紙画像"> <div> <table class="hpb-main" id="HPB_LAYOUTTABLE_05" cellspacing="0" cellpadding="0" width="760" border="0"> <tbody> <tr> <td class="hpb-cnt-cell1" id="HPB_LAYOUT_LMH0" valign="top" align="center" height="18"> <table class="hpb-hmenu1" id="HPB_LINK_MENU_TABLE_01" cellspacing="0" cellpadding="0" align="center" border="0"> </table> </td> </tr> <tr> <td class="hpb-cnt-cell3-x" valign="top" align="center"><div style="float:left"><img height="43" alt="ホームページのタイトル" width="232" border="0" src="ホームページのタイトル画像" />&nbsp; <table class="hpb-lb-tb1" cellspacing="0" cellpadding="0" align="center" border="0"> <tbody> <tr> <td class="hpb-lb-tb1-cell3" id="HPB_LAYOUT_CONTENTS" valign="top" height="400"> <p><div style="float:left"><img height="37" alt="ホームページのサブタイトル" width="510" border="0" src="ホームページのサブタイトル画像" /></p> <p> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル1" width="140" border="0" src="画像" /><br />タイトル1</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル2" width="140" border="0" src="画像" /><br />タイトル2</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル3" width="140" border="0" src="画像" /><br />タイトル3</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル4" width="140" border="0" src="画像" /><br />タイトル4</div></a> <div style="clear:both"></div></p> <p> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル5" width="140" border="0" src="画像" /><br />タイトル5</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル6" width="140" border="0" src="画像" /><br />タイトル6</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル7" width="140" border="0" src="画像" /><br />タイトル7</div></a> <a target="_blank" rel="nofollow" リンク先URL"><div style="float:left"><img height="210" alt="タイトル8" width="140" border="0" src="画像" /><br />タイトル8</div></a> <div style="clear:both"></div></p> <p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </div> </body> </html>

    • ベストアンサー
    • HTML
  • ファイルを開き、シートをコピーするマクロについての質問です。

    VBA初心者の者です。解決法が分からないのでよろしくお願いします。 以下のことがマクロを用いて行いたいと思ってます。 (1)まず、シート1からnまであるデータの入ったファイル【以下、ファイル1】を指定して開き、それを別のシート1からnまであるファイル【以下、ファイル2】を指定して開きます。 (2)ファイル1の各々のシートからファイル2のおのおののシートにデータをコピーしたいと思っています。ただし、コピーするのは、ファイル1のシート1からファイル2のシート1、ファイル1のシート2からファイル2のシート2に、・・・、ファイル1のシートnからファイル2のシートnまでループさせたいです。 一応、自分で以下のようにマクロを組んでみましたが、上手く動きません。どこが違うのかをご指摘いただきたいです。 よろしくお願いします。 Public sh As Integer Public sht_n As Integer Public Lst As Integer Sub Macro1() Dim file1 As String file1 = Application.GetOpenFilename(Title:="ファイルを選択して下さい") If file1 = "" Or file1 = "false" Then MsgBox "ファイルOPEN不可", vbCritical End Else Workbooks.Open Filename:=FN1 End If Dim file2 As String file2 = Application.GetOpenFilename(Title:="ファイルを選択して下さい") If file2 = "" Or file2 = "false" Then MsgBox "ファイルOPEN不可", vbCritical End Else Workbooks.Open Filename:=FN2 End If sht_n = ActiveWorkbook.Sheets.Count Lst = sht_n + 1 For sh = 1 To sht_n Call CpSh(sh) Next sh End Sub Sub CpSh(s) Dim st As String st = Sheets(s).Name Sheets(st).Select Workbook("FA1").Activate Sheets("st").Select Cells.Select Selection.Copy Workbook("FA2").Activate Sheets("st").Select Range("A1").Select ActiveSheet.Paste End Sub

  • エクセルVBAでのエラーの対処方法

    よろしくお願いします。 A1:1 B1:あ A2:2 B2:い A3:3 B3:う と書いてあるまとめシートと、1、2、3というシートがあるとします。 シート1のA1セルに「あ」、シート2のA1セルに「い」、シート3のA1セルに「う」と書き込まれるように、まとめA列の文字列からシート名を呼び出して書き込むようにVBAを組んでいます。 Dim sht_n As Variant Dim sht_c As Integer i = 7 sht_n = Worksheets("まとめ").Index sht_c = ThisWorkbook.Sheets.Count For sht_n = sht_n + 1 To sht_c Step 1 If Cells(i, 1).Value = "" Then i = i + 1 Else wb = Cells(i, 1).Value Worksheets("まとめ").Cells(i,2).Select Selection.Copy ThisWorkbook.Worksheets(wb).Activate Range("A1").Select Selection.PasteSpecial Paste:=xlValues こんな感じ。 下手なのは分かってます。あと、現在使っているものから書き出しているので間違えてる部分もあるかもしれません。 この状態だと、シート1がない場合にはエラーが出てしまって、そこで終わってしまいます。 まとめシートが空欄の場合はエラーを回避しているのですが、シートがない場合の回避方法が分かりません。 On Error Resume Nextは使わずに、シートがない場合にエラーを回避する方法はありますでしょうか。 分かるかた、よろしくお願いします。

  • HTMLタグについて

    <!-- #EndEditable --> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" href="古いデーター/text.css" type="text/css"> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="5" marginwidth="0" marginheight="5"> <table width="760" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td><div align="center"><img src="toppu2.gif" width="700" height="92"></div></td> </tr> </table> <div align="center"> <table width="760" border="0" cellspacing="0" cellpadding="0"> <tr> <td><div align="center"><img src="botan4.gif" width="700" height="57" border="0" usemap="#Map6"></div></td> </tr> <tr> <td><div align="left"><!-- InstanceBeginEditable name="contents" --> _________________________  上記のタグで 【<link rel="stylesheet" href="古いデーター/text.css" type="text/css"> 】が文字化けしてるから可笑しいと思うのですが、これを テンプレート上で下記のように修正してもエラーが出て 上手くいきません。 <link rel="stylesheet" href="../../text.css" type="text/css">  この他におかしい部分が多分あると思うのですが、 そこをお教えください。  宜しくお願い致します。

  • テーブルの最後のレコードしか表示されない

    すごく初歩的な質問だと思い申し訳ないのですがご教授下さい。 タイトル通り、テーブルの最後のレコードしか表示されないのです。 この前までは全て表示できていたのですが、 どこをどういじったのか、このようなことになってしまいました。 itemというテーブルには53個登録があり、53番目のものしか表示されません… $sql = "select * from item order by id"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $dbt = "<tr bgcolor='#FFFFFF'> <td align='center'><a href='use.php?key=".$col["name"]."'>".$col["name"]."</a></td> <td align='center'>".$col["name1"]."</td> <td align='center'>".$col["name2"]."</td> <td align='center'>".$col["name3"]."</td> <td align='center'>".$col["name4"]."</td> <td>".nl2br($col["name5"])."</td> <td align='center'>".$col["name6"]."</td> </tr>"; } mysql_free_result($rst); $con = mysql_close($con); それと、もう一つ解決したいことがあるのですが、 <a href='use.php?key=".$col["name"]."'>".$col["name"]."</a> のようにアンカーを張り、次のページに変数を渡す方法で、use.php?key=*****のように、表示させないことは可能でしょうか? 見た目にも悪いですし、セキュリティ上も好ましくないかと思いまして方法があればと思いました。

    • ベストアンサー
    • MySQL
  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

  • マクロについて質問です

    以前以下のようなコードを教わった物です。 Sub 引用文作成() 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 Row = 2 To Cells(Rows.Count, 1).End(xlUp).Row Print #1, "●"; Cells(Row, 1) & "...<a href=""" & Cells(Row, 2) & """ target=""_blank"">続きはこちら</a><br>---<br>" Next Close #1 Shell "notepad.exe C:\test.tmp", vbNormalFocus End Sub この場合、Aのセルに文章を入れ、Bの文章にURLると ●文章1...<a href="http://123.com/" target="_blank">続きはこちら</a><br>---<br> ●文章2...<a href="http://123.com/" target="_blank">続きはこちら</a><br>---<br> このように出力してくれますが、これを次のように出力する場合はどのようにすればいいでしょうか? Aのセルにタイトル、BのセルにURL、Cのセルに文章を入れて以下のようなリンク集っぽいのを作りたいです。 <p>●<a href="http://123.com/" target="_blank">タイトル1</a><br> 文章</p> <p>●<a href="http://123.com/" target="_blank">タイトル2</a><br> 文章</p> Cells(Row, 3)を追加して色々と試したのですがどうも上手くいきません。 よろしくお願いします。

専門家に質問してみよう