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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
Excelの30個ずつの平均値の出し方
-
エクセルで、重複データを除外...
-
excel:別シートの値を飛び飛び...
-
VBA 数式を最終行までコピー
-
マクロ コピー貼り付けと重複デ...
-
VBA セル内で改行されていたら...
-
差し込み印刷 «Next Record»に...
-
エクセルVBA C列に特定の文字列...
-
エクセル2003でマクロでマクロ...
-
Excel VBA 【QueryTables.Add】...
-
EXCELのデータの並び替えを行い...
-
エクセルマクロで、特定の列が...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
Excelで同じセルに箇条書きをし...
-
エクセルの複数のセルを一括で...
-
A1セルに入力したら、入力時間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
複数の条件に合う行番号を取得...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
Excelの30個ずつの平均値の出し方
-
エクセルで、重複データを除外...
-
Excelで2つのデータの突合せを...
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
エクセルで1つの会社名に対して...
-
エクセル2016にて、行挿入&コピ...
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
VBA 大きなtxtテキストファ...
-
エクセル~空白のセルのある行...
-
500行の中から、多い順に抽出す...
-
不要な行を消したい
-
本日の日付を超えているものを...
-
【Excel】小計単位で並べ替えを...
おすすめ情報