No.5
- 回答日時:
No.2です。
セルの範囲はこちらで適当に当てちゃいました。
計算結果を配列に入れる物ではなくセルに書き出す方法ですが、データは配列から取り出してます。
Sub try()
Dim r As Range, i As Long
Dim v
If Range("B2").Value = "" Then Exit Sub
Set r = Range("B2") 'データの基準セル
v = Range(r, r.CurrentRegion.SpecialCells(xlCellTypeLastCell)).Value
Set r = r.End(xlDown).Offset(3, -1)
r.Value = "合計"
For i = LBound(v, 2) To UBound(v, 2)
With Application
r.Offset(, i).Value = .Sum(.Index(v, , i))
End With
Next
Set r = Nothing
End Sub
------
ArrayListとか使おうかとも考えましたが、まずはExcelの機能のみで。(でもうちのは古いから今ので出来るか心配)
このコードは非常にわかりやすいです。
こういう感じで頭に浮かんでくるように
なりたい。いろいろ挑戦します。
また、世界が広がりました。
No.4
- 回答日時:
No.3の回答者です。
>配列を使うなら、配列を計算するサブプロシージャやユーザー定義関数を別に作ったほうがよいでしょう。
>配列を計算するプロシージャとは
>きになります。かなり気になります。
前言を撤回します。想像だけで実際い試してみないので、失礼しました。
私は、一般のワークシート関数ですと、エラーになると思っていました。それで、ユーザー定義関数しかないと思っていました。ユーザー定義関数の部分に、SUM関数を入れてみました。ご質問者さんは、加算・減算ですから、セルのアドレスなくても、計算が可能でした。
今まで、配列で抜き出して、total= total + a と書いてきたものが、置き換えられそうです。
'//
Sub Test_1() 'イレギュラー
Dim ret
Dim i As Long
ReDim ar(200, 0) 'プリセットで配列を作る(動的配列は不可)
For i = 0 To 10
ar(i, 0) = i
Next
ret = Application.Sum(ar)
MsgBox ret
End Sub
Sub Test_2() 'こちらがノーマル
Dim ret
Dim i As Long
Dim ar()
For i = 0 To 10
ReDim Preserve ar(0, i) '動的配列ができる
ar(0, i) = i
Next
ret = Application.Sum(ar)
MsgBox ret
End Sub
No.3
- 回答日時:
ご質問の一連の流れからすれば、配列を使っておられるようなので、おそらくは採用はしないとは思います。
好みは否定するわけではありませんが、2次元配列で処理するといっても、Excelなどの場合は、ワークシートに貼り付けするのですから、結果的には、同じになってしまうだけで、配列が、ややこしくさせてしまいます。もし、配列を使うなら、配列を計算するサブプロシージャやユーザー定義関数を別に作ったほうがよいでしょう。以下は、Set myRng = Range("R550").CurrentRegion と、CurrentRegion で範囲を取ったら、それを移動したり、範囲を狭めながら、計算領域を抽出し、そして、場所が決まったら、一気に計算させるという内容です。
.Columns(1).Address(0, 0) これで、上と下の列の計算の部分のアドレス範囲を抽出しています。[参考まで]
'//
Sub AutoCalc()
Dim myRng As Range
Set myRng = Range("R550").CurrentRegion
With myRng.Offset(2, 2) 'グレーの行番号・列番号が生きている場合
'With myrng.offset(1,1) '実際にはない場合
With .Resize(.Rows.Count - 2, .Columns.Count - 2)
.Rows(.Rows.Count).Offset(2).FormulaLocal = "=Sum(" & .Columns(1).Address(0, 0) & ")"
.Rows(.Rows.Count).Offset(2, -1).Cells(1).Value = "合計"
End With
End With
End Sub
No.1ベストアンサー
- 回答日時:
Excelをデータベースとして接続出来る方が初心者とは思えないですけど。
先にExcelの基本を学んだ方が楽な気はします。
配列による方法を検討されているようですが、Excelにはワークシート関数がありますのでそちらで済むならそちらを使われた方が・・・とも思いますよ。
Sub megu()
Dim rr As Range, rc As Range
Set rr = Range("T552", Cells(Rows.Count, "T").End(xlUp)) 'データ行基準範囲
Set rc = Range("T552", Cells(552, Columns.Count).End(xlToLeft)) 'データ列基準範囲
If rr.Row >= 552 And rc.Column >= 20 Then ' T552以降にデータが存在している場合
With rr.Offset(rr.Rows.Count + 1).Resize(1) 'データ行数だけOFFSETしてセル範囲を1つとする
.Offset(, -1).Value = "合計" 'その1つになったセルの左側に”合計”を代入
With .Resize(, rc.Count) '1つにしたセル範囲を列方向に広げる
.Formula = "=SUM(" & rr.Address(0, 0) & ")" '広げたセル範囲にSUM関数の数式を代入する
.Value = .Value '数式を値に変換する
End With
End With
End If
Set rr = Nothing
Set rc = Nothing
End Sub
Excelをデータベースとして接続出来る方が初心者とは思えないですけど。
→めぐみん様から教えてくれたからできるようになりました。
先にExcelの基本を学んだ方が楽な気はします。
→私もそう思います。
だけど、こうできるようになりたいという思いが
こんなことになってしまうんです。
有難うございました。
思い通りです。
納得いたしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
Excel オートフィルタのリスト...
-
Excelのセルの色指定をVBAから...
-
SUMPRODUCT関数を用いた最小値
-
VBA listBoxについて
-
ExcelのINDEXとMATCH関数でスピ...
-
配列がとびとびである場合の書き方
-
【VBA】ユーザーフォーム リス...
-
配列の受け渡しについて
-
【VBScript】Dictionaryの項目(...
-
読み込みで一行おきに配列に格納
-
ノーツのデータをVBScriptで取...
-
Access VBA Split利用方法
-
[エクセル]連続する指定範囲か...
-
ExcelVBAの配列変数で一括でセ...
-
エクセルでエラーを無視して一...
-
エクセルの行の削除を配列で高...
-
エクセルVBAで変数をセルに一行...
-
[VBA]改行入りのセルの値を配列...
-
C#で配列のフィールドを取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報