
いつもお世話になっております
下記のコードの内容がわかりません。
おしえてくれませんでしょうか
インターネットで検索すると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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iアプリ jamファイルの動的な出力
-
RegQueryValueExでの2バイト文字
-
printfの%eで指数部分の桁数を...
-
matlabでのRRI検出
-
00月00日00時00分→0000年00月00...
-
変数に格納したいです。
-
[error] [client ---- ] Argument
-
この花の名前を教えてください。
-
hiddenを使ったセッション
-
任意な項目のソート
-
病院の当番表
-
チェックボックスの値だけが受...
-
C言語 リスト構造
-
Perlで2つのテキストファイルの...
-
matlabのソースコードをpython...
-
stable diffusionのエラー
-
お直しお願いいたします
-
MySQLに登録すると文字化け
-
画像ファイルの読み込みについて
-
ホスト名の取得&表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
Excel VBA グラフ作成のとき...
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
C言語の構造体にてバブルソート...
-
sort関数でひらがなとカタカナ...
-
VisualBasicでレジストリキーの...
-
構造体のソートの方法について...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
ActivePerlでSMTPプロトコルで...
-
POSTで配列のデータを渡す方法は?
-
min_elementの三番目の引数
-
c言語の多次元配列で1から100ま...
おすすめ情報
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
検索してもこれが限界てす