
Sub k()
Dim i As Long
Dim j As Long
dim zz as long
Dim zz As Long
zz = Cells(Rows.Count, 9).End(xlUp).Row
If Range("i2:i" & zz) >= DateSerial(2017, 10, 1) And Range("i2:i" & zz) <= DateSerial(2018, 3, 31) Then 2017/10/1~2018/3/31
j = Month(Range("i2:i" & zz)) 月を取り出す
For i = 3 To 4
For j = 4 To 6
金額の合計 取引先
Cells(i, j).Value = Application.SumIfs(Range("j2:j" & zz), Range("h2:h" & zz), Cells(i, 3), Range("i2:i" & zz), Cells(2, j))
2017/10/1~2018/3/31
Next j
Next i
End If
End Sub
ERROR 型が一致しませんとでます。
間違いわかる方いますでしょうか
H I J
販売先 商品名 販売額
井上商事 8月8日 52,000
上田青果 9月8日 65,000
井上商事 10月8日 78,000
上田青果 11月1日 43,000
井上商事 12月12日 45,000
上田青果 2018/3/5 57,000
井上商事 2018/3/6 49,000
上田青果 2018/3/7 80,000
井上商事 2018/3/8
上田青果 2018/3/9 80,000
上田青果 2018/3/10 80,001
上田青果 2018/3/11 80,002
C列 D E F
8 9 10
井上商事
上田青果
No.9ベストアンサー
- 回答日時:
『期間』について。
あくまで好みではあるでしょうけど私は For~Next よりは For Each~Next をよく使います。
まずH列を基準とするなら、
Dim r As Range 'Range型で宣言
For Each r In Range("H2", Cells(Rows.Count, 8).End(xlUp)) ' これで変数:r でH2~H最終行を1セルずつ取得できます
Next ' 最後に付くのは同じ
期間のIf文については、日付はI列なのでH列の1つ右になりますから、
r.Offset(0,1).Value
で取得できます。(Offsetの詳細は省きます)
For Each r In Range("H2", Cells(Rows.Count, 8).End(xlUp))
If r.Offset(0,1).Value >= DateSerial(2017, 10, 1) And r.Offset(0,1).Value <= DateSerial(2018, 3, 31) Then ' 2017/10/1~2018/3/31
'~ ここでDictionaryの処理をします。
No.13
- 回答日時:
Dictionaryを使うのなら、
・No.10にある販売先と月を連結したキーと、販売額を合計していく値を持つ物
・販売先を書き出す際に行を決める販売先をキーにし、販売先毎に行数を決めた値を持つ物
の2つのDictionaryを用意した方が、まずは簡単にいけるかもですね。
月数が既に決まっているなら、以前回答した(かな?)『値を配列(Array)に』する事で1つに出来ますが、
任意の月数の集計を行うにはちょっと向かない(面倒)になりそうですし。
No.12
- 回答日時:
No.6についてですけど。
仮に作業列を追加できるなら、そこに月だけを数式で求めて
Application.SumIfs を使えるのかな?とも思うのですが、
こちらでは検証できないですしね。
No.10
- 回答日時:
Dictionaryについて
これも好みはありますけど。
For Each r In Range("H2", Cells(Rows.Count, 8).End(xlUp))
If r.Offset(0, 1).Value >= DateSerial(2017, 10, 1) And r.Offset(0, 1).Value <= DateSerial(2018, 3, 31) Then ' 2017/10/1~2018/3/31
st = r.Value & "_" & Month(r.Offset(0, 1).Value) ' 販売先と月(Month関数)を連結したのがキー
If Not myDic.Exists(st) Then ' もしキーがまだ登録されてない時
myDic.Add st, r.Offset(0, 2).Value ' J列の金額を値とする
Else ' 既に登録済みなら
myDic(st) = myDic(st) + r.Offset(0, 2).Value ' 既に登録されてる値に次の値を加算
End If
End If
Next
・・・文字数の限界はあるのかな?
No.8
- 回答日時:
No.7の補足に対して(こっちは見れました)
いいえ、Findメソッドを用いたとしてもNo.6に書いた問題は解決できません。
特に『日付』についてはFindメソッドは扱いが難しいです。(部分一致の場合)
データを順番に調べていって、『期間内にある』『日付から月だけを抽出する』などを
1個ずつ調べ、あとはDictionaryで纏め上げるのが良いのかもしれません。
ただ私は古いバージョンなので最近のExcelには何か機能はあるかもですが、
個人的にはこのような場合だとDictionary使ってしまいますね。(馬鹿の1つ覚えみたいに)
No.6
- 回答日時:
No.5です。
そのIf文もなんですけど、Application.SumIfs の条件に
前回はI列(?)に月を示す数値だけを入れてたのに対し、
今回は『年・月・日又は月・日』を入れているじゃないですか?
で、条件として与えるのが『月』を示す数値なので一致しないのです。
なので Application.SumIfs をやめて他の方法に切り替えれば良いのかなと。
No.5
- 回答日時:
No.3です。
もうご覧になってないかな?
問題は
>Range("i2:i" & zz), Cells(2, j)
ここでしょうね。
データの方は『年・月・日』であるのに対し、抽出条件は『月』のみ。
なのでダメなんでしょうね。
Application.SumIfsではない方法でも良ければいけるかもでしたね。

No.4
- 回答日時:
Range("i2:i" & zz)と言う書き方が間違い。
範囲指定では判定出来ない。セル1個1個で判定。
Range("i" & zz)の様にセルを直打ちにする。
そこら中で使ってるから構造自体を見直す。
これでokの場合にjを求めてループ処理。とか、作り直しが必要。
全面見直し・作り直し。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
B列の最終行までA列をオート...
-
VBA 何かしら文字が入っていたら
-
vba 2つの条件が一致したら...
-
複数csvを横に追加していくマク...
-
VBAのFind関数で結合セルを検索...
-
Excel VBA:エクセルのマクロで...
-
C# dataGridViewの値だけクリア
-
Changeイベントでの複数セルの...
-
マクロ 最終列をコピーして最終...
-
URLのリンク切れをマクロを使っ...
-
【VBA】2つのシートの値を比較...
-
二つのリストを比べて部分一致...
-
VBAでのリスト不一致抽出について
-
【Excel VBA】 B列に特定の文字...
-
複数の列の値を結合して別の列...
-
SetDlgItemTextの使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報
このコード実行すると合計が0
になります。加算されないです
うまくいきませんでした。
ここまでお付き合い
有難うございました。
zz = Cells(Rows.Count, 1).End(xlDown).Row
If Range("b4:b" & zz) >= DateSerial(2017, 4, 1) And Range("b4:b" & zz) <= DateSerial(2017, 11, 30) Then
'↑の部分ですよね
'r = month(range("b4:b"&zz)
'i = r
'恐らくこんなかんじなんでしょうかあともう少しなんだけどな
そうなんですよね いろいろ質問していますが難しいばかりで。恐らくfind(what:=r,lookin:=とか使用するんだおもんですが?めぐみん様はできるからいいですよね
恐らくFIND(WHAT:=R,LOOKIN:=XLVALUE,XLWHOLEとか
使用してやるのが一番いいんでしょうね
今FINDを基礎がやっていますがなかなか応用できない
Scripting dictinonary
ですね 少しやってみます。
はい、Excel関数でMONTHで月を取り出しSumIFSを利用すればできます。がそこをVBAでやりたいわけなんです。f Year(Cells(i, "B")) = Year(Date) Then Set c = myrng.Find(what:=.Cells(i, "a"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then i = Month(Cells(i, "B"))今こんな所ですが駄目です。
このコードかっこいいです。なんとなくですがわかります。ひとつひとつ考えながら使用させて頂きたいと思います。まだ、不完全とは言え本当にかっこいい。