
いつもお世話になっております
下記のコードの内容がわかりません。
おしえてくれませんでしょうか
インターネットで検索すると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ランキング
-
ビットデータのチェック方法
-
C言語についてです! 同じ年の...
-
printfの%eで指数部分の桁数を...
-
10個の実数に対する降順ソート...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
Javaで日本語1文字のバイト数
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
DataGridViewの特定列に入力さ...
-
Rstudioによるテキストマイニン...
-
char str[256]の256の意味は?
-
最大長を用意せずにバイナリデ...
-
「1TB」のHDDに日本語は何字入...
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
-
100MB
-
PHPのCookieが有るか無いかで、...
-
日付時刻を4バイトに
-
文字列の最後の一字を削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
C言語の勉強しています。すみま...
-
C言語についてです! 同じ年の...
-
ポインター引数の関数でコンパ...
-
c言語での wavファイルの編集(...
-
C#でのswitch文
-
ビットデータのチェック方法
-
txtファイルを読み込んで表示関...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
'dataType' 引数を Null にする...
-
Cのプログラムがどうしても動き...
-
C言語について
-
matlabでのRRI検出
-
【VBA】複数条件の検索
-
VBA セルの値入力について
-
Nextの次に、入力した数値の中...
-
System.Collections.ArrayList ...
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報
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
検索してもこれが限界てす