よろしくお願いします。
-------------------------------------
A列--B列--C列--D列
123--123--512--535
264--533--111
-----222
-----○--------○--
-----------------------------------------
上記のような表があるとして、B列とD列の○の箇所に合計を出したいと思います。
合計を出す行は、固定されているのではなく、B列とD列のデータの多いほうの下の合計を出したのですが、
D列のほうが長いときには、END+方向キーとOffsetで何とか、合計を出したい行までセルを持っていくことはできるのですが、B列のほうがデータが多い場合は、一番下の行までセルを持っていくことができません。
と、オートSUMの操作をマクロに記憶をすると、合計範囲が絶対参照になってしまい、合計する範囲がそのつど変わってしまう場合の処理の仕方がわかりません。
上記のような表を、抽出機能で作成しており、たくさんの抽出結果の合計を出さなければならなく、現状は、一つずつ、合計を出しているしだいです。
使用ソフト EXCEL2000 Win2000
No.1ベストアンサー
- 回答日時:
’最終行
EndRow = Worksheets(1).UsedRange.Rows.Count + Worksheets(1).UsedRange.Row - 1
’最終列
EndCol = Worksheets(1).UsedRange.Columns.Count + Worksheets(1).UsedRange.Column - 1
これでよいですか?
ありがとうございました。
最初 Worksheets(1).UsedRange.Row
の意味がわからなかったのですが、先頭行がわかるんですね。大変勉強になりました。
No.5
- 回答日時:
#4です。
コードにミスがありました。訂正します。Sub Sample()の方で、
Cells(R+1,"A")="=SUM(A1:A" & R ")"
だとエラーですね。m(__)m
Cells(R+1,"A")="=SUM(A1:A" & R & ")"
に訂正します。
No.4
- 回答日時:
マクロ編-------------------------------------------------------------------
ユーザー定義関数を作成してみました。
GetMaxRow はシート名と列範囲を引数とし、指定シート指定列における最下行を返えします。また、シートが存在しなかったり、列範囲の指定方法に誤りがあるとFalseを返します。使い方は
=GetMaxRow("Sheet1", "A:E")
でSheet1のA:E列のうち最下行を得られます。この関数で得られた最終行の次行に合計を書きこめば良いでしょう。
Sub Sample()
Dim R As Long
R = GetMaxRow("Sheet1", "A:E")
'エラーだと0=Falseが返されています
If R Then
Cells(R+1,"A")="=SUM(A1:A" & R ")"
Else
MsgBox "不正な引数です"
End If
End Sub
'指定シート指定列で最下行を返す
Public Function GetMaxRow(strSheetName$, strColNumber$) As Long
Dim i As Integer
Dim Sh As Worksheet
Dim C()
On Error GoTo ErrorHandler
Set Sh = Sheets(strSheetName)
With Sh.Columns(strColNumber)
ReDim C(.Columns.Count + 1)
For i = .Column To .Column + .Columns.Count
C(i) = Sh.Cells(65536, i).End(xlUp).Row
Next i
End With
GetMaxRow = Application.WorksheetFunction.Max(C)
ExitHandler:
Set Sh = Nothing
Exit Function
ErrorHandler:
GetMaxRow = 0
Resume ExitHandler
End Function
一般操作編----------------------------------------------------------------
発想を変えて、合計欄を1行目に持ってくる方法です。
2行目に見出し、3行目からデータという作りにします。1行目の合計はSUM関数ではなく、
=SUBTOTAL(9,A3:A65536)
とします。こうすれば、あとからデータを追加しても合計欄の修正は不要ですし、SUBTOTAL関数にしておくことで、フィルターにも対応しますよ。
何とか完成することができました。ありがとうございます。
一般操作編のほうは、フィルターのことも考えていただいたようですが、今回は、オートフィルタではなく、フィルタオプションをマクロに登録して一度に複数の条件で表を抽出していたため、使用することができませんでした。
とても勉強になりました。私も早くKenKen_SPさんのようになりたいものです。
No.3
- 回答日時:
特定の行に移動させるのでしたらマクロではなくハイパーリンクで移動させたほうが簡単かと思います。
私のは今エクセル2003なのでやり方は少し違うかもしれませんが、一行目は多分項目等が書かれていて変更することはないと思いますので、適当なセル(たとえばA1)を選んで挿入→ハイパーリンクで最終行の適当なセルを指定すれば、A1をクリックするとそこにカーソルが飛んでいきます。
ハイパーリンクの表示は下線と色が付きますが、気になるようでしたら、書式→スタイルで「ハイパーリンク」と「表示済みのハイパーリンク」の書式を他と同じものに変更することができます。
No.2
- 回答日時:
'列の設定
列 = 4
'最終行の取得
Cells(1, 列).End(xlDown).Select
行 = ActiveCell.Row + 1
'合計
範囲 = Range(Cells(2, 列), Cells(行, 列))
Cells(行, 列) = Application.WorksheetFunction.Sum(範囲)
その都度列数を設定してもいいですが、列の部分に有る程度の法則性があるのならループさせたら楽になりそうです。
回答本当に感謝いたします。
教えていただいた方法を試してみると、
Cells(1, 列).End(xlDown).Select
行 = ActiveCell.Row + 1
で、4列目の最終行の下に行くことはできるのですが、
2列目が10行目までデータが入っていて、4列目は3行目までしかデータが入っていないばあは、4列目の11行に合計を出すようにしたかったのですが・・(説明べたですみません)
>範囲 = Range(Cells(2, 列), Cells(行, 列))
>Cells(行, 列) = Application.WorksheetFunction.Sum(範囲)
上記の方法と、#1の方の方法を組み合わせると何とか自分の出したいものができそうです・・(これからですが・・)
勉強になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Excel(エクセル) エクセルのマクロ作成について教えてください 5 2023/02/20 00:39
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Excel(エクセル) SUBTOTAL SUMIF?? 2 2023/03/16 11:25
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
CSVファイルの「0落ち」にVBA
-
VLOOKUPの列番号の最大は?
-
Excel/VBA ステップインと通常...
-
Excel文字列一括変換
-
VBA Splitで「引数の数が一致...
-
Excelの行数、列数を増やしたい...
-
エクセルVBAでデータ最終行取得...
-
VBAで結合セルを転記する法を教...
-
エクセルで最初の行や列を開け...
-
エクセルでセル12個間隔で合...
-
Alt+Shift+↑を一括で行うには、...
-
横軸を日付・時間とするグラフ化
-
VBA エラーコード1004について
-
エクセルで複数列の検索をマク...
-
リストからデータを紐付けしたい
-
エクセルマクロPrivate Subを複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
VBA
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
エクセルで複数列の検索をマク...
-
CSVファイルの「0落ち」にVBA
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
えABのある列って
-
VBAで別ブックの列を検索し、該...
-
Excel文字列一括変換
-
エクセルで住所を県と市・郡と...
-
リストからデータを紐付けしたい
-
Alt+Shift+↑を一括で行うには、...
-
エクセル マクロ 範囲指定で...
-
エクセルで最初の行や列を開け...
-
エクセル 重複 隣の列 一番...
おすすめ情報