会社リストから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でリストを仕分けしてファイ」の質問画像

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRange("A" & x) + Range("A" & x+1) +

Range("A" & x) + Range("A" & x+1) + Range("A" & x+2) + ・・・ + Range("A" & x+n)

x:変数(基準点)
n:定数(A列のセルをいくつ足し併せるか、を指定。)


上記プログラムをループ的に行うには、どういう書き方をすれば良いでしょうか?
Do ~ Loop 文 などを使うのでしょうか。

お詳しい方、教えて下さい。
必ずお返事致します。

Aベストアンサー

>上記プログラムをループ的に行うには、どういう書き方をすれば良いでしょうか?
>Do ~ Loop 文 などを使うのでしょうか。
との質問には、#1のuruzさんが言われているように、For Nextが適していると思います。

ただ回す考え自体を除外してもよいのであれば、Sum関数を利用した方が、エリアが広い時は高速に処理を行う事が出来ます。


Option Explicit

Private Const x As Long = 1
Private Const N定数 As Long = 65535

Sub Test()
  Dim dbl1 As Double
  Dim dbl2 As Double
  Dim cur結果

  '----------------
  ' 検証1(回す)
  '----------------
  dbl1 = Now
  cur結果 = サンプル1(N定数)
  dbl2 = Now
  MsgBox "サンプル1(回す):" & cur結果 & vbTab & "計測時間" & dbl2 - dbl1

  '----------------
  ' 検証2(Sum)
  '----------------
  dbl1 = Now
  cur結果 = サンプル2(N定数)
  dbl2 = Now
  MsgBox "サンプル2(Sum):" & cur結果 & vbTab & "計測時間" & dbl2 - dbl1
End Sub

Function サンプル1(n As Long) As Currency
  Dim i As Long
  For i = 0 To n
    サンプル1 = サンプル1 + Range("A" & x + i)
  Next i
End Function

Function サンプル2(n As Long) As Currency
  Dim rng始点 As Range
  Dim rng終点 As Range
  Dim rng範囲 As Range
  
  Set rng始点 = Range("A" & x)
  Set rng終点 = rng始点.Offset(n)
  
  Set rng範囲 = Range(rng始点, rng終点)
  サンプル2 = WorksheetFunction.Sum(rng範囲)
End Function

>上記プログラムをループ的に行うには、どういう書き方をすれば良いでしょうか?
>Do ~ Loop 文 などを使うのでしょうか。
との質問には、#1のuruzさんが言われているように、For Nextが適していると思います。

ただ回す考え自体を除外してもよいのであれば、Sum関数を利用した方が、エリアが広い時は高速に処理を行う事が出来ます。


Option Explicit

Private Const x As Long = 1
Private Const N定数 As Long = 65535

Sub Test()
  Dim dbl1 As Double
  Dim dbl2 As Double
  Dim cur結果

  '...続きを読む

Qvb2005でからまでの値を取得したい。

お世話になります。
vb2005で<td>から</td>までの中の値を取得したいと思っています。(例:<td>abc</td>だとabc)

みなさんにお聞きして、コードを書いて
エラーのでない形にできたのですが、
msgboxに値が表示されず困っています。

どこを訂正すれば動くようになるのでしょうか?
教えてください。お願いします。


Imports System.Web.UI.HtmlControls


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

WebBrowser1.Navigate("http://up.spawn.jp/file/up25449.html")
Do While (WebBrowser1.IsBusy Or WebBrowser1.ReadyState <> WebBrowserReadyState.Complete)
My.Application.DoEvents()
System.Threading.Thread.Sleep(50)
Loop

Dim t As HTMLTable
Dim c As HtmlTableCell
Dim r As HtmlTableRow

Dim lngCno As Long, lngTno As Long

For Each t In WebBrowser1.Document.All.GetElementsByName("table")
lngCno = 0
For Each r In t.Rows
For Each c In r.Cells
lngCno = lngCno + 1
MsgBox("【Cells(" & lngCno & ") in Tables(" & lngTno & ") innerHTML】")
MsgBox(c.InnerHtml)
Next c
lngTno = lngTno + 1
Next r
Next t


End Sub
End Class

お世話になります。
vb2005で<td>から</td>までの中の値を取得したいと思っています。(例:<td>abc</td>だとabc)

みなさんにお聞きして、コードを書いて
エラーのでない形にできたのですが、
msgboxに値が表示されず困っています。

どこを訂正すれば動くようになるのでしょうか?
教えてください。お願いします。


Imports System.Web.UI.HtmlControls


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.C...続きを読む

Aベストアンサー

サンプルのURL「up25449.html」には、IDもNAMEもないので
「GetElementsByName」
での列挙式取得は利用できません。
ですので、
「GetElementsByTagName」
を利用しましょう。


ただ、そうなると
・HTMLTable
・HtmlTableCell
・HtmlTableRow
は利用できなくなると思います。(ここはたぶんです)

サンプルURLのページにはテーブルの中にテーブルが存在しているようなので、
「he_Table親」のループ中に「he_Table子」というので回しています。


Dim lngCno As Long, lngTno As Long

For Each he_Table親 As HtmlElement In WebBrowser1.Document.Body.GetElementsByTagName("TABLE")
  For Each he_Table子 As HtmlElement In he_Table親.GetElementsByTagName("TABLE")
    lngCno = 0
    For Each he_TR As HtmlElement In he_Table子.GetElementsByTagName("TR")
      For Each he_TD As HtmlElement In he_TR.GetElementsByTagName("TD")
        lngCno = lngCno + 1

        MsgBox(String.Format("【Cells({0}) in Tables({1}) InnerHtml】" & vbCrLf & "『{2}』", lngCno, lngTno, he_TD.InnerHtml))
      Next
      lngTno = lngTno + 1
    Next

  Next
Next

サンプルのURL「up25449.html」には、IDもNAMEもないので
「GetElementsByName」
での列挙式取得は利用できません。
ですので、
「GetElementsByTagName」
を利用しましょう。


ただ、そうなると
・HTMLTable
・HtmlTableCell
・HtmlTableRow
は利用できなくなると思います。(ここはたぶんです)

サンプルURLのページにはテーブルの中にテーブルが存在しているようなので、
「he_Table親」のループ中に「he_Table子」というので回しています。


Dim lngCno As Long, lngTno As Long

For Ea...続きを読む

QDim x As Integer = 0

いつもお世話になっております。

只今、本に記載してあるソースコードを手入力しています。
標記のように入力したら、『コンパイルエラー 修正候補:ステートメントの最後』というエラーが出ました。

(1)このエラーは無視してもよいのでしょうか?
(2)そもそも、変数の宣言文の後ろに=0をつけている意味がわかりません。当方VB初心者です。

よろしくお願いいたします。

Aベストアンサー

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsugi.ed.jp/vba4graduate/vba_hensuusyokika.htm
ーーー
定数のConstであればこういう書き方はOK
Sub test01()
Const x As Integer = 0
MsgBox x
End Sub
ーーー
VB.NETでは、OK
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim x As Integer = 10
MsgBox(x)
End Sub
ーー
Javaでは可能であるようです
http://msugai.fc2web.com/java/var2.html
ーーーーー
>ろに=0をつけている意味がわかりません
宣言と同時に値を与える=初期化する

この点は(変数の宣言と初期化は)言語による、と考えるべきです。
この質問は何の質問か。
VB系統らしいことは判るが
VB以外のBASIC
VB6
VBA
VB.NET系統
のどれか質問に書くべき。質問者は経験が無くて、視野がそこまで行かないのかも知れないが。
ーーー
VBAでは(多分VBでも同じ。テスト環境がないので)
Sub test01()
Dim x As Integer
x = 0
MsgBox x
End Sub
はOK
ーー
Sub test01()
Dim x As Integer =0
MsgBox x
はDim x As Integer =0
と入力した段階でエラー。
http://www.bunsug...続きを読む

QFOR文でtext1,text2,text3...などとどうやって処理させればいいのですか

超初心者な質問ですみません。
たとえばFOR文を使ってtext1~10まで連続に処理させるには
どういったコードを記述すればよいのでしょうか?
初心者用の本やHPを探しても見当たりませんでした。
お願いします。

Aベストアンサー

textエリアをインデックス配列にすればいいです。
Text1のエリアをファーム上でコピーし、貼り付けると
Text1(0)~ Text1(9) の配列になります。
それを
 
(例)

i =0
for i=0 to 9
text1(i) = x
next

のようにすればいいです。

QVB.NETで<Input>タグ、<textarea>タグに値を代入するには?

VB.NET+Javascriptでプログラミングしているのですが、HTMLに<input>タグ(type=text)、<textarea>タグがありまして、これに値を代入する方法がわかりません。
おしえてくださいーー
※該当タグにJavascriptを使うので、VBのテキストボックスはつかえません><

Aベストアンサー

-------------------------------------------------------------------
まず最初に、この#6の発言は、#5のサンプルソースとセットでの発言です。
1発言内に入りきらなかったので、発言を分割いたしました
-------------------------------------------------------------------

個人的に「JAVAが未経験だからわからないからって、放置する」というのが悔しいので、調査を続けております。


んで、以下の履歴を発見しました。

[167764:テキストボックスに文字挿入したい]
http://okwave.jp/kotaeru.php3?q=167764


フォーカスを持っている間に、カーソル位置を記憶しておく必要があるようです。
そして、このようなサンプルも見つけました。
http://mugi.cc/js/000603.htm


VBでいうパブリックな変数[n]に位置を保存し、ボタン押下時に、その記憶位置を利用し、挿入を行っているようです。
これであれば、テキストやテキストエリア数の変数や配列を持たせ、管理する必要があります。


なので、サンプルを作成しました。
・起動時に「テキスト」/「テキストエリア」を対象エレメントを取得
・その[対象エレメント.ID] + _'hidden'というIDを持った「新規エレメント」を、非表示で作成
・対象エレメントに[onkeyup]と[onmouseup]のイベントハンドラを追加
・イベントハンドラにより得たタイミングで、カーソルの位置を記憶
・「挿入実行ボタン」押下時に、記憶したカーソル位置から、改行コード変換処理を施し、挿入実行
という流れです。

※※※※※※※※※※※※※※※※※※※※※※※
個人的に「業務でのJAVAの経験があまり無いので、
わかる方がいたら、是非修正して欲しい」です。
※※※※※※※※※※※※※※※※※※※※※※※

もし、ボタンがサーバ側であれば、以前のサンプルの方法により、JAVAを発行してあげればよいと思っております。
うまく走るかどうかは実験しておりませんが。。。。


注意!!
#5のソースを一度テキストエディタに落としてください。
その後、以下のいずれかの置換をしてください。
・全角の四角『□』2個を、TAB文字1個
・全角の四角『□』1個を、半角スペース2個
その後、ほげほげ.aspxの中に組み込んでください。

-------------------------------------------------------------------
まず最初に、この#6の発言は、#5のサンプルソースとセットでの発言です。
1発言内に入りきらなかったので、発言を分割いたしました
-------------------------------------------------------------------

個人的に「JAVAが未経験だからわからないからって、放置する」というのが悔しいので、調査を続けております。


んで、以下の履歴を発見しました。

[167764:テキストボックスに文字挿入したい]
http://okwave.jp/kotaeru....続きを読む


人気Q&Aランキング

おすすめ情報