
初歩的な知識しかなく、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列の下線の行のセルへ入力する。

No.1ベストアンサー
- 回答日時:
こんばんは
>どのようなコードを書けばよろしいでしょうか?
この手のご質問で、方法を説明して解決した試しがないので、コードの一例を。
(方法はいろいろあるので、あくまでも一例です)
ご説明でやや曖昧な部分を以下のように解釈しました。
・小計を求めるのは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
fujillin様
ありがとうございます。
やりたいことが実行できました。
UBoundの使い方が苦手で避けてきましたすが、勉強しなおします。
ありがとうございました。
No.2
- 回答日時:
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
更に使いやすいコードもご教示いただきありがとうございます。
今回はこのデータをRPAで全社員分出力するだけで8時間以上が必要で、さらにVBAでの作業を追加するためVBAは全部で一人当たり5秒程度に収めたいと考えており、未熟な人間が管理するにはふさわしくないかも知れませんがNo.1のコードにしたいと思います。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
エクセルで一週間単位で数値を集計する方法について質問です。
Excel(エクセル)
-
VBAで重複データを合算したい
Excel(エクセル)
-
-
4
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
5
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
-
6
【VBA】【マクロ】 指定の条件で、空白の行を挿入
Excel(エクセル)
-
7
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について(日付で...
-
エクセルで空白以外のセルの値...
-
エクセルで関数を使わず複数セ...
-
一行おきにコピーするマクロが...
-
EXCELマクロ 最下行のセルの数...
-
お肉の下のシートを煮込んでし...
-
Excel マクロ モジュラス43 vba
-
Excelの入力規則で2列表示したい
-
A1セルに入力したら、入力時間...
-
エクセルの複数のセルを一括で...
-
Excelで同じセルに箇条書きをし...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
セルを結合したA4とA5の条件付...
-
エクセルでセルを10個分くらい...
-
IF関数で0より大きい数値が入力...
-
入力したところまでを自動的に...
-
Excelで社歴管理をしており4年...
-
Excelの条件付き書式で、計算式...
-
excel:条件付き書式の適用範囲...
-
エクセルで入力した数字を倍に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELにて複数列を同条件(色)...
-
エクセルの関数について(日付で...
-
エクセルで空白以外のセルの値...
-
一行おきにコピーするマクロが...
-
シート保護の状態で行の追加を...
-
Excelの非表示列も含めてコピー
-
エクセルで反転コピー
-
エクセルで行挿入した際、自動...
-
エクセルで表示された値だけ行...
-
エクセル VBA 指定の範囲内をコ...
-
エクセルVBA 複数列をコピーす...
-
特定の桁数を抽出
-
マクロ初心者です、小数点6桁で...
-
エクセルで縦に長い表を印刷
-
エクセル マクロ 貼り付け先が...
-
エクセルで図形を挿入するマク...
-
ある操作後に自動的にセルに斜...
-
Excel 条件に従いセル移動するには
-
エクセルマクロ
-
行数が不規則な一週間ごとの合...
おすすめ情報