
No.3ベストアンサー
- 回答日時:
こんにちは!
一例です。
元データはSheet1にあり、Sheet2に表示するとします。
尚、1列目は項目行で最終列まで項目名が入っていて、B列2行目以降のデータはすべて数値だとします。
標準モジュールにしてください。
Sub Sample1()
Dim myDic As Object
Dim i As Long, j As Long
Dim lastRow As Long, lastCol As Long
Dim myStr As String, buf As String, wS As Worksheet
Dim myKey, myItem, myR, myAry1, myAry2
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
Range(wS.Cells(1, "A"), wS.Cells(1, lastCol)).Value = Range(.Cells(1, "A"), .Cells(1, lastCol)).Value
myR = Range(.Cells(2, "A"), .Cells(lastRow, lastCol))
For i = 1 To UBound(myR, 1)
For j = 2 To lastCol
buf = buf & myR(i, j) & "_"
Next j
buf = Left(buf, Len(buf) - 1)
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), buf
Else
myAry1 = Split(myDic(myR(i, 1)), "_")
myAry2 = Split(buf, "_")
For j = 0 To UBound(myAry1)
myStr = myStr & Val(myAry1(j)) + Val(myAry2(j)) & "_"
Next j
myStr = Left(myStr, Len(myStr) - 1)
myDic(myR(i, 1)) = myStr
End If
buf = ""
myStr = ""
Next i
End With
myKey = myDic.keys
myItem = myDic.Items
myR = Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, lastCol))
For i = 0 To UBound(myKey)
myR(i + 1, 1) = myKey(i)
myAry1 = Split(myItem(i), "_")
For j = 0 To UBound(myAry1)
myR(i + 1, j + 2) = myAry1(j)
Next j
Next i
Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, lastCol)) = myR
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
構文作成頂き誠にありがとうございました。
意図通りの結果が算出された上、一瞬で処理が終わりました。
VBAの配列型がまだよく理解出来ていない分があるので、頑張って勉強致します。
No.7
- 回答日時:
>A列で重複している行
が妨げになっているなら、シートをコピーしてそのシートで リボン>データ>重複の削除で必要なデータシートにしてから
そのシートにVBAで~処理してみてはいかがでしょう。ワークシート関数でも問題ないと思います。
シートをコピーしてリボン>データ>重複の削除で必要なデータシートにすること自体もVBAで特記するほど時間はかからないかと思いますが
ちなみに条件がないなら、合計数値を知りたいだけなら、ステータスバーに合計を設定すれば全セルに対しても一瞬かと思いますよ。
VBAで複雑な条件を処理するなら、tom04さんが示されているように配列で計算するのが早いと思います。
>A列で重複している行を削除し 私も意味の理解に達していませんが 参考まで
ご連絡ありがとうございます。
説明不足で大変申し訳ございません。
例を出せばよかったです、すみません。
A列 B列 C列 D列・・・
AAA 0 1 2
AAA 2 2 2
AAA 0 5 0
↓
AAA 2 8 4
No.6
- 回答日時:
No2です
「列で合計したい」ということは理解しました。
「重複を削除し」がいまいちわかりません。
「重複していない行だけを集計したい」という意味で良いのでしょうか?
条件が多少変わっても、フィルター機能とSUBTOTAL関数で求められそうな気がします。
例えば、「重複の無い行だけを集計」という場合なら、準備として…
1)どこかに作業列を設けて、1行目に
=IF(COUNTIF(A:A,A1)=1,"○","")
の式を入れ、フィルハンドルをダブルクリック(下方までフィルコピーされる)
この結果、A列に重複の無い行だけ○が表示されます。
2)どこかの行に集計行を設け(大抵は最初か、最後の行)
=SUBTOTAL(109,1列分の範囲)
の式を入れて、横方向にフィルコピーします。
この状態では集計行には各列全体の合計値が表示されていると思います。
3)作業列のフィルターで○のみを表示する
この結果、集計行には○のみの行の集計が表示されることになります。
行数が多いとのことなので、若干時間は掛かるかもしれませんが、SUMIFで計算するよりも遥かに速いのではないかと思います。
ご連絡ありがとうございます、
説明が伝わりづらく大変申し訳ございません。
A列の重複は全て削除し、B列以降のデータは、列毎、A列の重複ごとに合算したいと考えていました。
例を出せばよかったです、すみません。
A列 B列 C列 D列・・・
AAA 0 1 2
AAA 2 2 2
AAA 0 5 0
↓
AAA 2 8 4
No.5
- 回答日時:
レイアウトがわかりにくいですが、統合機能は使えませんか?
データ数が多いなら、一旦表を上半分と下半分にして次はそれを合算するとかでもできるとおもいますが。
No.2
- 回答日時:
こんにちは
>列は現状AE列まである為、SUMIF関数だとすごく時間がかかってしまっています
行数も効いてくるので、どれほど効果があるかはわかりませんが・・・
>B列~最終列までをそれぞれの列毎に数値を合算したいのですが
抽出処理と同に列の合計計算を行わせているので、計算量が増える原因になっていると想像します。
「B~最終列」は常に一セットなのでしょうから、先に「最終行+1」列あるいは、A列の右側に新しく列を挿入して、その列に(各行の)「B~最終列の合計値」を算出しておけば良いのでは?
(SUM関数等で簡単に求められます)
SumiFの集計列として、こちらの列1列だけを指定することで行数分の計算だけにできるので、かなり負荷が減るのではなかろうかと推測します。
ご回答ありがとうございます。
説明不足で申し訳ございません。
「B~最終列の合計値」ではなく、列毎で合計したい為、
B列+C列・・・+最終列の合計ではないです。
B列はB列の合計、C列はC列の合計・・・最終列は最終列の合計とそれぞれの列毎の
合計をさせたいと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) Excel2019 列と列(2列)の数値の重複を調べたい 1 2023/05/11 13:35
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで重複する項目を1つにまとめて金額を合計したい
Excel(エクセル)
-
VBAで重複データを合算したい
Excel(エクセル)
-
重複データの合算(VBA)
Visual Basic(VBA)
-
-
4
vba 重複データ合算
Visual Basic(VBA)
-
5
重複データをまとめて合計を合算する
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
VBAで重複データを合算したい(時間)
Excel(エクセル)
-
8
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
9
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
10
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
11
重複するIDのデータを1行にまとめるvbaのコード
Access(アクセス)
-
12
エクセルvbaで重複データを加算したい
Excel(エクセル)
-
13
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
14
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
15
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
16
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
17
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
18
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
19
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
20
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
EXCELで 一桁の数値を二桁に
-
PowerPointで表の1つの列だけ...
-
Excelで半角の文字を含むセルを...
-
エクセル 文字数 多い順 並...
-
「B列が日曜の場合」C列に/...
-
エクセルで文字が混じった数字...
-
エクセルで最初のスペースまで...
-
お店に入るために行列に並んで...
-
エクセルの並び変えで、空白セ...
-
オートフィルターをかけ、#N/A...
-
Excelでの列比較(A列とB列の組...
-
VBA 連続行データを5行ずつ隣の...
-
エクセル(勝手に太字になる)
-
【エクセル】指定した文字以外...
-
エクセル 時間帯の重複の有無
-
エクセルの表から正の数、負の...
-
文字を入力したら数値が自動入...
-
エクセルで、列の空欄に隣の列...
-
2つのエクセルのデータを同じよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
EXCELで 一桁の数値を二桁に
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
エクセル 文字数 多い順 並...
-
Excelで半角の文字を含むセルを...
-
「B列が日曜の場合」C列に/...
-
エクセルで、列の空欄に隣の列...
-
Excel 文字列を結合するときに...
-
Excel、市から登録している住所...
-
【VBA】特定列に文字が入ってい...
-
エクセルのセル内の文字の一部...
-
エクセル 同じ値を探して隣の...
-
お店に入るために行列に並んで...
-
エクセルの並び変えで、空白セ...
-
文字列に数字を含むセルを調べたい
-
エクセルの項目軸を左寄せにしたい
おすすめ情報