advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 85 for VBA 強制終了 (0.004 sec.)
vba (14725), 強制終了 (237)
[[20061227162957]]
#score: 16176
@digest: 393ba5e5415f211fd2693afb9e4952ae
@id: 27584
@mdate: 2007-03-28T07:40:40Z
@size: 9302
@type: text/plain
#keywords: 頭コ (42649), 伊那 (30674), 6766000 (22862), 那-- (22494), 群別 (19043), 詰- (15497), 1653500 (15497), ラs (14761), ド群 (14495), ラc (14010), 370000 (13718), 信州 (13392), 缶詰 (11145), 2006 (9686), ス- (8227), 上金 (6457), メラ (6051), カメ (5389), ルウ (3805), 最小 (3774), 製品 (3397), カル (2813), 販売 (2452), 平均 (2418), 次元 (2246), 最大 (2144), ーカ (1872), 先頭 (1727), 売上 (1715), 小値 (1713), 大値 (1681), dic (1608)
『並べ替えた先頭コード群の頭行と終端行の検索』(伊那)
初めての投稿ですが、宜しくお願いします。 A B C D E F 製品名 単価 販売個数 販売日 A-カメラN 85000 10 2006/12/25 B-週刊誌 230 300 2006/12/20 E-TV-P 298000 5 2006/12/15 E-エアコン-M 118000 20 2006/12/3 C-ケーキ 1800 150 2006/11/23 B-新聞 120 650 2006/11/22 A-レンズN 58000 8 2006/11/12 A-カメラC 98000 25 2006/11/10 A-カメラS 95000 30 2006/11/2 E-TV-S 358000 8 2006/10/25 C-チョコレート 450 250 2006/10/10 C-お茶-C 130 1800 2006/7/30 C-コーラ-C 120 350 2006/8/5 D-ドレス-F 25000 6 2006/8/15 D-着物-M 185000 2 2006/7/20 B-文庫本 530 12 2006/6/20 C-缶詰-N 185 378 2006/6/5 E-TV-S 198000 23 2006/6/10 E-ストーブ-P 39800 170 2006/12/10 この様な感じで毎日アップデートされるデータベースの週、月単位での集計作業のVBA化を目指して お勉強中です。 1:売上金額算出(E列) 2:先頭コード記述(F列) 3:先頭コード群別並べ替え の順にマクロ化したのが下記のコードです。 Sub 製品群別分類() '************ 売上金額算出(E列)*********** Range("E2").Select ActiveCell.FormulaR1C1 = "=RC[-3]*RC[-2]" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E20"), Type:=xlFillDefault Range("E2:E20").Select '************ 先頭コード記述(F列) *********** Range("F2").Select ActiveCell.FormulaR1C1 = "=LEFT(C[-5])" Range("F2").Select Selection.AutoFill Destination:=Range("F2:F20"), Type:=xlFillDefault Range("F2:F20").Select Range("F2").Select '************ 先頭コード群別並べ替え ************ Selection.Sort Key1:=Range("F2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin End Sub この結果が下記の様になっています。 製品名 単価 販売個数 販売日 売上金額 先頭コード A-カメラN 85000 10 2006/12/25 850000 A A-レンズN 58000 8 2006/11/12 464000 A A-カメラC 98000 25 2006/11/10 2450000 A A-カメラS 95000 30 2006/11/2 2 850000 A B-週刊誌 230 300 2006/12/20 69000 B B-新聞 120 650 2006/11/22 78000 B B-文庫本 530 12 2006/6/20 6360 B C-ケーキ 1800 150 2006/11/23 270000 C C-チョコレート 450 250 2006/10/10 112500 C C-お茶-C 130 1800 2006/7/30 234000 C C-コーラ-C 120 350 2006/8/5 42000 C C-缶詰-N 185 378 2006/6/5 69930 C D-ドレス-F 25000 6 2006/8/15 150000 D D-着物-M 185000 2 2006/7/20 370000 D E-TV-P 298000 5 2006/12/15 1490000 E E-エアコン-M 118000 20 2006/12/3 2360000 E E-TV-S 358000 8 2006/10/25 2864000 E E-TV-S 198000 23 2006/6/10 4554000 E E-ストーブ-P 39800 170 2006/12/10 6766000 E 先端コード(例えばB群)の最初の行、最後の行を検索してその値を変数として取り扱い、 その群の平均値、最大値、最小値を別シートに記述する方法を考えているのですが、その部分で つまずいています。これが解決すれば万歳なのですが・・・ ちなみに信州さんの投稿を参考にさせて頂きました。信州さんも同じ事を考えているのでは? [[20060712165352]],[[20061225151826]] ---- すみません。少し的外れだった見たいで 自己削除しました。 考え直してみます (れいまま) ---- ぬおおっ、同じ事を考えていたんだ!感激〜。お互いに頑張ろーね。伊那さん 信州でした ---- 参考までに、ワークシート関数ですと、このようにするのですが。。 (6UP) =MATCH("A",F:F,0) ←最初の行 =MATCH("A",F:F,1) ←最後の行 ---- 明けましておめでとうございます。今年も宜しくお願いしま〜す。 MATCH関数を変数化して記述する方法を試みているのですが、うまくいきません。 Sub 変数テスト() Dim ka As Integer Dim ow As Integer ka = Match("A", "F:F", 0) ow = Match("A", "F:F", 1) MsgBox ka, ow End Sub 記述のどこが間違っているのでしょうか? 伊那 ---- 参考までに。。 (6UP) Sub Macro1() Dim KK As Long Dim OO As Long Dim AA As String Do On Error GoTo XX AA = InputBox("ALPHABET 1") KK = Application.Match(AA, Range("F:F"), 0) OO = Application.Match(AA, Range("F:F"), 1) MsgBox KK & "," & OO Loop XX: End Sub ---- すでにあるコードには触れませんが... Sub test() Dim dic As Object, a, i As Long, w(), y Set dic = CreateObject("Scripting.Dictionary) a = Range("a1").CurrentRegion.Resize(,6).Value For i = 2 To UBound(a,1) If Not dic.exists(a(i,6)) Then ReDim w(1 To 5) w(1) = a(i,6) : w(2) = a(i,5) : w(3) = a(i,5) : w(4) = a(i,4) : w(5) = 1 dic.add a(i,6), w Else w = dic.(a(i,6)) w(2) = w(2) + a(i,5) : w(3) = WorksheetFunction.Max(w(3),a(i,5)) w(4) = WorksheetFunction.Min(w(4), a(i,5)) : w(5) = w(5) + 1 dic(a(i,6)) = w End If Next y = dic.items : Set dic = Nothing : Erase a With Sheets("sheet2").Range("a1") .CurrentRegion.ClearContents .Resize(,4).Value = [{"製品名","平均","最大","最小"}] For i = 0 To UBound(y) .Offset(i + 1, 1).Value = y(i)(1) '<--ここから .Offset(i + 1, 2).Value = y(i)(2) / y(i)(5) .Offset(i + 1, 3).Value = y(i)(3) .Offset(i + 1, 4).Value = y(4) '<--ここまで変更 Next End With End Sub (seiya) ---- 6UPさん、SEIYAさん有難うございます。 6UPさんへ・・・Loopから抜け出せず、タスクマネージャでEXCELを強制終了させて抜け出しました。 (-.-;) Loopから抜け出す方法あります? seiyaさんへ・・・sheet2で下記の様に出ました。 製品名 平均 最大 最小 A 1653500 2850000 E B 51120 78000 E C 145686 270000 E D 260000 370000 E E 3606800 6766000 E 平均、最大、最小が1列ずれているので直そうとしたのですが、どこをいじればいいかわかりません。 もしかしてVBスクリプト手法による記述ですか?私はVBスクリプトはよーわからないのでこれからも教えて下さいね。 ---- >Loopから抜け出す方法あります? F列にマッチしない文字列、例えば、XXなどを入力すると終了します。 (6UP) ---- 久久の投稿です。桜がボツボツ咲くこの頃ですね。SEIYAさんが作ってくれた配列変数の意味がよーわからないまま ここに至っていますが、何とかしたいのでどなたか解説してくださいませ。m(_ _)m a, i As Long, w(), y それぞれの変数の意味がよく判らないのです。それとSEIYAさんが作成したコードをコピペして 動かしたところ、下記のような画面になってしまいます。 *記述ミス2箇所を修正しました。 @Set dic = CreateObject("Scripting.Dictionary) ↓ Set dic = CreateObject("Scripting.Dictionary") A w = dic.(a(i,6)) ↓ w = dic(a(i,6)) A B C D E 1 製品名 平均 最大 最小 2 A 1653500 2850000 E 3 B 51120 78000 E 4 C 145686 270000 E 5 D 260000 370000 E 6 E 3606800 6766000 E ---- おーーーっと、見逃していました。すみません! .Offset(i + 1,1) の ,1 の値を1づつ減じてください。 .Offset(i + 1,0) .Offset(i + 1,1) . . . のように。 (seiya) ---- D列の最小値が出てこないのですが、どこをいじればいいでしょうか? 伊那 ---- y(4) が y(i)(4) ですね。 (seiya) ---- 修正したら、うまくいきました。 .Offset(i + 1, 0).Value = y(i)(1) --->製品名 .Offset(i + 1, 1).Value = y(i)(2) / y(i)(5) --->平均 .Offset(i + 1, 2).Value = y(i)(3) --->最大 .Offset(i + 1, 3).Value = y(4) --->最小 と理解していいですね。 その場合のy()()はdic.itemsでしょうか? 伊那 ---- そのとおりです。 変数yに dic.Itemsを格納していますので、 考え方は y(i) -> dic.Item(i) (このような参照はできませんが) 各 item に配列を格納してありますので、必要な要素を 取り出すのに y(i)(1), y(i)(2), y(i)(3)... 1 = 先頭コード 2 = 売上金額累計 3 = 売上金額最大値 4 = 売上金最小値 5 = 出現回数(平均値を割り出すため) のような記述で取り出しています。 (seiya) ---- 有難うございます! ところでseiya先生、お願いがありますの。 For i = 2 To UBound(a,1) If Not dic.exists(a(i,6)) Then ReDim w(1 To 5) w(1) = a(i,6) : w(2) = a(i,5) : w(3) = a(i,5) : w(4) = a(i,4) : w(5) = 1 dic.add a(i,6), w Else w = dic.(a(i,6)) w(2) = w(2) + a(i,5) : w(3) = WorksheetFunction.Max(w(3),a(i,5)) w(4) = WorksheetFunction.Min(w(4), a(i,5)) : w(5) = w(5) + 1 dic(a(i,6)) = w End If Next の解説もしてくださいませんか?少しずつで結構ですので・・・・ @For i = 2 To UBound(a,1) 〜 Next のループのところで i = 2 To UBound(a,1)の部分でiの初値を何を元にして2と設定し、 UBound(a,1) までをループしているのか? AUBound(a,1):インデックス番号の最大値を取得?と思われますが、(a,1)の意味は? がちんぷんかんぷです。 ---- 高速にするために範囲を変数に格納してから処理していますので、 理解がしにくいと思います。 Step debugすることをお勧めします。 VB editorで [表示]-[ローカルウィンドウ]を表示させ コードをクリックしてF8を押すと、一行毎実行しますので、 各変数の変化をローカルウィンドウ内で視認することができます。 a = Range("a1").CurrentRegion.Resize(,6).Value 変数 a に A1:Fx の範囲の値を格納した1Base(最小要素Indexが1)の2次元配列を生成 ローカルウィンドウで a を開いてください a+ の + をクリックすると展開します。 これで、a(i,1), a(i,2)...の正体が判明すると思います。 For i = 1 To UBound(a,1) UBound(a,1)で2次元配列の1次元目(行)の最大値を取得 あとは、Step debugして確認してください。 そして、またわからなかったら質問してください。 (seiya) ---- ローカルウインドウ、初めて見ました。奥が深いですね〜。しばし、ローカルウインドウで確認しながら勉強させて頂きます。 とりあえず、お礼まで 伊那 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/200612/20061227162957.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97023 documents and 608155 words.

訪問者:カウンタValid HTML 4.01 Transitional