2024年のうちにやっておきたいこと、ここで宣言しませんか?

連想配列を配列に格納したいです。
vba初心者です。今集計マクロを作成中なのですが、上手くいきません。

ご教示頂けたら幸いです。

ソース
Sud countNumbers()
Dim i As Integer
Dim sline As Integer

sline = 1
Set sd = CreateObject(″Scripting.Dictionary″)

Application.ScreenUpdating= False

For i = 5 To 500
sNo=Worksheets(1).Cells(sline,i).Value
sd(sNo) = sd(sNo) + 1

Next

Application.ScreenUpdating = True

i = 1
For Each sn In sd
Worksheets(1).Cells(1,i).Value = sn & ″が″ & sd(sn) & ″件″

i = i + 1
Next
Set sd = Nothing

End Sub

この値を配列に貯めて、1つのセルに参照したいのですが!
上手くいきません…

宜しくお願いします。

A 回答 (2件)

こんにちは



>今集計マクロを作成中なのですが、上手くいきません
うまくいかない場合は、コードを見ても実際に何をしたいのかわかりませんので、「何をどうしたいけれど、○○がうまくいかない」という説明をしないと回答ができないと思います。

ご提示のコードで気が付くのは、ます
 Sud → Sub
 (全角の)”→ (半角)"
の修正が必要と思われること。


以下、勝手な推測ですが・・・
1行目(5列から500列まで)の値を参照して、同じものの重複回数をカウントし、その結果を表示したい。
ということと解釈しました。(もしかすると1列目なのかも知れませんが、コードは行になっているので)

ご提示のコードでは結果の表示が、1行目1列からになっていますが、項目数が4以上あると元のデータ部分をに上書きすることになってしまいますので、4項目までを表示するように制御するか。別のセルに表示するようにした方が良さそうに思います。

結果を、2行目に左詰で表示するものとして、サンプルにしてみました。
・空白セルはカウントからはずしています。
・シート名を省略していますので、アクティブシートに対して処理が行われます。

Sub Sample()
Dim sd As Object
Dim val As String
Dim i As Long, k

Set sd = CreateObject("Scripting.Dictionary")
For i = 5 To 500
 val = Cells(1, i).Value
 If val <> "" Then
  If sd.Exists(val) Then sd(val) = sd(val) + 1 Else sd(val) = 1
 End If
Next i

k = sd.Keys
For i = 0 To sd.Count - 1
 Cells(2, i + 1).Value = k(i) & "が" & sd(k(i)) & "件"
Next i

Set sd = Nothing
End Sub
    • good
    • 0
この回答へのお礼

お返事遅れて大変申し訳ありません!

やりたい事は500行500列のデータがあります。

一行一行に商品があり。

1列ずつには、発注数があります。

何の商品に発狂数が何件あるかを合計せずに、重複している数字は重複回数を記載して集計したいのです!

本日は、時間の都合で試せないのですが…

サンプルマクロは、参考にさせて頂きます!

また結果がで次第ご連絡いたします。

ご教授大変感謝いたします。

ありがとうございます。

お礼日時:2017/10/16 21:58

その集計マクロで何をなさりたいのか、コードの内容ではなく、業務的になさりたいことを提示していただけませんでしょうか。

    • good
    • 0
この回答へのお礼

業務的には、行に商品が500件あり

列には発注数が500件あります。

一商品=一行ずつ、何ロットが何件あるかを、重複数は集計して、一つセルに表示したいのです。

お礼日時:2017/10/16 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報