
いつもお世話になっております
下記のコードの内容がわかりません。
おしえてくれませんでしょうか
インターネットで検索すると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のエラー
-
CTime.Formatが(NULL)に??
-
txtファイルを読み込んで表示関...
-
C言語の勉強しています。すみま...
-
【Excel VBA】10進数を2進数に...
-
UTF-8で5~6バイトになる文字コ...
-
sedコマンドで全ての2バイト文...
-
10Mバイトて文字数に すると何...
-
Rstudioによるテキストマイニン...
-
ESC/Pのテキスト印字の制...
-
html→aspxへのタグ変換方法
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
バイト列とバイナリ列の違いが...
-
ビットからバイトへの変換
-
Excel VBA メール作成について ...
-
C++ Builderで文字列をバイトに...
-
ビットスワップとバイトスワッ...
-
char str[256]の256の意味は?
-
perlで重複をさせない処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
C言語 ファイル内のデータと入...
-
int型(2バイト)データの分割
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
Excel VBA グラフ作成のとき...
-
【Excel VBA】10進数を2進数に...
-
データの値の近いものをグルー...
-
C言語の構造体にてバブルソート...
-
CreateProcessでの環境変数の設...
-
PINVOKEで構造体配列をマーシャ...
-
c言語 Bitについて
-
ビットデータのチェック方法
-
C++/CLIのオブジェクト型配列
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
System.Collections.ArrayList ...
おすすめ情報
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
検索してもこれが限界てす