[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『SUM,INDIRECT関数をマクロで使いたい』(h.n)
いつもお世話になっております。
エクセル関数において以下の関数で、数千行ある合計値を求める式をさくせいしました。
テスト段階ですので、まだ数行ですが、式としては正常に計算されておりました。
しかし数千行のセルへ以下の関数を入れてしまうとエクセルの速度が低下する
と想定しています。(その他セルにも関数が入っている為)
そこで以下関数をマクロで計算させたいのですが、マクロに置き換えた場合、どのようなコードになるのでしょうか、ご教授頂けないでしょうか。
エクセルの関数
=SUM(INDIRECT("AE"&VLOOKUP(AC11,AB:AF,5,FALSE)):INDIRECT("AE"&COUNTIF(AB:AB,AC11)+VLOOKUP(AC11,AB:AF,5,FALSE)-1))
マクロでのコード
以下SUMの所まで練習でやってみましたが、INDIRECTとVLOOKUPをどのように書いていいのか分からなくなり質問致しました。
s = Application.WorksheetFunction.Sum(Range("AE5 :AE6"))
そもそもマクロでは別の方法があるような気も致しますが、参考までに以下の事を行いたいです。
A列に数千行の重複した管理番号があります。
B列にA列それぞれの値が全て入っています。
A列の重複している全てのB列の合計を計算させたい。
A列 B列
13 500
12 200
11 300
13 450
12 700
11 800
合計値 13=950 12=900 11=1100
< 使用 Excel:Office365、使用 OS:Windows10 >
シート名 Sheet1
|[A]|[B] [1]| 13|500 [2]| 12|200 [3]| 11|300 [4]| 13|450 [5]| 12|700 [6]| 11|800
Option Explicit
Sub OneInstanceMain()
Dim i As Long Dim v() As Variant Dim zD As Object Set zD = CreateObject("Scripting.Dictionary") With Worksheets("Sheet1") v = .Cells(1).CurrentRegion.Value .Copy End With For i = LBound(v, 1) To UBound(v, 1) zD(v(i, 1)) = zD(v(i, 1)) + v(i, 2) Next With ActiveSheet .UsedRange.Clear .Cells(1).Resize(zD.Count, 1) = Application.Transpose(zD.keys) .Cells(1, 2).Resize(zD.Count, 1) = Application.Transpose(zD.items) End With Erase v Set zD = Nothing End Sub m(__)m (隠居じーさん) 2021/03/27(土) 13:02
コードを勉強させて頂きます。
(h.n) 2021/03/27(土) 16:08
隠居じーさん
うまく動作しました。
今回はB列で合計で説明しましたが、本来はC列やD列等に合計値があります。
B列は文字列が入力されており、A列〜C列又はD列もあわせて表示させたかったのですが
コードが理解できず現状の私の実力では難しそうでした。
しかしながら今後の為に、コードは参考に保存し、いづれ理解出来るようにしたいと思っております。
ありがとうございました。
(h.n) 2021/03/27(土) 19:22
>しかし数千行のセルへ以下の関数を入れてしまうとエクセルの速度が低下する >と想定しています。(その他セルにも関数が入っている為)
>SUMIFで行けそうです、恥ずかしながらSUMIFを思い出せず難しく考えておりました。
ちょっと矛盾してないですか?
(半平太) 2021/03/27(土) 19:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.