• ベストアンサー

マクロの事で質問?

昨日、マクロの事で質問した者です。 http://oshiete1.goo.ne.jp/qa4105086.html そこで下記のソースを教えてもらいました。 Sub testo()      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 = 1 To 4 Print #1, Cells(Row, 1) & "...<a href=""" & Cells(Row, 2) & """target=""_blank"">続きはこちら</a><br>" Next   Close #1   Shell "notepad.exe C:\test.tmp", vbNormalFocus      End Sub 質問ですが、この場合 For Row = 1 To 4 が入っていて4行目までしか表示されません。 そこでFor Row = 1 To 100 とかした場合、100行目までデータがあればいいのですが、ない場合は 説明文1...<a href="http://123.com"target="_blank">続きはこちら</a><br> 説明文2...<a href="http://123.com"target="_blank">続きはこちら</a><br> ...<a href=""target="_blank">続きはこちら</a><br> ...<a href=""target="_blank">続きはこちら</a><br> ...<a href=""target="_blank">続きはこちら</a><br> このようになってしまいます。 データがない時は表示されないようにするにはどうすればいいのでしょうか?

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

  • ベストアンサー
  • izmlz
  • ベストアンサー率55% (67/120)
回答No.2

For Row = 1 To 4 を For Row = 1 To Cells(Rows.Count, 1).End(xlUp).Row に変えてみるのはいかがでしょうか?

siraku
質問者

お礼

ありがとうございます。うまくできました!

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

その他の回答 (1)

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

For Next ループの中で、Print の前にデータがあるかどうかをチェックし、無かったら Exit For で For Next ループを抜けると良いです。

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

関連するQ&A

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

    以前以下のようなコードを教わった物です。 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)を追加して色々と試したのですがどうも上手くいきません。 よろしくお願いします。

  • マクロの事で質問です?

    以前、「マクロを使ってこんな事って出来ますか?」を質問した者です。 http://oshiete1.goo.ne.jp/qa4035950.html ANo.4のKenKen_SPさんの回答が参考になりました。 そこで、KenKen_SPさんのソースを参考にして別の事をやってみたのですが、うまくいきません。 やりたい事は エクセルのA列に文章 B列にURLを入力してマクロを使って下記のようにメモ帳に出力したいです。 例 1ここに文章...<a href="http://123.com" target="_blank">続きはこちら</a><br> 2ここに文章...<a href="http://234.com" target="_blank">続きはこちら</a><br> 3ここに文章...<a href="http://345.com" target="_blank">続きはこちら</a><br> 4ここに文章...<a href="http://456.com" target="_blank">続きはこちら</a><br> いつも聞いてばかりですいませんがよろしくお願いします。

  • マクロについて質問します。

    このようなマクロがあるのですが、内容を変更したらうまく動きません。 Sub 請求明細自動印刷() Application.ScreenUpdating = False Dim I As Integer Dim リンクシート As String For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "E").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut From:=2, To:=2 End If Next I End Sub ↑の内容の ハイパーリンクセルを"E"から Dに変更したので、 ↓のように リンク先をDに変更したのですが、同じ書類が出ています (10枚 多分 If Cells(I, "A") <> 0 Thenに該当するのが10組なので・・・) Sub 請求明細自動印刷() Application.ScreenUpdating = False Dim I As Integer Dim リンクシート As String For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(I, "A") <> 0 Then リンクシート = Cells(I, "D").Hyperlinks(1).SubAddress リンクシート = Left(リンクシート, InStr(リンクシート, "!") - 1) Sheets(リンクシート).PrintOut From:=2, To:=2 End If Next I End Sub よくわからないのですが、どのよな形に変更するのか教えたください。 For I = 3 To Cells(Rows.Count, "A").End(xlUp).Row これは宣言文なのですか・・・・? すみません  急いでるので 調べるより早いと思いまして お願いします。

  • エクセルマクロ配列で変数は使えますか

    エクセル2013です。 初めて配列を使います。 以下のように作成し思ったようにできました。 Sub 計算() '成功 Dim a As Integer Dim c As Integer Dim b(5) As Integer Dim 最終行 Dim 値列  値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To 5 b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub ただ計算する列の範囲をインプットボックスで入力した値 にしたい為以下のように改造しました。 Dim b(対象列) As Integerでエラーになります 配列には変数は使用できないのでしょうか? よろしくお願いします。 Sub 計算() '失敗 Dim a As Integer Dim c As Integer Dim b(対象列) As Integer’★ここでERRになる Dim 最終行 Dim 対象列 Dim 値列  対象列 = 22'インプットボックスで入力した値 値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To (対象列 - 17) b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub

  • EXCEL VBA: 次の処理のマクロボタン作成

    ConvertシートのA列にあるフルパス付きファイル名を B列から右方向に最大L列までパス区切り文字(\)で分割済みです。 (但し、1行目は見出し行) 列方向(横方向)の分割部分を、横_縦シートの5行目から行方向(下方向)にそのままの順番で配置換え テスト目的で以下のコードを考えて、1行分(i=2)は配置換え出来るのを確認しています。 ここから横_縦シートのどこかにマクロボタンを配置して クリックすると以下を処理したいです。 1)range(”A5”)以下の書き出し分を削除 > 次の書き出しに備える 2)i=3 として 次の書き出しを行う イメージとしては、1行分は配置換えして確認して、ボタンクリックで次を表示して確認を繰り返す ボタンに登録するコードを教えてください。 可能なら、前を表示や処理停止のボタンも作成したいと思っていますのでご指導下さい。 Sub フルパス分割() Dim tmp As Variant Dim Ln As Long, i As Long, ii As Long Dim ws1 As Worksheet, ws3 As Worksheet Set ws1 = Worksheets("Everything") Set ws3 = Worksheets("Convert") Ln = ws1.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To Ln ws3.Cells(i, 1) = ws1.Cells(i, 1) tmp = Split(ws3.Cells(i, 1), "\") For ii = LBound(tmp) To UBound(tmp) ws3.Cells(i, ii + 2) = tmp(ii) Next Next End Sub Sub 並べ替え() Dim Ln As Long, i As Long Dim Worksheet, ws3 As Worksheet, ws4 As Worksheet Dim tmp As Variant Set ws3 = Worksheets("Convert") Set ws4 = Worksheets("横_縦") Ln = ws3.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To Ln tmp = Split(ws3.Cells(i, 1), "\") ws3.Range(Cells(i, 2), Cells(i, UBound(tmp) + 2)).Copy ws4.Cells(i + 3, 1).PasteSpecial Transpose:=True Stop Next End Sub

  • エクセルのマクロについて

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • VBA文字抽出について

    添付ファイルのような青文字だけを抽出したいです。作成したVBAでは添付ファイルの6、8行目「0」が消えてしまいます。どなたかアドバイスお願いします。また他に方法があれば教示いただければ幸いです。 Sub test() Dim j As Long, tmp As Variant For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row tmp = Split(Cells(j, 1), "/") Cells(j, 2) = tmp(1) tmp = Split(Cells(j, 2), "-") Cells(j, 3) = tmp(0) Cells(j, 4) = tmp(1) Cells(j, 5) = Cells(j, 3) & "-" & Cells(j, 4) Next j End Sub

  • シートの全てを半角にする

    A列からT列、 行は10000行ほどあるのですが 全てを半角にしたいのですがマクロでないと無理でしょうか? Sub 全てを半角にする() Dim row行 As Long Dim col列 As Long For col列 = 1 To Range("IV1").End(xlToLeft).Column For row行 = 2 To Cells(65536, 2).End(xlUp).Row Cells(row行, col列) = StrConv(Cells(row行, col列), vbNarrow) Next row行 Next col列 End Sub でやるしかないですか? もっと効率のいい方法があったら教えてください!

  • Excel 文字列を区切る VBA 質問

    A列にスペース区切りのデータがあります これをC列 D列 に分けて表示したいのですが A列のデータが不規則(個数がバラバラ 空白もある) と、なった場合 なかなか上手くいきません C列以降は使用可能です(空いてます) その道の方 お助けたください 元のVBAは Sub Sample3() Dim i As Long, tmp As Variant For i = 2 To 22 tmp = Split(Cells(i, 1), " ") Cells(i, 2) = tmp(0) Cells(i, 3) = tmp(1) Next i End Sub です お手数ですが宜しく お願いします

  • マクロです。教えてください。

    セルAのデーターに連続番号をセルEに出すことはできましたが、連続番号が1,2,3・・・になっています。これを001,002、003としたいのですが命令文がわかりません。 どなたか教えてください。 Dim i As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "A") <> "" Then Cells(i, "E") = i Next

専門家に質問してみよう