• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル マクロ ループで?)

エクセルマクロでループさせる方法を教えてください

このQ&Aのポイント
  • エクセルのマクロを使ってループさせる方法を教えてください。現在のコードではセルN2に結果が表示されますが、N2以降のセルにも同じように結果を表示するためにはどうすればいいでしょうか?詳しいコード全体を教えてください。
  • エクセルのマクロを使用してループさせる方法を教えてください。現在のコードではセルN2に結果が表示されるようになっていますが、N2以降のセルにも同じ処理を行うためにはどのように変更すればよいのでしょうか?詳しいコードを教えてください。
  • エクセルのマクロを使ってループさせる方法を教えてください。現在のコードではセルN2に結果が表示されるようになっていますが、N2以降のセルにも同じように結果を表示するためにはどのように修正すればいいですか?具体的なコードの全体を教えてください。

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

  • ベストアンサー
  • lul
  • ベストアンサー率41% (10/24)
回答No.5

これで少しは分かりやすくなるのではないでしょうか? Sub test2() 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 = "<div align='center'><b>" & Cells(i, 4) & "</b></div>" & LFeed st = st & "<div align='center'><a rel='nofollow' href='" & Cells(i, 8) & "'><img src='" & Cells(i, 9) & "' border='0' alt='" & Cells(i, 3) & "'></a></div>" & LFeed st = st & "<div align='center'><a rel='nofollow' href='" & Cells(i, 8) & "'>" & Cells(i, 3) & "</a></div>" & LFeed st = st & Cells(i, 5) & LFeed st = st & Cells(i, 6) & LFeed st = st & "<!--" & Cells(i, 1) & Cells(i, 2) & "-->" st = Replace(st, "'", Chr(34), 1, -1, 1) sht.Cells(i, 14).Value = Mid(st, 1, Len(st) - 1) '//結果をN列に入れる End If Next i End Sub "(ダブルクォート)はやはり'(シングルクォート)で記載して後で置換える方が良いと思います。 他にもCollectionオブジェクトや、Textstreamオブジェクトを使うのも手ですが、今回は一番単純に分かりやすくなるように書いてます。 もっと分かりやすくする為にはHTMLの構文の所を設定ファイルとして外部で持って、それを読み込んで使うというのもありだと思うし、色々やり方はありますね。 後々楽に作業できるようにする為にも頑張ってくださいね。

siraku
質問者

お礼

lulさん ご回答大変ありがとうございます。 これで、思うような事ができます。 本当にありがとうございました。

その他の回答 (4)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

こんにちは。 以下のマクロを試してみてください。 Sub test()   Dim st As String, s As String, stmp As String   Dim sht As Worksheet, rw As Long, col As Long   Dim MaxRow As Long      With ActiveSheet  '//現在のシートを設定     MaxRow = .Range("A" & Rows.Count).End(xlUp).Row     For rw = 1 To MaxRow       If Cells(rw, "A") <> "" Then         '//雛型の文字を設定         st = "<div align=""center""><b>"         st = st & .Range("D" & rw) & "</b></div>@"         st = st & "<div align=""center""><a rel=""nofollow"" href="""         st = st & .Range("H" & rw) & """><img src="""         st = st & .Range("I" & rw) & """ border=""0"" alt="""         st = st & .Range("C" & rw) & """></a></div>@<div align=""center""><a rel=""nofollow"" href="""         st = st & .Range("H" & rw) & """>"         st = st & .Range("C" & rw) & "</a></div>@"         st = st & .Range("E" & rw) & "@" & .Range("F" & rw) & "@"         st = st & "<!--" & .Range("A" & rw) & .Range("B" & rw) & "-->"         st = Replace(Replace(st, "@", Chr(10), 1, -1, 1), "'", Chr(34), 1, -1, 1)         s = st '//雛型の文字をコピー         For col = 1 To 9  '//A~Iカラムまでをループ(col=列番号)           stmp = "$" & Format(col, "#")           '//各セルの内容で置換え           s = Replace(s, stmp, .Cells(rw, col).Text, 1, -1, 1)         Next         .Cells(rw, "N").Value = s '//結果をN列に入れる       End If     Next   End With End Sub

  • lul
  • ベストアンサー率41% (10/24)
回答No.3

こんにちは 以下のコードでご希望の処理になるのではないでしょうか。 Sub test() Dim st As String, s As String, stmp As String Dim sht As Worksheet, rw As Long, col As Long Dim MaxRow As Long MaxRow = Range("A65536").End(xlUp).Row 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 '//現在のシートを設定 For rw = 1 To MaxRow If Cells(rw, 1) <> "" Then '------- 1行分の処理 ---- 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 If Next rw End Sub 他の回答者様のを少しいじっただけですが…。

siraku
質問者

お礼

ご回答ありがとうございまいした。 思うように出来て大変感謝しています。 また、質問ついでにお聞きしたいのですがよろしいでしょうか? 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-->" これなんですが、今回はテンプレートが短かった為これでもいいのですが、複雑な物になると分かりにくいです。 そこで print "・・" & range("?") & "・・・" print "・・" & range("?") & "・・・" print "・・" & range("?") & "・・・" このようにする場合はどのようにすればいいでしょうか?

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

(1) 最後に以下の1行を追加するか  '  sht.Range("N" & rw & ":N100").FillDown '←追加 (N2~N100まで) (2) For で回すなら以下のようにしてください。 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 '//現在のシートを設定  s = st '//雛型の文字をコピー  For rw = 2 To 100 '←追加 (2~100行分の処理)   For col = 1 To 9 '//A~Iカラムまでをループ(col=列番号)    stmp = "$" & Format(col, "#")    '//各セルの内容で置換え    s = Replace(s, stmp, sht.Cells(rw, col).Text, 1, -1, 1)   Next   sht.Cells(rw, 14).Value = s '//結果をN列に入れる  Next End Sub

siraku
質問者

補足

pkh4989さん ご回答ありがとうございます。 今、試してみましたが失敗しました。 これで試すとN2N3N4・・・のセルは全て同じ内容が表示されてしまいます。 また(1)で試した方のが処理スピードが速い感じでした。 ●ちょっとしつこいようですが、もう一度質問を書いておきます。 ---------------------------------------------------------------- エクセルにはセル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のセル】--> ---------------------------------------------------------------- A~Mにデータが入っている行はN列に表示、A~Mにデータが入っていない場合は表示されないようにしたいです。 よろしくお願いします。

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

Sub Try() Dim rw As Long, col As Long For rw = 2 To 1000 '1000行目までとして For col = 1 To 9 '9列目までとして Cells(rw, col).Value = "abc" Next col Next rw End Sub 2行目から1000行目までの、1列目から9列目まで"abc"を代入してます。 ご参考程度に。