No.3ベストアンサー
- 回答日時:
No.2です。
>でも量が多いと 時間がかかりますね。
速度重視でやってみました。
Sub Sample2()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim wS As Worksheet
Dim myKey, myItem, myR
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
wS.Range("A:B").ClearContents
With Worksheets("Sheet1")
wS.Range("A1") = .Range("A1")
wS.Range("B1") = "合計"
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "B"))
For i = 1 To UBound(myR, 1)
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), myR(i, 2)
Else
myDic(myR(i, 1)) = myDic(myR(i, 1)) + myR(i, 2)
End If
Next i
End With
myKey = myDic.keys
myItem = myDic.items
myR = Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, "B"))
For i = 0 To UBound(myKey)
myR(i + 1, 1) = myKey(i)
myR(i + 1, 2) = myItem(i)
Next i
Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, "B")) = myR
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub
※ Excel2003だと最大行は65536行なので
最大行までデータがあってもおそらく1秒程度で終わると思います。m(_ _)m
まずもって 感謝申し上げます。天才的に早いですね。めっちゃ早いですね!!! 感動いたしました!! 先のプログラムと記載用量同じようなのにこんなに違うものなのかと!。助かりましたありがとう。
ついでとはいってまことに虫のいい話なんですが、エクセルマクロに自分のエクセルの業務捜査を記憶させてマクロにしましたが、結果がでるまで10分かかるのがあるんです、これ短くなりませんか。
同じく2003エクセルです。
内容は
SHEET1で
B列下に患者名、C列下に患者番号、BE列下に:患者使用薬品名 (但し、これは表面上は薬品名は出てゐるが、例:=IF(A28="中止",0,D28)などしての結果表示)、同じく BP列下に:患者薬品数量(但し:これも例:=IF(A28="中止","",BO28)の結果表示であった場合、但し各行では先にコメントのなどが入ってゐるものもあり、それを除去してたため空欄の行もあります。)
それをSHHET2にコピーして単に集計したいのです(B列:誰々さんで、 C列:患者番号○○に、D列:このお薬、D列:何錠出てゐる)ということを。当然 同じ患者で何種類も使用している場合はあります。(単に値だけのコピーですが、空欄の行もあります。)
その時にマクロ操作の記載は以下のようになっております。
下方の方のマクロ記載は 先に出てゐる 例:=IF(A28="中止",0,D28)などしての結果 で「0」が出る場合もあり、その時の「0」の除去作業なんです。
現在のそのプログラム記載 乗っけようしたらこの欄 文字数がいっぱいで受け付けなかったのでカットしました。
これって2003のエクセルで現在の10分より早くできますか?
メールアドレスわかったらプログラム内容直接お送りいたすのですが・・。勝手なわがままですみません。
No.2
- 回答日時:
こんにちは!
一例です。
Sheet1の1行目は項目行でデータは2行目以降にあるとします。
標準モジュールにしてください。
Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim wS As Worksheet
Dim myKey, myItem, myR
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
wS.Range("A:B").ClearContents
With Worksheets("Sheet1")
wS.Range("A1") = .Range("A1")
wS.Range("B1") = "合計"
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "B"))
For i = 1 To UBound(myR, 1)
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), myR(i, 2)
Else
myDic(myR(i, 1)) = myDic(myR(i, 1)) + myR(i, 2)
End If
Next i
End With
myKey = myDic.keys
myItem = myDic.items
For i = 0 To UBound(myKey)
With wS.Cells(i + 2, "A")
.Value = myKey(i)
.Offset(, 1) = myItem(i)
End With
Next i
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub
>職場のエクセル古くてできないため・・・
手元にExcel2003がないので検証できませんが、
おそらくExcel2003でも動くと思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) エクセルの関数について A列(50個)のデータ(商品名)が、B列(100個)に、含まれているかを検索 2 2022/11/28 12:40
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
Excelで2つのデータの突合せを...
-
Countifよりも早く重複数をカウ...
-
本日の日付を超えているものを...
-
【VBA】A列にある連続したデー...
-
マクロ コピー貼り付けと重複デ...
-
エクセルのマクロ Range("A1")...
-
エクセル 複数の文字列を別シ...
-
エクセルVBA C列に特定の文字列...
-
Excel 列データのランダムな並...
-
エクセルで、特定の文字を含む...
-
EXCELでの重複データカウント方...
-
エクセルデータの比較をしたい。
-
エクセル2003でマクロでマクロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
エクセルで日付から日にちを削...
-
Excelで2つのデータの突合せを...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
Excelの30個ずつの平均値の出し方
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
エクセル2016にて、行挿入&コピ...
-
【Excel】小計単位で並べ替えを...
-
VBA 大きなtxtテキストファ...
-
500行の中から、多い順に抽出す...
-
エクセル~空白のセルのある行...
-
エクセルで1つの会社名に対して...
-
【エクセル】1列内に複数ある同...
-
Excel VBA 空白セル以下のデー...
おすすめ情報