料金表のシートがあって 項目の見出しがあってその項目の数は変動して
IDも記載されますが、そのIDの数も変動しており 行も列も変動します。
7行目からIDや料金が始めるのは変動しません。
それぞれ、項目ごとに料金が記載されて まとめの項目を見て7行目から全て0円の項目があった場合
同じ項目の列を削除する。
という事を行いたいと思い、色々とネットで調べたり
考えた結果、合計金額の項目の下の列にSUM関数を入れて
その結果、0なら同じ項目の列を削除するという方法を思いついたのですが
SUM関数を入れるマクロは何とか出来上がったのですが
同じ項目なら列を削除するという構想だけは出来ても、コードにするのが出来ないので
ご教授願えないでしょうか?
以下、簡単な構成図と
SUM関数を挿入するマクロです
Sub 合計()
Dim A As String
Dim B As String
Dim C As String
Dim D As String
Dim E As String
Dim F As String
Dim G As String
A = Replace(Replace(Cells.Find("合計金額").Address, "$", ""), "5", "")
B = Replace(Replace(Cells.Find("合計金額").Address, "$", ""), "5", "7")
'合計金額のセルアドレスを取得
C = Replace(Range(B, Range(A & Rows.Count).End(xlUp)).Address, "$", "")
'SUM関数の長さを取得するためのコード
With Range(B, Range(A & Rows.Count).End(xlUp))
.Cells(.Cells.Count).Offset(1).Formula = "=sum(" & C & ")"
End With
'SUM関数を挿入
G = Range(B, Range(A & Rows.Count).End(xlUp)).Address
D = Replace(Replace(Cells.Find("合計金額").Offset(1).End(xlToRight).Address, "$", ""), "6", "")
E = Replace(Replace(Cells.Find("合計金額").Offset(1).End(xlToRight).Address, "$", ""), "6", "7")
’合計金額の項目の端のセルアドレスを取るコード
F = Range(E, Range(D & Rows.Count).End(xlUp)).Offset(1).Address
Range(G).AutoFill Destination:=Range(G, F)
`挿入したSUM関数をオートフィルで広げる
End Sub
項 I ● 分野別 ● ●対象外● ●合計金額●
番 D AA BB 小合計 AA BB 小合計 AA BB
1 000-1 \100 \ 0 \100 \0 \0 \0 \100 \0
2 000-2 \200 \ 0 \200 \0 \0 \0 \200 \0
3 000-3 \100 \ 0 \100 \0 \0 \0 \100 \0
☆0 ☆400
マクロ実行
・最初に合計金額の項目の下にSUM関数を挿入する。(ここは完成しています。☆部分)
・次に、その合計金額を見て全て0なら、合計金額の項目も
分野別も対象外の同じ項目も列ごと削除する
(この削除するコードの構想としてFINDで項目の列を検索して0なら削除させる方法だけは
思いつきましたが思いつくだけで、コードとして記載は出来ていないのが現状です)
実行後
項 I ● 分野別 ● ●合計金額●
番 D AA 小合計 AA
1 000-1 \100 \100 \200
2 000-2 \200 \200
3 000-3 \100 \100 \100
No.2ベストアンサー
- 回答日時:
よく理解できてないかもですが・・・
結局のところ、処理としては『各列について、7行目以降の合計値が0ならその行を削除』ということでよさそうに思えますが?
条件が不明のところもあるけれど、適当にマクロ化してみると、こんな感じでしょうか?
(かなりテキトーですが・・・)
Sub test()
Dim rw As Long, col As Long, maxCol As Long
Dim rng As Range, val
Const minRow = 6 ' ←項目で使用している行(どこかに項目名が記されていると仮定)
Const minCol = 4 ' ←削除対象としない列(不明なので4と仮定)
' 項目列の最大値を取得(処理対象範囲を求める)
maxCol = minCol
For rw = 1 To minRow
col = Cells(rw, Columns.Count).End(xlToLeft).Column
If maxCol < col Then maxCol = col
Next rw
' 各列について、合計(=sum関数値)が0なら削除
For col = maxCol To minCol + 1 Step -1
rw = Cells(Rows.Count, col).End(xlUp).Row
val = 0
If rw > minRow Then
Set rng = Range(Cells(minRow + 1, col), Cells(rw, col))
val = Application.WorksheetFunction.Sum(rng)
End If
If val = 0 Then Columns(col).Delete
Next col
End Sub
No.3
- 回答日時:
ANo2です。
間違えた説明記述をしてしまいました。訂正です。
誤:『各列について、7行目以降の合計値が0ならその行を削除』
↓ ↓ ↓
正:『各列について、7行目以降の合計値が0ならその列を削除』
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
ある一定時間を超えた場合の超...
-
【スプレッドシート】指定の日...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで年月の合計の関数を...
-
エクセルで、一つのセルに二つ...
-
Excelの表以外が暗い?
-
エクセルで「ぶら下げ」書式を...
-
隣のセルに入力したら自動的に...
-
エクセルにて「週」から日付を...
-
エクセルで角度の計算できますか?
-
vbaで「/」を削除したい
-
エクセル:該当日にアラートを...
-
ある数値から始まるものをカウ...
-
Excel COUNTIFSでカウントでき...
-
エクセル2003 MONTH関数で
-
Excelの時間計算(年・月・日 別...
-
エクセル関数:オートフィルタ...
-
Excel : DCOUNT関数の条件表の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
【スプレッドシート】指定の日...
-
ある一定時間を超えた場合の超...
-
エクセルで年月の合計の関数を...
-
EXCEL 経過年数の平均を求めた...
-
Excelの表以外が暗い?
-
エクセルで「ぶら下げ」書式を...
-
エクセルにて「週」から日付を...
-
隣のセルに入力したら自動的に...
-
EXCEL 年月表示をするVBAを教...
-
エクセルで、一つのセルに二つ...
-
Excel:月またぎを含む日数の差...
-
エクセルで角度の計算できますか?
-
エクセル シフト表 6連続勤...
-
Excelで1ヶ月間の勤務時間の計算
-
ある数値から始まるものをカウ...
-
エクセル くじ引きの口数が別々...
-
vbaで「/」を削除したい
-
excelでの文字を隠す方法
おすすめ情報
申し訳ありません
打ち間違いです。
×不変する
〇変動する