
いつもお世話になっております
下記のコードの内容がわかりません。
おしえてくれませんでしょうか
インターネットで検索するとC#とかででるんです。
If D_Dic(r1.Value).IndexOf_3(Month(r1.Range("B1").Value)) < 0 Then _
D_Dic(r1.Value).Add (Month(r1.Range("B1").Value))
Sub megu_2()
Dim mydic As Object, D_Dic As Object
Dim r1 As Range, r_data As Range
Dim i As Integer, v, key
Set mydic = CreateObject("Scripting.Dictionary")
Set D_Dic = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet1") 'データのあるシート
For Each r1 In .Range("A2", .Cells(Rows.Count, "A").End(xlUp))
key = r1.Value & "_" & Month(r1.Range("B1").Value)
If Not mydic.exists(key) And _
WorksheetFunction.Count(r1.Range("C1:F1")) > 0 Then
mydic.Add key, Array(r1.Value, _
Month(r1.Range("B1").Value), 1, _
WorksheetFunction.Sum(r1.Range("C1:F1")))
ElseIf WorksheetFunction.Count(r1.Range("C1:F1")) > 0 Then
v = mydic(key)
v(2) = v(2) + 1
v(3) = v(3) + WorksheetFunction.Sum(r1.Range("C1:F1"))
mydic(key) = v
End If
If Not D_Dic.exists(r1.Value) Then _
D_Dic.Add r1.Value, CreateObject("System.Collections.ArrayList")
If D_Dic(r1.Value).IndexOf_3(Month(r1.Range("B1").Value)) < 0 Then _
D_Dic(r1.Value).Add (Month(r1.Range("B1").Value))
Next
End With
Set r_data = Worksheets("Sheet1").Range("J2") 'データを書きだすシートとセル
r_data.Offset(-1).Resize(, 4).Value = Array("商品", "月", "仕入月回数", "仕入個数")
For Each key In D_Dic.Keys
D_Dic(key).Sort
For i = 0 To D_Dic(key).Count - 1
r_data.Resize(, 4).Value = mydic(key & "_" & D_Dic(key)(i))
Set r_data = r_data.Offset(1)
Next
Next
Set r_data = Nothing
Set D_Dic = Nothing
Set mydic = Nothing
End Sub
No.1ベストアンサー
- 回答日時:
>インターネットで検索するとC#とかででるんです。
元々は.NET FrameworkのSystem.Collectionsにあったものですしね。
現在のバージョンではなくなっているので、3.5 を有効にしないと WIN10 では使えなかったと思います。
ArrayList.IndexOf メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
引数の与え方が3つあるのですがそもそも『配列内に値がどこにあるのか調べたい(VBA で言えば InStr みたいな物とも言える)』が目的でした。
しかしExcelはIndexOfのどれを指定していると言うのがわからないのか正常に動作しませんでした。
そんな時ググっていたら "_3" を追加して作業しているコードを見つけそのようにしたら値の検索(要素で言えば -1 が返れば無し 0 以上なら有り)が可能となり、その後は使用してます。
"_1" "_2" については必要な場面がなかったので使えるのかどうかは検証した事はありません。
使用している理由としてはDictionaryオブジェクトの Existsメソッドのようにキーの重複を避けるようなものがないって事でしょうか。
Dictionaryオブジェクトとは違いArrrayListクラスでは値が重複してても値の追加は可能なので。(上書きされるとかもない)
値が追加されてない場合の戻り値が-1なので"<0"ではなく"=-1"としてた方がわかりやすかったでしょうか?
いつもお世話になっております
配列に値がどこにあるのか調べる
なんとなくですが、わかったような。
けどやっばり難しいです。
の戻り値が-1なので"<0"ではなく"=-1"
考えます。有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データの値の近いものをグルー...
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
Rの解析で困っています(超初心...
-
c言語 Bitについて
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
C言語の構造体にてバブルソート...
-
sort関数でひらがなとカタカナ...
-
c言語 配列から数字だけをint型...
-
C言語について
-
printfの%eで指数部分の桁数を...
-
CreateProcessでの環境変数の設...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
SQLで1バイト、2バイト混在...
-
ListView重複データ削除
-
memcmp バイナリデータの比較方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
matlabでのRRI検出
-
C#でのswitch文
-
int型(2バイト)データの分割
-
C言語 ファイル内のデータと入...
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
iアプリ jamファイルの動的な出力
-
[error] [client ---- ] Argument
-
EOM間にperl文を作成したい
-
平滑化フィルタ
-
任意な項目のソート
-
変数の書き方
-
Cプログラムがどうしても動きま...
-
hiddenを使ったセッション
-
機械受注は?
-
チェックボックスの値だけが受...
おすすめ情報
Set arr1 = CreateObject("System.Collections.ArrayList")
Set arr2 = CreateObject("System.Collections.ArrayList")
With arr1
.Add "すきやき"
.Add "とんかつ"
.Add "オムライス"
End With
With arr2
.Add "焼きそば"
.Add "ラーメン"
.Add "お好み焼き"
End With
'arr1とarr2を連結
arr1.AddRange arr2
'arr1の中身を全て表示
For Each var In arr1
Debug.Print var,
Next var
検索してもこれが限界てす