プロが教える店舗&オフィスのセキュリティ対策術

初歩的な知識しかなく、startRowと列以外は不規則で組み方も思いつきません。
以下の条件をVBAで実行するにはどのようなコードを書けばよろしいでしょうか?
ご教示ください。

1.使用するシートは  ws = ActiveWorkbook.ActiveSheet とします
2.検索のstartRow = 24行目とし、
  最終行は lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Rowで取得します。
3.対象の表は1か月分の縦型のカレンダー形式ですが、B列の日付は文字列で出力されています。
4.日曜から土曜までをワンサイクルとして、AA列に罫線が入っています。
5.この表の中で4/4(27行目と28行目)はセル結合されています。これは自動出力された状態であり、他列の関連で防げないものとします。
5.最終行から最下の罫線の一つ下までのJ列の合計をAA列の最終行に入力(値でもSUM関数でもどちらでも構いません)
 同じように24行目までサイクル毎にJ列の合計をAA列の下線の行のセルへ入力する。

「行数が不規則な一週間ごとの合計値の計算を」の質問画像

A 回答 (2件)

こんばんは



>どのようなコードを書けばよろしいでしょうか?
この手のご質問で、方法を説明して解決した試しがないので、コードの一例を。
(方法はいろいろあるので、あくまでも一例です)

ご説明でやや曖昧な部分を以下のように解釈しました。
 ・小計を求めるのはB列の文字列に"(土)"を含む行と、最終行とする。
  (罫線の有無は参照していません)
 ・その他の行は空白とする。
※ "(土)"の「()」が全角なのか半角なのか不明ですが、図の雰囲気からひとまず全角文字として解釈しました。(違う場合は適宜修正してください)


Sub Q13800616()
Dim n As Long
Dim B, J, s

n = Cells(Rows.Count, 2).End(xlUp).Row - 23
If n < 1 Then Exit Sub
B = Cells(24, 2).Resize(n).Value
J = Cells(24, 10).Resize(n).Value

s = 0
For n = 1 To UBound(B)
 If IsNumeric(J(n, 1)) Then s = s + J(n, 1)
 J(n, 1) = ""
 If InStr(B(n, 1), "(土)") Or n = UBound(B) Then
  J(n, 1) = s
  s = 0
 End If
Next n

Cells(24, 27).Resize(UBound(B)).UnMerge
Cells(24, 27).Resize(UBound(B)).Value = J
End Sub
    • good
    • 1
この回答へのお礼

助かりました

fujillin様
ありがとうございます。
やりたいことが実行できました。
UBoundの使い方が苦手で避けてきましたすが、勉強しなおします。
ありがとうございました。

お礼日時:2024/04/29 22:53

No1です。



>UBoundの使い方が苦手で避けてきましたすが、~
苦手なら、使わなくてもまったく同じ方法でできますよ。
むしろ、こちらの方が普通の書き方かも知れませんね。

Sub Q13800616()
Dim n As Long, i As Long
Dim B, J, s

n = Cells(Rows.Count, 2).End(xlUp).Row - 23
If n < 1 Then Exit Sub
B = Cells(24, 2).Resize(n).Value
J = Cells(24, 10).Resize(n).Value

s = 0
For i = 1 To n
 If IsNumeric(J(i, 1)) Then s = s + J(i, 1)
 J(i, 1) = ""
 If InStr(B(i, 1), "(土)") Or i = n Then
  J(i, 1) = s
  s = 0
 End If
Next i

Cells(24, 27).Resize(n).UnMerge
Cells(24, 27).Resize(n).Value = J
End Sub
    • good
    • 0
この回答へのお礼

更に使いやすいコードもご教示いただきありがとうございます。
今回はこのデータをRPAで全社員分出力するだけで8時間以上が必要で、さらにVBAでの作業を追加するためVBAは全部で一人当たり5秒程度に収めたいと考えており、未熟な人間が管理するにはふさわしくないかも知れませんがNo.1のコードにしたいと思います。
ありがとうございます。

お礼日時:2024/04/30 21:21

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A