プロが教える店舗&オフィスのセキュリティ対策術

会社リストからHTMLファイルを作成しています。
1つの地域で1つのファイルにしています。
地域によっては会社数が多くなってきたので、
20社ごとにファイルを別にして出力したいと考えております。

tokyo
tokyo2
tokyo3
tokyo4
 ・
 ・
 ・

G列のファイル名を20社ごとに変換するには
以下のソースをどのように改良すれば良いのか、ご教授願います。

Sub HTMLファイル出力()
Dim myPath As String
Dim i As Long
myPath = Environ("USERPROFILE") & "\Desktop\Hoge\"
Range("A:G").Sort Key1:=Range("G2"), Header:=xlYes, MatchCase:=False, _
Orientation:=xlTopToBottom
For i = 2 To Range("G1").End(xlDown).Row
If Range("G" & i).Text <> Range("G" & i - 1).Text Then
Open myPath & Range("G" & i).Text & ".html" For Output As #1
Print #1, "<!DOCTYPE html>" & vbNewLine _
& "<html lang=""en"">" & vbNewLine _
& "<body>" & vbNewLine _
& "<div class=""span3"" id=""sidebar"">" & vbNewLine
End If
Print #1, "<div class=""widget"">" & vbNewLine _
& "<h4 class=""widgetTitle"">" & Range("A" & i).Text & "</h4>" & vbNewLine _
& "<ul><li>" & Range("B" & i).Text & "</li>" & vbNewLine _
& "<li>" & Range("C" & i).Text & "</li>" & vbNewLine _
& "<li>" & Range("D" & i).Text & "</li>" & vbNewLine _
& "<li>" & Range("E" & i).Text & "</li></ul></div>" & vbNewLine
If Range("G" & i).Text <> Range("G" & i + 1).Text Then
Print #1, "</div>" & vbNewLine & "</body>" & vbNewLine & "</html>"
Close #1
End If
Next
End Sub

「エクセルVBAでリストを仕分けしてファイ」の質問画像

A 回答 (2件)

現在のコードだと列Gの値で1社ずつの別ファイルで出力される。


これを20社で1ファイルとしたい。
で合ってます?

> If Range("G" & i).Text <> Range("G" & i - 1).Text Then

> If Range("G" & i).Text <> Range("G" & i + 1).Text Then
の行で会社が変ったことを判断しています。
なのでここに手を加える。

ここでカウンタを数え、20以内ならファイルオープン・クローズ操作しない。
20の倍数(カウンタ Mod20 =0)ならファイルオープン・クローズする。
ファイル名は”tokyo” & trim(カウンタを20で割った商(整数)+1)
クローズ時にはカウンタをリセットする。
Forループ終了時にカウンタの20の剰余を判断し、0でなければクローズ操作する。
(不要なのは会社数が20の倍数の時にループ内でクローズしてる場合)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
当方、まったくの初心者なのです。
*カウンタを数え、20以内なら・・
*ファイルオープン・クローズ操作しない・・
*クローズ時にはカウンタをリセット・・
*Forループ終了時にカウンタの20の剰余を判断し・・
何をどうすればよいのか分からない状態です。
お手上げ状態です。

お礼日時:2014/10/12 17:49

HTML部分は自力で頑張って下さい。



カウンタはForループの添字[i]から1を引くことで求められます。
if の条件に
AND (i - 1)Mod 20 ) = 0
を加えて下さい。



小生、タブレットの手書き入力なので「全文書いて」にはお応えしかねまする。
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速チャレンジしてみます。

お礼日時:2014/10/12 23:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!