Dim buf As Single
With sh1
For i = 6 To 200 'Sheet1の6行目から200行目まで'
If InStr(Range("F" & i), "空室,") > 0 Then
buf = buf + Range("K" & i)
End If
Next i
Range("J200") = "使用量"
Range("J201") = "空室等"
Range("J202") = "合計"
Range("K202").Formula = "=SUM(K3:K197)" '合計
Range("K201") = buf '空室等
Range("K200") = Range("K202") - Range("K201") '控除
For i = 1 To 3
Range("K" & i).NumberFormatLocal = "0.0"
Next i
三点、質問させていただきます。
1、空室 という文字が含まれる行の数値を合計させるために上記のようにしています。そこに、”共用部”や”管理外”など、条件の単語を追加したいのですが、
”空室,共用部,管理外” ではダメなんですね、、
どのように記述すれば、複数の単語を対象に出来ますか?
それとも、行をコピーしておのおの指定するべきでしょうか?
2、6行目から200行目 ではなく、「6行目から下方向、データがある行まで」
というような、指定は出来ますでしょうか??
3、マクロ実行後、セルの数値を手で打ち変えた際に、合計の値も連動して変わるようにするには、bufを使わないでやればいいのでしょうか?
'Range("AK243").Formula = "=SUM(AL3:AL239)" '空室合計計算
'Range("AK244").Formula = "=SUM(AK3:AK239)" '合計計算
'Range("AK242") = Range("AK244") - Range("AK243") '差引合計計算
上記の行を使うと、後でセルの数値を変更した場合連動して合計値なども変わってくれるのですが・・
添削をお願いできませんでしょうか。。
宜しくお願いいたします。
No.2
- 回答日時:
こんにちは
いまいちよくわからないところがありますが・・・
◇まずは、ご質問の内容に関して。
1、InStr関数の意味は、 『文字列の中に検索文字列があれば、その開始文字位置を返す』というものです。
この結果を『>0』で判定しているのは、検索文字があるか/ないかを判定していることになります。
さて、カウントなさりたいのが『「空室」,「共用部」,「管理外」のどれかがあれば』という意味であるなら、それぞれのチェックの論理和(or)を求めればよろしいでしょう。
例えば
str = Range("F" & i).Value
If InStr(Str, "空室") Or InStr(Str, "共用部") Or InStr(Str, "管理外") Then
みたいな感じ。
(ちゃんと書くなら、InStr(~~) > 0 ですけれど)
2、ある列の値の入っている最終行を求めるには、最終セルから「end + ↑」入力と同様の処理で求めます。(良く用いられる方法です)
F列を例にするなら、
Cells(Rows.Count, 6).End(xlUp).Row
で求めることができます。(6列=F列です)
3、変数bufは、マクロ処理上の一時的に値を保存するための変数ですから、ご質問とは関係ないと思われます。
>セルの数値を手で打ち変えた際に、合計の値も連動して変わるようにする
は、言い換えると、『値を変えたら、マクロの処理が動作する』という意味になります。
これを実現するためには、シートイベントの
Worksheet_Change()
を利用すれば可能ですし、別の方法としては、結果を求めたいセルにユーザ定義関数として設定しておくといった方法も考えられます。
◇個人的な意見として
3でご質問のように、セルの値を変更したら集計結果が連動して変わる方が(一般的に)便利だと思います。
それを実現するごく普通の方法は、マクロではなくエクセルの関数式をセルに設定しておく方法です。(上述のようにマクロでも可能ですが)
内容の全貌がわからないので何とも言えませんが、例えば、ご質問のような処理だけであれば、COUNTIF()やCOUNTIFS()関数を利用した式を設定しておくことで、マクロを使用せずとも済むことのように思えます。
そうしておけば、わざわざ『値を変えたら自動的に反映』などと考えずとも、自動的に反映されますよね?
No.1ベストアンサー
- 回答日時:
1.以下のように変えてください。
If InStr(Range("F" & i), "空室,") > 0 Or InStr(Range("F" & i), "共用部,") > 0 Or InStr(Range("F" & i), "管理外,") > 0 Then
2.Sheet1の最大行をもとめておき、そこまで行うようにします。
Dim maxrow as Long
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row '・・・・①
として
For i = 6 To maxrow
・・・・
next i
とします。
尚、①は、最大行を持つ列がAの場合です。もし、他の列が最大行を持っているならその列を指定して下さい。
3.
>マクロ実行後、セルの数値を手で打ち変えた際に、合計の値も連動して変わるようにするには、bufを使わないでやればいいのでしょうか?
>上記の行を使うと、後でセルの数値を変更した場合連動して合計値なども変わってくれるのですが・・
質問の意味がよくわかりませんが、上記の行を使ってうまく行くならそれを使用すればよいと思います。
回答いただきましてありがとうございます。
早速、試してみたのですが、計算されませんでした・・
If InStr(Range("F" & i), "空室,") > 0 Or InStr(Range("F" & i), "共用部,") > 0 Then
とりあえず、条件二つにしてみてもだめでした。
最大行を求めておくわけですね、ありがとうございます。
どうも、(xlUp)の使い方が苦手でして、明示していただきありがとうございます。
後ほど、試して見ます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Excel(エクセル) Excelマクロ 同列内で複数の数式を繰り返す方法 5 2022/05/22 13:58
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの計算で@が出てしまう件
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
Excel VBA、 別ブックの最終行...
-
i=cells(Rows.Count, 1)とi=cel...
-
エクセルVBAでコピーして順...
-
Sub 要具ライフ() ActiveSheet....
-
任意フォルダから画像をすべて...
-
【Excel】指定したセルの名前で...
-
特定のセルが空白だったら、そ...
-
Excel VBAで、 ヘッダーへのセ...
-
VBAを使用した時間管理
-
エクセルVBAで、非表示にし...
-
エクセル VBA 入力文字数制限...
-
セル色なしの行一括削除
-
ASP.netで、エクセルデータの取...
-
VBAでマクロ実行中はExcelのマ...
-
VBAの考え方:エクセルのカソー...
-
ExcelVBAの複数指定範囲の構文
-
Excel VBA頭文字検索方法につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
TODAY()で設定したセルの日付...
-
Excel vbaで特定の文字以外が入...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報