Excel VBA質問箱 IV

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

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


1170 / 13645 ツリー ←次へ | 前へ→

【75882】VBA CountIfのRangeのセル範囲設定について のら 14/7/27(日) 11:23 質問[未読]
【75885】Re:VBA CountIfのRangeのセル範囲設定につ... kanabun 14/7/27(日) 12:48 発言[未読]
【75886】Re:VBA CountIfのRangeのセル範囲設定につ... のら 14/7/27(日) 13:50 お礼[未読]
【75888】セル選択範囲が複数の場合は? のら 14/7/27(日) 16:58 質問[未読]
【75889】Re:セル選択範囲が複数の場合は? kanabun 14/7/27(日) 17:49 発言[未読]
【75892】Re:セル選択範囲が複数の場合は? のら 14/7/28(月) 13:12 お礼[未読]
【75890】Re:セル選択範囲が複数の場合は? マナ 14/7/27(日) 19:06 発言[未読]
【75893】Re:セル選択範囲が複数の場合は? のら 14/7/28(月) 13:16 お礼[未読]

【75882】VBA CountIfのRangeのセル範囲設定につ...
質問  のら  - 14/7/27(日) 11:23 -

引用なし
パスワード
   出席簿を作っています。
毎日の様式(日簿)をVBAで増やしていき,
週末(5日ごと)に週計の様式を出すよう考えました。
様式を作っていくところまでは何とかできているのですが,

一週間の欠席日数などを集計するVBAで躓いています。

下記のようなものをつくりました。

Sub 集計追加()

MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column


If Sheet1.Cells(2, MaxCol) = "週計" Then
  Sheet1.Cells(4, MaxCol) = ""
  Sheet1.Cells(4, MaxCol + 8) = "欠課"
  Sheet1.Cells(4, MaxCol + 9) = ""
End If
 
Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf(Range(Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)), "欠")


End Sub

これだと
Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf(Range(Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)), "欠")
がエラーになりました。

Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf(Range("Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)"), "欠")
でもエラーが出ました。

Rangeの部分をRange("A5:AZ5")のようにするとカウントしてくれます。

日簿が増えていくため,Range()の部分が変数になるので
Cells()で表せないかと苦慮しています。

セル範囲の設定Range()をCells()を使ってあらわすにはどうすればよいのでしょうか?
または,ほかに良い方法があったら教えてください。
よろしくお願いします。

【75885】Re:VBA CountIfのRangeのセル範囲設定に...
発言  kanabun  - 14/7/27(日) 12:48 -

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

>これだと
>Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf(Range(Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)), "欠")
>がエラーになりました。
>
>Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf(Range("Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)"), "欠")
>でもエラーが出ました。
>
>Rangeの部分をRange("A5:AZ5")のようにするとカウントしてくれます。
>
>日簿が増えていくため,Range()の部分が変数になるので
>Cells()で表せないかと苦慮しています。
>
>セル範囲の設定Range()をCells()を使ってあらわすにはどうすればよいのでしょうか?

いちばん最初の構文↓
> Sheet1.Cells(5, MaxCol + 1) = WorksheetFunction.CountIf( _
> Range(Sheet1.Cells(5, MaxCol - 1), Sheet1.Cells(5, MaxCol - 10)), "欠")
は、
どういうエラーになるのでしょう?
こちらでは とくにエラーにはなりませんが。

Cells()を使うなら、Resizeプロパティと合わせて、こうですかね?

Sheet1.Cells(5, MaxCol + 1).Value = WorksheetFunction.CountIf( _
  Sheet1.Cells(5, MaxCol - 10).Resize(, 10), "欠")

【75886】Re:VBA CountIfのRangeのセル範囲設定に...
お礼  のら  - 14/7/27(日) 13:50 -

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

早速の回答ありがとうございます。
今自分でも確認してみると
問題なく動きました。
ありがとうございます。

原因として,職場(vita,excelバージョン覚えていません)と個人(7,excel2010)とのデータのやり取りで不具合が生じたのでしょうか?

Resizeプロパティの使用例もありがとうございました。

今後に生かしたいと思います。

【75888】セル選択範囲が複数の場合は?
質問  のら  - 14/7/27(日) 16:58 -

引用なし
パスワード
   選択範囲の設定で躓きました。

本でみると
Range("A1,A5")はセルA1とA5を,
Range("A1:A5")はセルA1〜A5を
Range("A1:A5,A11:A15")はA1〜A5とA11〜A15を参照とあります。

今回の

Range(Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)

とした場合
Cells(5, MaxCol - 1)とCells(5,MaxCol - 10)の選択でなく,
Cells(5, MaxCol - 1)からCells(5,MaxCol - 10)の選択になりました。

複数の単一セルを選択する(A1とA5)場合,
複数のセル範囲を選択する(A1〜A5とA11〜A15)場合は

どのようにすればよいでしょうか?
よろしくお願いします。

また,今回の場合セル設定に「""」がなくても認識するのは
Cells()を使ったためでしょうか?
合わせてよろしくお願いします。

【75889】Re:セル選択範囲が複数の場合は?
発言  kanabun  - 14/7/27(日) 17:49 -

引用なし
パスワード
   ▼のら さん:
>選択範囲の設定で躓きました。
>
>本でみると
>Range("A1,A5")はセルA1とA5を,
>Range("A1:A5")はセルA1〜A5を
>Range("A1:A5,A11:A15")はA1〜A5とA11〜A15を参照とあります。
>
>今回の
>
>Range(Sheet1.Cells(5, MaxCol - 1),Sheet1.Cells(5,MaxCol - 10)
>
>とした場合
たとえば、MaxCol が 12 (L列)だったとしますと、
Sheet1.Cells(5, MaxCol - 1) は Sheet1.Range("K5")
また、
Sheet1.Cells(5, MaxCol - 10) は Sheet1.Range("B5")
の単一セルのことです。

ですから、上は
範囲の最後のセルと最初のセルを指定していることになります。↓

Application.Range(Sheet1.Range("K5"), Sheet1.Range("B5"))

これはふつう、

Sheet1.Range("K5:B5")

と書きます。


>複数の単一セルを選択する(A1とA5)場合,
>複数のセル範囲を選択する(A1〜A5とA11〜A15)場合は
>
>どのようにすればよいでしょうか?
Range を使って書けば、あなたが参考書で読んだ通り
>Range("A1:A5")はセルA1〜A5を
>Range("A1:A5,A11:A15")はA1〜A5とA11〜A15を参照とあります。
ですけど?
Rangeでなく Cells で指定したいということなのでしょうか?


>また,今回の場合セル設定に「""」がなくても認識するのは
>Cells()を使ったためでしょうか?
>合わせてよろしくお願いします。

構文は
Cells.Item(RowIndex, ColumnIndex)
略して
Cells(RowIndex, ColumnIndex)
ですから、RowIndex ColumnIndex ともに数値です。ま、言ってみれば
そのシートのすべてのCellの集合(Cells)のなかの (r行目, c列目)の
単一セルを指定するのに Cells[.Item](RowIndex, ColumnIndex) を使うの
ですから、
Cellsで複数セル範囲を指定するときは Cells(y, x).Resize(y方向, x方向)
とかしないと、Cellsだけでは不可能です。

【75890】Re:セル選択範囲が複数の場合は?
発言  マナ  - 14/7/27(日) 19:06 -

引用なし
パスワード
   お邪魔します。

>Cells(5, MaxCol - 1)とCells(5,MaxCol - 10)の選択でなく,
>Cells(5, MaxCol - 1)からCells(5,MaxCol - 10)の選択になりました。
>
>複数の単一セルを選択する(A1とA5)場合,
>複数のセル範囲を選択する(A1〜A5とA11〜A15)場合は
>
>どのようにすればよいでしょうか?

引数2つ指定すると、右上から左下の一つの範囲で
引数1つで、"," で区切ると、複数範囲指定なので、無理では?

ちょっと違いますが、Unionを使えば、それに近い感じでしょうか。
でも、Countifは複数範囲に使えないので、
結局、ループして範囲ごとに計算させることになるかもしれません。

【75892】Re:セル選択範囲が複数の場合は?
お礼  のら  - 14/7/28(月) 13:12 -

引用なし
パスワード
   ▼kanabun さん:
ありがとうございました。

>Cellsで複数セル範囲を指定するときは Cells(y, x).Resize(y方向, x方向)
>とかしないと、Cellsだけでは不可能です。


ありがとうございました。
Resize を使いこなせるよう調べてみます。

【75893】Re:セル選択範囲が複数の場合は?
お礼  のら  - 14/7/28(月) 13:16 -

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

ありがとうございます。

>ちょっと違いますが、Unionを使えば、それに近い感じでしょうか。

>でも、Countifは複数範囲に使えないので、

そうなんですね。

>結局、ループして範囲ごとに計算させることになるかもしれません。


Loop,Union取り組んでみます。

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