Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2985 / 13646 ツリー ←次へ | 前へ→

【64911】隔行塗りつぶし の変則処理 yukio 10/3/26(金) 15:41 質問[未読]
【64915】Re:隔行塗りつぶし の変則処理 Jaka 10/3/26(金) 16:22 発言[未読]
【64919】Re:隔行塗りつぶし の変則処理 yukio 10/3/26(金) 17:59 お礼[未読]
【64922】Re:隔行塗りつぶし の変則処理 ん? 10/3/26(金) 20:44 発言[未読]
【64924】Re:隔行塗りつぶし の変則処理 yukio 10/3/26(金) 21:49 お礼[未読]
【64928】Re:隔行塗りつぶし の変則処理 ん? 10/3/26(金) 23:51 発言[未読]
【64933】Re:隔行塗りつぶし の変則処理 yukio 10/3/27(土) 13:51 お礼[未読]
【64934】Re:隔行塗りつぶし の変則処理 ん? 10/3/27(土) 14:19 発言[未読]
【64939】Re:隔行塗りつぶし の変則処理 yukio 10/3/28(日) 10:41 お礼[未読]
【64935】Re:隔行塗りつぶし の変則処理 SS 10/3/27(土) 14:54 発言[未読]
【64940】Re:隔行塗りつぶし の変則処理 yukio 10/3/28(日) 10:53 お礼[未読]

【64911】隔行塗りつぶし の変則処理
質問  yukio  - 10/3/26(金) 15:41 -

引用なし
パスワード
   いろいろ試しても解決できませんでした。ご教示をお願いします。
内容は、隔行の塗りつぶし をしているのですが、ページの区切りに
塗りつぶしなし を1行を追加しています。
  MaxRows = Sheets("Sheet1").UsedRange.Rows.Count
   y = MaxRows
  For y = 1 To 46 Step 2
    Sheets("Sheet1").Select
   Range("B50:F50").Rows(y).Interior.ColorIndex = 3
   Range("B97:F97").Rows(y).Interior.ColorIndex = 3
   Range("B144:F144").Rows(y).Interior.ColorIndex = 3
   Range("B191:F191").Rows(y).Interior.ColorIndex = 3
   Range("B238:F238").Rows(y).Interior.ColorIndex = 3
   Range("B285:F285").Rows(y).Interior.ColorIndex = 3
    −以下続ける−
  Next y
これに、変数を追加して、
  For y = 1 To 46 Step 2
    Sheets("Sheet1").Select
       r = r + 1
    For r = 0 To r Step 1
     MyRows = 50 + (47 * r)
    Range(Cells(MyRows, 2), Cells(MyRows, 6)).Rows(y).Interior.ColorIndex = 3
    Next r
  Next y
で、実行してみましたが、最初の2ページ分は、OKなんですが、次の2ページ分の最初の1行が塗りつぶし にならず、次の次の2ページ分のは、最初と2番目が塗りつぶし にならず,順次増加していきます。コードに間違いがあるようなのですが、
何らかの方法はないものでしょうか。アドバイスをお願いします。

【64915】Re:隔行塗りつぶし の変則処理
発言  Jaka  - 10/3/26(金) 16:22 -

引用なし
パスワード
   ▼yukio さん:
>       r = r + 1 ←ループで使う変数を外で変えるものじゃないです。
             それに、ここで変えても、
             下のforで0からって書いてます。
             ん??
             こんなところで、変数を使いまわすものではないです。
>    For r = 0 To r Step 1
>     MyRows = 50 + (47 * r)
>    Range(Cells(MyRows, 2), Cells(MyRows, 6)).Rows(y).Interior.ColorIndex = 3
>    Next r
単に
For rr = 0 To r Step 1
とかにすればいいんじゃないですか?
ぱっと見で流れ読んでないけど。

【64919】Re:隔行塗りつぶし の変則処理
お礼  yukio  - 10/3/26(金) 17:59 -

引用なし
パスワード
   ▼Jaka さん:
>>    For r = 0 To r Step 1
>>     MyRows = 50 + (47 * r)
>>    Range(Cells(MyRows, 2), Cells(MyRows, 6)).Rows(y).Interior.ColorIndex = 3
>>    Next r
>単に
>For rr = 0 To r Step 1
>とかにすればいいんじゃないですか?
>ぱっと見で流れ読んでないけど。

早速のアドバイス有難うございます。
言われる通り、r=r+1を削除し、
For r = 0 To r Step 1 だけにしまして、問題がスッキリしました。
ページが進むにつれて、単純に1,3,5,7....と塗りつぶしの予定の行が
塗りつぶしにならず、増えて行くようです。従って、2ページ分毎に変わる最初の質問の時の状態よりは、分かりよいです。
しかし、その後の処理は、いずれも無理な作業なんでしょうか?

【64922】Re:隔行塗りつぶし の変則処理
発言  ん?  - 10/3/26(金) 20:44 -

引用なし
パスワード
   ▼yukio さん:

>  MaxRows = Sheets("Sheet1").UsedRange.Rows.Count
>   y = MaxRows

   ↑で yに セットした数値はどこで使うの?
    ↓で変数として違う数値が入ってるけど

>  For y = 1 To 46 Step 2
>    Sheets("Sheet1").Select
>   Range("B50:F50").Rows(y).Interior.ColorIndex = 3

【64924】Re:隔行塗りつぶし の変則処理
お礼  yukio  - 10/3/26(金) 21:49 -

引用なし
パスワード
   ▼ん? さん:
>>  MaxRows = Sheets("Sheet1").UsedRange.Rows.Count
>>   y = MaxRows
>
>   ↑で yに セットした数値はどこで使うの?
>    ↓で変数として違う数値が入ってるけど
>
>>  For y = 1 To 46 Step 2
>>    Sheets("Sheet1").Select
>>   Range("B50:F50").Rows(y).Interior.ColorIndex = 3
質問を絞る意味で整理していますので、説明不足の感があるようで済みません。
現実にデータが最大、行番号308まで入れております。それをyとしています。
ただ、このコードを使うと塗りつぶしの行番号が2000を超えて走ります。これは、後で解決方法を質問したいと思っているところです。
現在は、最初に質問した時のコードを使い、データが多くなると手作業でコード
を追加するようにしてきました。
また、コード作成に影響がないと思っていますが、最初のシートRange("B4:F48")にある行番号(2)項目欄を固定して、各ページに表示させています。
質問の仕方が稚拙で申し訳けありません。

【64928】Re:隔行塗りつぶし の変則処理
発言  ん?  - 10/3/26(金) 23:51 -

引用なし
パスワード
   ▼yukio さん:
>また、コード作成に影響がないと思っていますが、最初のシートRange("B4:F48")にある行番号(2)項目欄を固定して、各ページに表示させています。
>質問の仕方が稚拙で申し訳けありません。

やっぱり、49行より上にデータとか有るんだ。
提示のコードだと50行から下が塗りつぶされるだけだから、なんで
上部にこんな大きな空間が有るのか不思議だった。

Range("B4:F48")にも塗りつぶしをしているんだったら
そのブロックの書式をコピーしていけばわかりやすい。

【64933】Re:隔行塗りつぶし の変則処理
お礼  yukio  - 10/3/27(土) 13:51 -

引用なし
パスワード
   ▼ん? さん:
>やっぱり、49行より上にデータとか有るんだ。
>提示のコードだと50行から下が塗りつぶされるだけだから、なんで
>上部にこんな大きな空間が有るのか不思議だった。
>
>Range("B4:F48")にも塗りつぶしをしているんだったら
>そのブロックの書式をコピーしていけばわかりやすい。

簡潔に説明しやすくするため、2枚目のページからで十分と考えただけですが、
最初のページにデータを入れてはいます。影響を考えて塗りつぶし はしていま
せん。
行番号(1)には、セルの一つに年月日を入れています。
行番号(2)を、データ表の各種項目欄に使っています。この項目を各ページに印刷
するようメニューバーから印刷タイトル設定をしているだけですが、

しかし、諦めようと思っております。無駄にお手数をお掛けして申し訳けありま
せん。
式の組み立てに無理があるのでしょう。当分、手作業で甘んじます。
何らかの式が成立できるかもしれないと思ったんですが、難しいですね。
知識不足は、どうにもなりませんでした。
今後も、お世話になることがあります。
その節は、よろしくお願いします。

【64934】Re:隔行塗りつぶし の変則処理
発言  ん?  - 10/3/27(土) 14:19 -

引用なし
パスワード
   ▼yukio さん:

>式の組み立てに無理があるのでしょう。当分、手作業で甘んじます。
>何らかの式が成立できるかもしれないと思ったんですが、難しいですね。
>知識不足は、どうにもなりませんでした。
>今後も、お世話になることがあります。
>その節は、よろしくお願いします。

全然難しくないですョ。むしろ簡単なことです。

私は基本的にコードは示さない主義なので。

これをあきらめるようでしたらVBAは身につきませんよ。

最後に、手作業でやるにしても一行一行することの無いように
どうすれば早くほしい結果を得るか  ですョ

【64935】Re:隔行塗りつぶし の変則処理
発言  SS  - 10/3/27(土) 14:54 -

引用なし
パスワード
   ▼yukio さん:
横から失礼します。
>何らかの式が成立できるかもしれないと思ったんですが、難しいですね。
式を成立させるのにはやりたい事が分からないと出来ません。
一応こういうことかなと言うことで作ってみました。
1)頁下端は動作をはっきりさせるため白ではなく黄に変えました。
2)頁の行数は固定なので汎用性はありません
考えられている動作と異なるかも知れませんので新規bookで試して下さい。

Sub Macro1()
  Dim i As Long, j As Long, k As Long, p As Long
  
  p = 5 'ページ数
  For i = 0 To p - 1
    For j = 0 To 44 Step 2
      k = 50 + 47 * i + j
      Range("B" & k & ":F" & k).Interior.ColorIndex = 3
    Next j
    Range("B" & k + 2 & ":F" & k + 2).Interior.ColorIndex = 6
  Next i
End Sub

>▼ん? さん:
>>やっぱり、49行より上にデータとか有るんだ。
>>提示のコードだと50行から下が塗りつぶされるだけだから、なんで
>>上部にこんな大きな空間が有るのか不思議だった。
>>
>>Range("B4:F48")にも塗りつぶしをしているんだったら
>>そのブロックの書式をコピーしていけばわかりやすい。
>
>簡潔に説明しやすくするため、2枚目のページからで十分と考えただけですが、
>最初のページにデータを入れてはいます。影響を考えて塗りつぶし はしていま
>せん。
>行番号(1)には、セルの一つに年月日を入れています。
>行番号(2)を、データ表の各種項目欄に使っています。この項目を各ページに印刷
>するようメニューバーから印刷タイトル設定をしているだけですが、
>
>しかし、諦めようと思っております。無駄にお手数をお掛けして申し訳けありま
>せん。
>式の組み立てに無理があるのでしょう。当分、手作業で甘んじます。
>何らかの式が成立できるかもしれないと思ったんですが、難しいですね。
>知識不足は、どうにもなりませんでした。
>今後も、お世話になることがあります。
>その節は、よろしくお願いします。

【64939】Re:隔行塗りつぶし の変則処理
お礼  yukio  - 10/3/28(日) 10:41 -

引用なし
パスワード
   ▼ん? さん:
>
>全然難しくないですョ。むしろ簡単なことです。
>私は基本的にコードは示さない主義なので。
>これをあきらめるようでしたらVBAは身につきませんよ。
>最後に、手作業でやるにしても一行一行することの無いように
>どうすれば早くほしい結果を得るか  ですョ


いろいろと、ご忠告有難うございました。
言われたことを肝に銘じて、諦めずにこつこつ勉強してまいります。
今後ともよろしくお願いいたします。

【64940】Re:隔行塗りつぶし の変則処理
お礼  yukio  - 10/3/28(日) 10:53 -

引用なし
パスワード
   ▼SS さん:
>式を成立させるのにはやりたい事が分からないと出来ません。
>一応こういうことかなと言うことで作ってみました。
>1)頁下端は動作をはっきりさせるため白ではなく黄に変えました。
>2)頁の行数は固定なので汎用性はありません
>考えられている動作と異なるかも知れませんので新規bookで試して下さい。
>
>Sub Macro1()
>  Dim i As Long, j As Long, k As Long, p As Long
>  
>  p = 5 'ページ数
>  For i = 0 To p - 1
>    For j = 0 To 44 Step 2
>      k = 50 + 47 * i + j
>      Range("B" & k & ":F" & k).Interior.ColorIndex = 3
>    Next j
>    Range("B" & k + 2 & ":F" & k + 2).Interior.ColorIndex = 6
>  Next i
>End Sub
>
お陰様で解決いたしました。ご親切有難うございました。
発想の転換ができないでいたものですから、今回は解決を諦めていた
ので、嬉しい限りです。
黄色のコードは、Xlnone に変更しすっきりさせていただきました。
ページ数(P)につても、HPageBreaks.Count を使い,lastpasge にし
てみました。
最初のページ(48までの部分)も、別のコードで隔行塗りつぶしを復活さ
せました。
大変お手数を煩わせました。
今後ともよろしくお願いいたします。

2985 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free